0

虽然 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 TABLEtbl engine=tokudb,但这需要很长时间,因为它完全重建了表。

有谁知道如何恢复未使用的空间?

(在 percona mysql 服务器上运行 tokudb 5.6.27-76.0)

4

1 回答 1

1

optimize table命令应该有助于清除已删除的行,从而释放空间,但这也可能需要很多时间。您可以尝试调整tokudb_cleaner_period 和 tokudb_cleaner_iterations 设置以启用更频繁的数据清理。

于 2016-02-23T11:51:20.133 回答