想要檢視tokudb某個表占了多少磁盤空間,目前還沒有太好的方法。
如果你使用’show table status’指令,得到的結果隻會讓你更迷茫:
我們來看看test_toku表磁盤檔案大小:
data_length和index_length都對不上,而且差的還不是一點,真頭疼,總不能每次都要去伺服器上du吧?其實,我們可以通過<code>information_schema.tokudb_fractal_tree_info</code>得到:
<code>bt_size_allocated</code>字段是tokudb内部維護目前資料檔案最後配置設定的offset,跟資料檔案磁盤大小基本一緻。
再回到剛才的問題:<code>show table status</code>裡data_length和index_length為什麼跟實際大小出入這麼大呢?
在<code>ha_tokudb::info()</code>裡:
bt_dsize的值來自toku_ft_stat64:
<code>in_memory_stats.numbytes</code>是tokudb在記憶體中維護的一個變量,用于記錄變更資料的增量大小,每次checkpoint的時候持久化到資料檔案(包括索引檔案)的header裡,是以是個出入比較大的參考變量(無壓縮),已不能通過此變量來反應表檔案的真實大小。
這麼不爽的地方,我們(rds mysql)已準備好patch把它修掉,讓<code>show table status</code>可以拿到tokudb表檔案的真實大小。