虽然 TokuDB 提供了很好的压缩,但据我所知,它分配的空间比实际需要的多得多,从而浪费了很多空间。
我正在使用 information_schema 来获取大小,如下所示:
SELECT
table_name,
table_dictionary_name,
round(bt_size_allocated/1024/1024,2) as size_allocated,
round(bt_size_in_use/1024/1024,2) as size_in_use
FROM
information_schema.`TokuDB_fractal_tree_info`
这是结果
+----------------+---------------------------+-----------------+-------------+
| table | dictionary_name | size_allocated | size_in_use |
+----------------+---------------------------+-----------------+-------------+
| c_tokudb_table | key-XID_id | 875.43 | 411.59 |
| c_tokudb_table | key-operationId_timeStamp | 913.38 | 459.06 |
| c_tokudb_table | key-time_stamp | 737.36 | 338.67 |
| c_tokudb_table | main | 3217.93 | 1505.58 |
| c_tokudb_table | status | 0.04 | 0.00 |
+----------------+---------------------------+-----------------+-------------+
如您所见size_allocated
,基本上翻了一番。磁盘上的文件只是比 size_allocated 多一点,因此使用 information_schema 报告是很好的。
我尝试运行优化几次,但没有太大帮助,有时甚至会增加。似乎唯一可行的解决方案是运行ALTER TABLE
tbl engine=tokudb
,但这需要很长时间,因为它完全重建了表。
有谁知道如何恢复未使用的空间?
(在 percona mysql 服务器上运行 tokudb 5.6.27-76.0)