mysqlのメモリテーブルでオーバーヘッド(data_free)をどのようにクリアしますか?
質問
ライブチャット用のMySQLにメモリテーブルがあります(これはこれに最適なテーブルタイプではないのでしょうか?)、毎晩行を削除して、テーブル内のオーバーヘッドを管理しやすいチャットログを維持します。ただし、メモリテーブルで最適化することはできないため、オーバーヘッドをどのように取り除くのですかData_free
の中に show table status
)?
解決
どのようにしてオーバーヘッドを取り除きますか?
メモリ/ヒープストレージエンジンを使用してテーブルを強制して、削除された行から失われた残留スペースを変更して、何も変更しません。例えば
ALTER TABLE my_table ENGINE=MEMORY;
テーブルを書き直します。からの引用でそれをバックアップします ドキュメンテーション:
削除された行で使用されるメモリを解放するには、Table Engine = MemoryをAlter Table Rebuildを強制するために使用します。
編集
たぶんこれはこれに最適なテーブルタイプではありませんか?
私の意見では、それはメモリテーブルの理想的な適用のようには聞こえません - 概して、私はそれをレガシーエンジンと考えています。いくつかの食べ物
まず、メモリテーブルはBツリーインデックス(ハッシュインデックスのみ)を使用できません/しないため、それ以外の場合は指数を使用して並べ替え(つまり<、>操作)を使用して、手動/徹底的にソート/フィルタリングに頼ります。
第二に、Innodb_buffer_poolが十分に大きく、同時スレッドでより良い動作をする場合、InnoDBテーブルはRAMに存在するため、ほとんどのアプリケーションのメモリテーブルよりも優れていても良いパフォーマンスを発揮します。
第三に、おそらく最も重要なことは、MySQLがオフになった場合、テーブル内のすべてのデータが失われることです。複製を使用している場合、テーブルの切り捨ての意味もあります。