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のとおり、基本的に 2 倍になります。ディスク上のファイルは 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 に答える