【问题标题】:TokuDB size_allocated vs size_in_useTokuDB size_allocated vs size_in_use
【发布时间】:2016-02-23 11:26:09
【问题描述】:

虽然 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)

【问题讨论】:

    标签: mysql database-administration tokudb


    【解决方案1】:

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

    【讨论】:

    • 在一个包含大量数据且 size_allocated 仅比 size_in_use 多 10% 的新表上,运行 optimize table 实际上将 size_allocated 增加了 80%,而 size_in_use 仍然是相同的。没有执行任何删除操作,优化语句在大约 2 分钟内执行。
    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    相关资源
    最近更新 更多