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