中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

postgresql鎖住的簡單介紹

postgres怎么在線創建索引

我們知道數據庫創建索引可能會鎖住創建索引的表,并且用該表上的一次掃描來執行整個索引的構建,這樣在創建索引時會影響在線業務,非常大的表創建索引可能會需要幾個小時,這樣阻塞業務是不被允許的。商業數據庫一般都提供在線創建索引的能力,PostgreSQL作為開源數據庫,也提供了這樣的功能。我們在CREATE INDEX命令中新增CONCURRENTLY選項來實現索引的在線創建。? ? ?但是concurrently在線創建索引也并不是那么完美,當使用這個選項時,PostgreSQL必須執行該表的兩次掃描,此外它必須等待所有現有可能會修改或者使用該索引的事務終止,甚至它可能會等待一個不相干的事務終止。因此這種方法比起普通的索引創建過程來說要做更多工作并且需要更多時間。同時,索引的創建會帶來較大的CPU和I/O消耗。甚至在極端情況下,如果數據庫存在長事務,我們發現create index命令根本無法結束。? ? ?從官方文檔中我們可以了解到如下信息,在并發(concurrently)索引構建中,索引實際上是在事務中被構建的,它在兩個事務中發生兩次表掃描。在每一次表掃描之前,索引構建必須等待對該表做過修改的現有事務終止。在第二次掃描之后,索引構建必須等待任何持有早于第二次掃描的快照的事務終止。然后該索引最終能被標記為可用,CREATE INDEX命令完成。

公司主營業務:成都網站建設、做網站、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯建站是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯建站推出奉新免費做網站回饋大家。

開啟第一個事務,拿到當前快照snapshot

2.等待所有修改過該表的事務結束

3.掃描該表,第一次創建索引

4.結束第一個事務

5.開啟第二個事務,拿到當前快照snapshot2

6.等待所有修改過該表的事務結束

7.第二次掃描該表,將兩次快照之間變更的記錄,合并到索引

8.上一步更新索引結束后,等待snapshot2之前開啟的所有事務結束

9.結束索引創建,索引變為可用? ? ?那么這里有個疑問,為什么需要兩次掃描、兩次創建索引?其實想想也很好解釋。因為在第一次創建索引的時候不阻塞讀寫,這段時間內發生的變更需要在第二次掃描的時候合并更新進索引。

postgresql怎么解鎖表

--查詢是否鎖表了

1、select oid from pg_class where relname='可能被鎖掉的表的表名'

,會顯示一個oid

2、select pid from pg_locks where relation='剛剛查出來的oid'

--如果查詢到了結果(pid),表示該表被鎖 則需要釋放鎖定

select pg_cancel_backend(上面查到的pid)

為什么使用postgresql skip locked加鎖失敗

是因為同時更新事物失誤。

通常在數據庫中最小粒度的鎖是行鎖,當一個事務正在更新某條記錄時,另一個事務如果要更新同一條記錄(或者申請這一條記錄的鎖),則必須等待鎖釋放。

通常持鎖的時間需要保持到事務結束,也就是說,如果一個長事務持有了某條記錄的鎖,其他會話要持有這條記錄的鎖,可能要等很久。

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

問題源自一個帥哥在建索引發生表鎖的問題。先介紹一下Postgresql的建索引語法: Version:9.1 CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ] ( { column | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) [ WITH ( storage_parameter = value [, ... ] ) ] [ TABLESPACE tablespace ] [ WHERE predicate ] 這里不解釋語法的諸多參數使用(排序,使用方法,填充因子等),主要說一下concurrently的使用場景。 正常情況下Postgresql建立普通btree索引時會阻塞DML(insert,update,delete)操作,直到索引完成,期間讀操作不受阻塞。當只有一個用戶操作這當然沒問題,但是在生產環境,并發比較高的情況下,特別是大表建索引就不能這么操作了,不然用戶要跳起來罵娘了,點個按鈕一天還沒反應過來。--使用 Postgresql提供了一個參數,可以在線建立索引的時候避免因寫數據而鎖表,這個參數叫concurrently。使用很簡單,就是用create index concurrently來代替create index即可。--副作用 當然了,使用這個參數是有副作用的,不使用這個參數建索引時DB只掃描一次表,使用這個參數時,會引發DB掃兩次表,同時等待所有潛在會讀到該索引的事務結束,這么一來,系統的CPU和IO,內存等會受一點影響,所以綜合考慮,仍然讓用戶自行選擇,而不是默認。--失敗 在使用concurrently參數建索引時,有可能會遇到失敗的情況,比如建唯一索引索引發現數據有重復,又或者用戶發現建索引時建錯字段的,取消建索引操作了。此時該表上會存在一個索引,這是因為帶這個參數的建索引命令一經發出,就首先會在系統的日志表里先插一個索引記錄進去,又因為這個索引最終建失敗了,所以會被標記一個INVALID的狀態,如下: postgres=# \d t_kenyon Table public.t_kenyon Column | Type | Modifiers --------+---------+----------- col | integer |Indexes:idx btree (col) INVALID--重建 遇到上述失效的索引重建時兩個辦法,一個是drop index index_name,然后再執行create index concurrently。還有一個是執行reindex index_name命令,但是后者不支持concurrent參數。--總結

文章題目:postgresql鎖住的簡單介紹
標題網址:http://www.2m8n56k.cn/article10/dscdcgo.html

成都網站建設公司_創新互聯,為您提供營銷型網站建設手機網站建設微信小程序ChatGPT標簽優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計
主站蜘蛛池模板: 久久久久9999 | 在线一区二区三区 | 日韩三级一区二区 | 欧美国产日韩久久久 | 一级网站在线观看 | 国产91久久精品一区二区 | 韩国a级毛片 | 久久r这里只有精品 | 亚洲免费视频在线 | 美女网站免费观看视频 | 日韩一级视频 | a毛片免费全部播放毛 | 成人禁在线观看网站 | 毛片在线免费播放 | 日本三级精品 | 成人18免费观看的软件 | 国产精品久久久久亚洲 | 美女被免费网站在线视频软件 | 鲁大师成人精品视频 | 成人午夜在线观看 | 91精品国产综合久久欧美 | 久久久久久全国免费观看 | 成年人黄页 | 亚洲国产日韩综合久久精品 | 生活片一级播放免费 | 欧美一级欧美一级高清 | 男人和女人的做刺激性视频 | 手机看片久久国产免费不卡 | 最新亚洲精品国自产在线 | 欧美日韩一区二区三区在线播放 | fc2久久| 美国一级毛片不卡无毒 | 99re热这里只有精品视频 | 欧美特黄视频在线观看 | 亚洲欧美另类视频 | 欧美毛片日韩一级在线 | 欧美视频一区二区在线观看 | 香蕉521av网站永久地址 | 日本精品视频在线播放 | 国产视频高清在线观看 | 欧美成人综合在线观看视频 |