成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PostgreSQL建立索引如何避免寫數據鎖定

數據庫 其他數據庫 PostgreSQL
寫這篇blog源自一個帥哥在建索引發生了表鎖的問題。正常情況下Postgresql建立普通btree索引時會阻塞DML(insert,update,delete)操作,直到索引完成,期間讀操作不受阻塞。

寫這篇blog源自一個帥哥在建索引發生了表鎖的問題。先介紹一下Postgresql的建索引語法:

Version:9.1

  1. CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ]  
  2.     ( { column | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )  
  3.     [ WITH ( storage_parameter = value [, ... ] ) ]  
  4.     [ TABLESPACE tablespace ]  
  5.     [ WHERE predicate ] 

這里不解釋語法的諸多參數使用(排序,使用方法,填充因子等),主要說一下concurrently的使用場景。

正常情況下Postgresql建立普通btree索引時會阻塞DML(insert,update,delete)操作,直到索引完成,期間讀操作不受阻塞。當只有一個用戶操作這當然沒問題,但是在生產環境,并發比較高的情況下,特別是大表建索引就不能這么操作了,不然用戶要跳起來罵娘了,點個按鈕一天還沒反應過來。

--使用

Postgresql提供了一個參數,可以在線建立索引的時候避免因寫數據而鎖表,這個參數叫concurrently。使用很簡單,就是用create index concurrently來代替create index即可。

--副作用

當然了,使用這個參數是有副作用的,不使用這個參數建索引時DB只掃描一次表,使用這個參數時,會引發DB掃兩次表,同時等待所有潛在會讀到該索引的事務結束,這么一來,系統的CPU和IO,內存等會受一點影響,所以綜合考慮,仍然讓用戶自行選擇,而不是默認。

--失敗

在使用concurrently參數建索引時,有可能會遇到失敗的情況,比如建唯一索引索引發現數據有重復,又或者用戶發現建索引時建錯字段的,取消建索引操作了。此時該表上會存在一個索引,這是因為帶這個參數的建索引命令一經發出,就首先會在系統的日志表里先插一個索引記錄進去,又因為這個索引最終建失敗了,所以會被標記一個INVALID的狀態,如下:

  1. postgres=# \d t_kenyon  
  2.        Table "public.t_kenyon" 
  3.  Column |  Type   | Modifiers   
  4. --------+---------+-----------  
  5.  col    | integer |   
  6. Indexes:  
  7.     "idx" btree (col) INVALID 

--重建

遇到上述失效的索引重建時兩個辦法,一個是drop index index_name,然后再執行create index concurrently。還有一個是執行reindex index_name命令,但是后者不支持concurrent參數。

--總結

在生產上執行創建索引命令時最好帶上此參數,因為多消耗一點系統資源和時間來換取用戶的不間斷訪問更新是相對值得的。 如果是索引重建,可以再在原基礎上建立一個不同名的相同索引,然后取消老的索引。

英文原文: http://www.postgresql.org/docs/9.1/static/sql-createindex.html

譯文鏈接:http://my.oschina.net/Kenyon/blog/93465

責任編輯:林師授 來源: OsChina
相關推薦

2015-09-14 10:03:23

云鎖定網絡服務云供應商

2021-05-21 10:50:39

云計算供應商鎖定云遷移

2024-03-01 09:57:19

數據庫檢索項目

2014-10-15 10:01:12

2013-07-16 09:38:01

廠商鎖定 云廠商鎖定開放APISaaS廠商

2022-10-12 13:33:25

PostgreSQL數據庫

2018-04-17 12:23:37

多云云計算供應商

2013-04-11 09:21:46

PaaS平臺即服務PaaS產品

2021-04-22 11:22:12

云計算數據遷移混合云

2011-09-05 10:01:41

虛擬化

2011-05-18 13:16:21

MySQL數據庫鎖定

2024-07-08 10:48:51

2017-10-24 14:48:05

數據數據驅動文化大數據

2023-09-14 23:05:57

? ?MySQL數據庫

2011-04-11 16:50:13

Oracle數據庫索引

2010-11-29 10:22:46

Sybase建立索引

2012-05-07 15:32:46

Erlang

2019-10-12 09:58:53

云計算IT服務云計算提供商

2010-05-24 14:57:03

MySQL數據庫表

2009-02-02 16:50:34

數據庫表的鎖定MySQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品电影 | 久久男人| 国产精品国产a级 | 国产精品精品3d动漫 | 成人日韩精品 | 亚洲网址在线观看 | 久久久精品亚洲 | 国产美女一区二区三区 | 久久91av | av 一区二区三区 | av中文字幕在线 | 一区二区视屏 | 国产日韩精品一区 | 日韩精品一区二区三区视频播放 | 国产精品18久久久久久久 | 亚洲一区二区中文字幕 | 亚洲精品视频在线看 | 日韩视频 中文字幕 | 国产 欧美 日韩 一区 | 日韩av电影院| 日韩av成人在线 | 狠狠的干| 日本不卡一区二区三区在线观看 | 国产成人免费在线 | 国产黄色大片在线免费观看 | 成人免费一区二区三区视频网站 | www亚洲免费国内精品 | 国产精品99一区二区 | 91精品国产综合久久久久久丝袜 | 一级毛片视频 | 一级毛片视频免费观看 | 日韩欧美在线一区 | av免费观看在线 | 成人做爰9片免费看网站 | aaaaa毛片 | 国产美女精品 | 9久久婷婷国产综合精品性色 | 99久久影院 | 亚洲视频免费一区 | 一级片免费在线观看 | 欧美日韩免费在线 |