尽管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 TABLEtblengine=tokudb,但这需要很多时间,因为它会完全重新构建表。
有人知道如何恢复未使用的空间吗?
(在percona mysql服务器上运行tokudb 5.6.27-76.0 )
发布于 2016-02-23 19:51:20
optimize table命令应该有助于清除已删除的行,从而释放空间,但这也可能需要很长时间。您可以尝试调整tokudb_cleaner_period and tokudb_cleaner_iterations settings以启用更频繁的数据清理。
https://stackoverflow.com/questions/35576301
复制相似问题