mysqlのメモリテーブルでオーバーヘッド(data_free)をどのようにクリアしますか?

StackOverflow https://stackoverflow.com/questions/4575035

  •  14-10-2019
  •  | 
  •  

質問

ライブチャット用の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がオフになった場合、テーブル内のすべてのデータが失われることです。複製を使用している場合、テーブルの切り捨ての意味もあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top