PG獲取檔案大小的幾種方式
PG 獲取檔案大小的方式
1 、透過元命令獲取表檔案大小
透過\dt+可以得到該表大小。該元命令會轉換成SQL語句去執行,實際上是透過pg_table_size函式進行獲取。該函式呼叫calulate_table_size(rel)其中rel為表的描述結構Relation。透過這個方式計算表大小包括fsm、vm檔案大小,如果有toast索引,還包括toast表大小。那麼具體獲取檔案大小的方式是什麼呢?看calculate_relation_size函式:最終透過stat函式來獲取,這個得到的是檔案大小,而不是佔用磁碟大小。同樣,對於toast索引也是透過這種方式計算得到。
2 、內部計算表有多少頁
透過RelationGetNumberOfBlocks只計算表主檔案的多少頁,呼叫函式RelationGetNumberOfBlocksInFork進行計算。該函式對於序列、索引或者分割槽索引,直接透過smgrnblocks->mdnblocks獲得,對於表、toast和物化檢視,呼叫函式table_relation_size計算出檔案大小然後除以一頁大小得到多少頁。table_relation_size呼叫heapam_relation_size->smgrnblocks,和上一個方法不同之處在於是否需要包括fsm、vm在內。
3 、內部估算表大小
透過estimate_rel_size->table_relation_estimate_size->heapam_estimate_rel_size估算表有多少頁、多少記錄:
curpages = RelationGetNumberOfBlocks(rel);//真實多少頁 //pg_class中統計的多少頁和多少記錄 relpages = (BlockNumber) rel->rd_rel->relpages; reltuples = (double) rel->rd_rel->reltuples; //真實頁數少於10,真實記錄少於0,且無子表,那麼估算頁數為10 if (curpages < 10 && reltuples < 0 && !rel->rd_rel->relhassubclass) curpages = 10; if (curpages == 0){//當前0頁,那麼0個記錄 *tuples = 0; } if (reltuples >= 0 && relpages > 0) density = reltuples / (double) relpages;//統計平均每頁多少記錄 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);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31493717/viewspace-2742200/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php讀取檔案的幾種方式PHP
- 反射-獲取class檔案物件的三種方式反射物件
- javascript獲取url地址的幾種方式JavaScript
- 獲取上傳檔案的大小
- Spring Boot讀取配置檔案的幾種方式Spring Boot
- 【JavaEE】讀取配置檔案路徑的幾種方式Java
- 在專案中獲取Spring的Bean的幾種方式SpringBean
- iOS獲取檔案大小遇到的坑iOS
- 【方法整理】Oracle 獲取trace跟蹤檔名的幾種常用方式Oracle
- 檔案上傳的幾種方式
- java 獲取資料夾大小、檔案大小、檔案個數Java
- Spring - 獲取ApplicationContext的幾種方式SpringAPPContext
- 獲取或操作DOM元素特性的幾種方式
- JavaScript~檔案下載的幾種方式JavaScript
- Java檔案下載的幾種方式Java
- PHP 獲取檔案 副檔名 的常用方法小結【五種方式】PHP
- js獲取頁面dom元素的幾種常用方式JS
- 在SpringMVC中獲取request物件的幾種方式SpringMVC物件
- Linux檢視檔案大小的幾種方法Linux
- spring-boot-route(二)讀取配置檔案的幾種方式Springboot
- Java檔案下載 幾種方式Java
- 獲取WebLogic版本號有以下幾種方式Web
- 獲取Java執行緒返回值的幾種方式Java執行緒
- Spring在程式碼中獲取bean的幾種方式SpringBean
- AngularJS中獲取資料來源的幾種方式AngularJS
- 獲取cookie的3種方式Cookie
- 網頁引入使用js檔案的幾種方式網頁JS
- js獲取數字陣列最大值的幾種方式JS陣列
- Powershell 如何批次獲取檔案大小的實現程式碼
- 就這樣獲取檔案的MD5和大小
- python讀取大檔案的幾種方法Python
- pg從磁碟讀取檔案
- 幾種windows到linux上傳檔案的方式WindowsLinux
- 獲取Linux系統中目錄檔案大小的方法Linux
- git 忽略檔案的幾種方式以及應用場景Git
- Spring boot 讀取properties檔案的四種方式Spring Boot
- JavaScript input type=file 獲取檔案大小及型別限制JavaScript型別
- 獲取沙盒檔案路徑的兩種方法