自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PostgreSQL建立索引如何避免寫數(shù)據(jù)鎖定

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

寫這篇blog源自一個帥哥在建索引發(fā)生了表鎖的問題。先介紹一下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 ] 

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

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

--使用

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

--副作用

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

--失敗

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

  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,然后再執(zhí)行create index concurrently。還有一個是執(zhí)行reindex index_name命令,但是后者不支持concurrent參數(shù)。

--總結

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

英文原文: 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

云鎖定網(wǎng)絡服務云供應商

2021-05-21 10:50:39

云計算供應商鎖定云遷移

2024-03-01 09:57:19

數(shù)據(jù)庫檢索項目

2022-10-12 13:33:25

PostgreSQL數(shù)據(jù)庫

2013-07-16 09:38:01

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

2014-10-15 10:01:12

2018-04-17 12:23:37

多云云計算供應商

2013-04-11 09:21:46

PaaS平臺即服務PaaS產品

2011-09-05 10:01:41

虛擬化

2024-07-08 10:48:51

2011-05-18 13:16:21

MySQL數(shù)據(jù)庫鎖定

2021-04-22 11:22:12

云計算數(shù)據(jù)遷移混合云

2017-10-24 14:48:05

數(shù)據(jù)數(shù)據(jù)驅動文化大數(shù)據(jù)

2010-11-29 10:22:46

Sybase建立索引

2012-05-07 15:32:46

Erlang

2011-04-11 16:50:13

Oracle數(shù)據(jù)庫索引

2023-09-14 23:05:57

? ?MySQL數(shù)據(jù)庫

2023-03-27 09:57:00

PostgreSQL并發(fā)索引

2019-10-12 09:58:53

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

2011-08-15 18:20:05

建立索引SQL Sever數(shù)據(jù)
點贊
收藏

51CTO技術棧公眾號