断片化の原因
コンテンツの行が削除されるたびに、スペースが空白になり、一定期間内に大量の削除操作が行われると、断片化が発生します。この空のスペースを、リストの内容を保存するために使用されるスペースよりも大きくします。挿入操作を実行するときに、MySQL は空のスペースを使用しようとしますが、特定の空のスペースが適切なサイズのデータで占有されていない場合は、それでも完全に占有することはできないため、MySQL がデータをスキャンするときに、スキャンするオブジェクトは実際にはリストの容量要件の上限、つまりデータが書き込まれる領域のピーク位置になります。この記事では、MySQL でのテーブルスペースの断片化を解決する詳細な例に関する関連情報を主に説明します。この記事が、必要としている皆様の参考になれば幸いです。
推奨される関連する mysql ビデオ チュートリアル: "
mysql チュートリアル"
例:
テーブルには 10,000 行があり、各行は 10 バイトであり、削除操作を実行すると、100,000 バイトの記憶領域のみが残ります。 1 行の場合、実際の内容はわずか 10 バイトですが、MySQL はそれを読み取る際に 100,000 バイトのテーブルとして処理するため、フラグメントが増えるほどクエリのパフォーマンスに影響します。
テーブルのフラグメントサイズを確認する
(1) 特定のテーブルのフラグメントサイズを確認する
mysql> SHOW TABLE STATUS LIKE '表名';
ログイン後にコピー
結果の「Data_free」カラムの値がフラグメントサイズです
(2) 一覧フラグメント化されているすべてのテーブル
mysql> select table_schema db, table_name, data_free, engine
from information_schema.tables
where table_schema not in ('information_schema', 'mysql') and data_free > 0;
ログイン後にコピー
テーブルのフラグメントをクリアする
(1) MyISAM テーブル
mysql> optimize table 表名
ログイン後にコピー
(2) InnoDB テーブル
mysql> alter table 表名 engine=InnoDB
ログイン後にコピー
エンジンが異なると、インデックスとデータが分離されているため、OPTIMIZE 操作も異なります。データファイルを整理し、インデックスを再配置する
OPTIMIZE 操作はテーブルを一時的にロックするため、データ量が増えると時間がかかるため、単純なクエリ操作ではありません。設定に関係なく最適化コマンドをプログラムに組み込む どんなにヒット率が低くても、アクセス数が増えれば全体のヒット率も上がり、実行効率に大きな影響を与えることは間違いありません。より良い方法は、シェルで mysql の
information_schema.TABLES フィールドを定期的にチェックし、DATA_FREE フィールドをチェックすることです。それが 0 より大きい場合は、断片化があることを意味します
クリアの操作です。フラグメントはテーブルを一時的にロックします。データの量が増えると、実行に時間がかかります。たとえば、毎週水曜日の早朝に DATA_FREE フィールドをチェックします。思った警告値より大きい場合は、一度清掃してください。
関連する推奨事項:
mysql-MySQL テーブルスペースのクリア問題 (バージョン 5.6)
Mysql クエリキャッシュの断片化、キャッシュヒット率、Nagios の監視
mysql テーブルの断片化の原因の分析とクリーニングup _PHP チュートリアル
以上がMySQL でのテーブルスペースの断片化をクリアする詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。