天天看點

資料庫核心月報 - 2015 / 06-MySQL · TokuDB · TokuDB資料檔案大小計算

想要檢視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表檔案的真實大小。