想要查看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表文件的真实大小。