訂閱
糾錯(cuò)
加入自媒體

PG如何通過(guò)元命令獲取表文件大?

2021-03-05 10:06
yzsDBA
關(guān)注

有三種方式,下面依次介紹。

1、通過(guò)元命令獲取表文件大小

通過(guò)dt+可以得到該表大小。該元命令會(huì)轉(zhuǎn)換成SQL語(yǔ)句去執(zhí)行,實(shí)際上是通過(guò)pg_table_size函數(shù)進(jìn)行獲取。該函數(shù)調(diào)用calulate_table_size(rel)其中rel為表的描述結(jié)構(gòu)Relation。通過(guò)這個(gè)方式計(jì)算表大小包括fsm、vm文件大小,如果有toast索引,還包括toast表大小。那么具體獲取文件大小的方式是什么呢?看calculate_relation_size函數(shù):最終通過(guò)stat函數(shù)來(lái)獲取,這個(gè)得到的是文件大小,而不是占用磁盤大小。同樣,對(duì)于toast索引也是通過(guò)這種方式計(jì)算得到。

2、內(nèi)部計(jì)算表有多少頁(yè)

通過(guò)RelationGetNumberOfBlocks只計(jì)算表主文件的多少頁(yè),調(diào)用函數(shù)RelationGetNumberOfBlocksInFork進(jìn)行計(jì)算。該函數(shù)對(duì)于序列、索引或者分區(qū)索引,直接通過(guò)smgrnblocks->mdnblocks獲得,對(duì)于表、toast和物化視圖,調(diào)用函數(shù)table_relation_size計(jì)算出文件大小然后除以一頁(yè)大小得到多少頁(yè)。table_relation_size調(diào)用heapam_relation_size->smgrnblocks,和上一個(gè)方法不同之處在于是否需要包括fsm、vm在內(nèi)。

3、內(nèi)部估算表大小

通過(guò)estimate_rel_size->table_relation_estimate_size->heapam_estimate_rel_size估算表有多少頁(yè)、多少記錄:

curpages = RelationGetNumberOfBlocks(rel);//真實(shí)多少頁(yè)//pg_class中統(tǒng)計(jì)的多少頁(yè)和多少記錄relpages = (BlockNumber) rel->rd_rel->relpages;reltuples = (double) rel->rd_rel->reltuples;//真實(shí)頁(yè)數(shù)少于10,真實(shí)記錄少于0,且無(wú)子表,那么估算頁(yè)數(shù)為10if (curpages < 10 && reltuples < 0 && !rel->rd_rel->relhassubclass)   curpages= 10;if (curpages == 0){//當(dāng)前0頁(yè),那么0個(gè)記錄   *tuples= 0;}if (reltuples >= 0 && relpages> 0)   density= reltuples / (double) relpages;//統(tǒng)計(jì)平均每頁(yè)多少記錄else{   tuple_width = get_rel_data_width(rel,attr_widths);   tuple_width += overhead_bytes_per_tuple;   density = usable_bytes_per_page /tuple_width;}*tuples = rint(density * (double) curpages);

聲明: 本文由入駐維科號(hào)的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號(hào)
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號(hào)