Informix
如何獲取informix數據庫中的所有表及其以GB為單位的大小?
我可以粗略估計表格大小
SELECT tabname, (rowsize*nrows)/1024/1024/1024 AS tabsize FROM informix.systables ORDER BY tabsize DESC
有沒有辦法更準確地測量桌子的大小?
這個問題有很多細微差別。您是否想要目前分配給使用的頁面總數的大小(因此這將包括可供該表使用的頁面……所以保留僅供該表使用的頁面,但目前沒有任何數據),或者您只想要目前使用的頁面的大小?是否要包括將在表上定義的任何索引的大小?
因此,可以使用一個查詢來獲取目前數據庫中連接到的任何非系統目錄表的大小,即為該表保留的所有空間的大小,不包括分離索引:
select a.tabname, (b.nptotal * b.pagesize / 1024 / 1024 / 1024) as tabsize from sysmaster:systabnames a, sysmaster:sysptnhdr b, systables c where c.tabname = a.tabname and a.partnum = b.partnum and c.tabid > 99;
我的小型測試系統的範例輸出(請注意,t3 是一個分段表,其中 1 個分段沒有數據,因此如果您想在表級別而不是分段級別報告,則可以使用 sum 和 group by 如果您的架構包含分段表)
tabname t1 tabsize 1.5258789063e-05 tabname t2 tabsize 1.5258789063e-05 tabname t3 tabsize 0.00000000000000 tabname t3 tabsize 1.5258789063e-05
如果將查詢更改為以下內容,則會將結果更改為僅計算表目前使用的頁數,而不是保留供使用的所有空間:
select a.tabname, (b.npused * b.pagesize / 1024 / 1024 / 1024) as tabsize from sysmaster:systabnames a, sysmaster:sysptnhdr b, systables c where c.tabname = a.tabname and a.partnum = b.partnum and c.tabid > 99;
如果您希望將分離索引的大小包含在表大小中,那麼您還必須將 sysfragments 包含到查詢中(可能是上述 2 個查詢的 1 種形式以及隨後獲得索引的東西的聯合分區資訊,然後也將 sysfragments 包括到連接中)