本篇內容介紹了“PG INDEX 創建并行的原理是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
創新互聯公司基于成都重慶香港及美國等地區分布式IDC機房數據中心構建的電信大帶寬,聯通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業服務器托管報價,主機托管價格性價比高,為金融證券行業中國電信云錦天府,ai人工智能服務器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業成都idc公司。
It's a long long story, 從 PG 8.3 引入了Heap-Only-Tuple, 主要的作用在用于減少更新所需的I/O數量,基于postgreql 的原理行的更新等于插入新的tuple,基于多版本控制MVCC, Postgres中的更新包括查找要更新的行,并將該行的新版本插入數據庫,引入的問題就是顯而易見的,索引,這就需要更多的I/O,數據要重新插入到表上的每個索引中。在插入的過程中需要先讀取每個相關的索引,新版本行的物理位置與舊版本的物理位置不同。那一個表中有的索引越多,更改的數據量越大,牽扯的索引的消耗就越大。
從上圖可以看,如果沒有HOT ,則索引頁面在更新后,需要另一個指針指向修改后的INDEX 數據, 如果有了HOT 則不需要通過另外的指針 C 去指向修改后的索引,僅僅通過原有的指針,在原有的索引tuple1 上通過 t_cid來指向新的index的數據即可。在數據結構中的樣子參看下圖
HOT的效率雖然高,但需要達到某些需求,才可以實現,從上圖看
1 數據必須(tuple)必須在一個頁面
2 更新的數據中不能包含 INDEX 本身的數據
下面我們開始做相關的實驗,看看HOT 在實踐中是怎樣的
create table test (id int, name varchar(200), age float, datetime timestamp);
insert into test select generate_series(1,10), random()*100, random()*1, now();
create index idx_test_name on test (name);
create index idx_test_age on test (age);
create index idx_test_datetime on test (datetime);
通過 pageinspect 來對當前的index 頁面進行一個細節觀測
1 測試1 將name 中的 ID =1 的值進行update 但更改的值和原來一樣
2 測試2 將datetime 中的 ID =1 的值進行update 到新的值,可以注意到,只要更新到有索引的字段,無論是那個,都會觸發所有的INDEX 的更新,圖中僅僅是更新了 id = 1 的 datetime值,但其他的索引也都進行了更新,10行變成 11行
我們對表test 繼續 vacuum
可以從下圖看到垃圾的版本的index tuple 已經被回收了 (部分截圖由于屏幕原因,并未截圖完全)
為什么更改同樣的值的時候,索引不會被更新因為 PG11 時引入了 recheck_on_update 作為創建索引的默認值,這樣索引會檢測UPDATE 時的值是否與現有的值不同,相同就不會觸發更新索引tuple的操作。
講到這里其實還沒有到 INDEX CONCURRENTLY ,上面僅僅是粗略的介紹了HOT.
實際上索引并行建立,需要三個phase
1 開始在系統的catalog聲明我們要開始建立新的索引,此時索引對于老的事務來說是不可見的,對于新的事務是可見的。
2 開始創建索引,通過對表的 MVCC 快照,對表中產生快照的 MVCC 中的可見行,開始建立建立索引。
3 當第二步創建索引成功后,其實在此刻與上次MVCC的之間間隔,有插入UPDATE, DELETE的操作,這些是當前新索引與當前行的數據不一致的地方,此時會開始第二次MVCC ,在次MVCC做了快照,并修復新的索引后,后續就是開始維護索引,此時索引已經可以正常的工作了。
但整體的并行的索引的創建工作并未結束,因為新的索引對于老的事務是不可見的,所以不能推出工作,所以必須等待比這個索引老的事務都結束了才能進行整體的索引可見和正常工作。
所以大事務和長時間運行的事務,都是并行索引創建并盡快完成的阻礙,另外需要兩次 MVCC 所以一般來說 并行索引的創建的時間也就比一般非并行創建享有獨占鎖方式創建索引的時間要長。
“PG INDEX 創建并行的原理是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!
新聞標題:PGINDEX創建并行的原理是什么
本文鏈接:http://m.newbst.com/article0/iigsoo.html
成都網站建設公司_創新互聯,為您提供定制網站、響應式網站、標簽優化、網站設計、自適應網站、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯