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 TABLE
tblを実行するengine=tokudb
ことですが、テーブルを完全に再構築するため、多くの時間がかかります。
未使用のスペースを回復する方法を知っている人はいますか?
(percona mysql サーバーで tokudb 5.6.27-76.0 を実行)