這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何用PG的pageinspect工具進(jìn)行查看分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計(jì),武威網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:武威等地區(qū)。武威做網(wǎng)站價(jià)格咨詢:18980820575
如果使用MySQL 相對(duì)頁(yè)面的層次進(jìn)行一些了解,估計(jì)你就的找大佬們的工具集合,并且為此膜拜大佬們,但PG并不需要這樣,PG自身自帶的pageinspect 工具,就可以讓你對(duì)頁(yè)面級(jí)別的層次來(lái)進(jìn)行一個(gè) “透心涼” 的查看和分析,并不在為此苦惱。
首先確認(rèn)您是否擁有了 pageinspect 這個(gè) extension ,下圖通過(guò)查看pg_extension這個(gè)表您可以確認(rèn),當(dāng)前您的PG上已經(jīng)安裝了這個(gè)extension.
如果沒(méi)有請(qǐng) create extension pageinspect;
執(zhí)行這條預(yù)計(jì)在您當(dāng)前的數(shù)據(jù)塊中,如果還不行,請(qǐng)您確認(rèn)您的PG 安裝與編譯是否正常。
select * from heap_page_items(get_raw_page('test',0)) order by lp_off desc;
通過(guò)上面的的圖,是可以推理出數(shù)據(jù)存儲(chǔ)是從頁(yè)尾開(kāi)始的,數(shù)據(jù)的插入順序與步進(jìn)之間的關(guān)系。
SELECT * from page_header(get_raw_page('test', 0));
lower = 72 , 通過(guò)這里可以獲知當(dāng)前PG的表TEST 中曾經(jīng)有過(guò)多少tumple(在這一刻),PG的每頁(yè)有28bytes 的頁(yè)頭,同時(shí)每個(gè)指針是4bytes ,(72 - 28)/4 = 11 ,證明當(dāng)前的指針有11個(gè)。
我們插入一條記錄
insert into test select generate_series(1,1), random()*100, random()*1, now();
從上圖可以看出,指針并未有變化,并通過(guò)查看數(shù)據(jù)和頁(yè)面的情況,看到新插入的記錄,使用了之前空出的 ctid (0,1) 位置,所以指針并不需要在重新分配。
我們繼續(xù)在插入兩條記錄,可以看出指針?lè)峙淞?個(gè)字節(jié),并且新的記錄也插入了未分配的空間,每行的偏移量是64bytes
我們刪除 ID > 5 的記錄
然后 vacuum test表
通過(guò)命令我們也可以看到 vacuum 后的空間回收了,并且頁(yè)頭也重新標(biāo)記了次頁(yè)面的容量,但指針是不在回收了。
通過(guò)上面幾個(gè)簡(jiǎn)單的命令就可以,理解一些枯燥乏味的PG 某些原理,也是不錯(cuò)的體驗(yàn)。
如果還不理解上面的意思可以看下面這個(gè)圖(由于信息量太大,所以只能截?cái)喑蓛蓚€(gè)圖)
這兩張圖拼在一起,呈現(xiàn)的就是一個(gè)完整的頁(yè)面上面28個(gè)字節(jié)頭,+ 每個(gè)指針 下面就是你存儲(chǔ)的每行數(shù)據(jù),所以在此證明了頁(yè)面存儲(chǔ)的方式和邏輯中間的0 都是未占用的空間。
我想到此也就沒(méi)有什么人不在不理解 PG的頁(yè)面了,試問(wèn)還有那個(gè)數(shù)據(jù)庫(kù)在不通過(guò)第三方的插件或軟件的情況下,能如此通透的展現(xiàn)一個(gè)頁(yè)面在你面前。
SELECT get_raw_page::text FROM get_raw_page('test', 0);
相關(guān)的頁(yè)面獲得的源代碼,將頁(yè)面的內(nèi)容memcpy到buffer 然后給大家展現(xiàn)出來(lái)。
那如果有人問(wèn),你的數(shù)據(jù)到底占用了多少個(gè)頁(yè)面,我看看看怎么來(lái)通過(guò)某種方式來(lái)回答他。
1 一個(gè)頁(yè)面我有多少數(shù)據(jù)
2 一共有多少行數(shù)據(jù)
2 /1 約等于 多少頁(yè)面
我們看看上面的算法是不是可以應(yīng)用到PG 中
從結(jié)果看,還是比較準(zhǔn)確的。
上述就是小編為大家分享的如何用PG的pageinspect工具進(jìn)行查看分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。