MySQL でテーブルスペースの断片化を解消する詳細な例

MySQL でテーブルスペースの断片化を解消する詳細な例

MySQL でテーブルスペースの断片化を解消する詳細な例

断片化の原因

(1)テーブルのストレージは断片化されます。行が削除されるたびに、スペースが空になり、空のままになります。一定期間にわたって多数の削除操作が行われると、空のスペースがテーブルの内容を格納するために使用されるスペースよりも大きくなります。

(2)挿入操作を実行する場合、MySQLは空き領域を使用しようとします。ただし、空き領域が適切なサイズのデータ​​で占有されていない場合、空き領域を完全に占有することができず、断片化が発生します。

(3)MySQLがデータをスキャンする際、実際にはテーブルの容量要件の上限、つまりデータが書き込まれる領域のピーク部分をスキャンします。

例えば:

テーブルには 10,000 行あり、各行は 10 バイトで、100,000 バイトのストレージ スペースを占有します。削除操作を実行すると、1 行のみが残り、実際のコンテンツは 10 バイトのみになります。ただし、MySQL がそれを読み取ると、100,000 バイトのテーブルとして扱われます。したがって、フラグメントの数が多いほど、クエリのパフォーマンスに影響します。

テーブルフラグメントのサイズを確認する

(1)テーブルのフラグメントサイズを確認する

mysql> SHOW TABLE STATUS LIKE 'テーブル名';

結果の「Data_free」列の値はフラグメントサイズです。

(2)断片化されたテーブルを全てリストする

mysql> table_schema db、table_name、data_free、engine を選択   
information_schema.tables から 
table_schema が ('information_schema', 'mysql') に含まれず、data_free > 0 の場合;

テーブルの断片化を解消

(1)MyISAMテーブル

mysql> テーブルテーブル名を最適化する

(2)InnoDBテーブル

mysql> テーブル名を変更する エンジン = InnoDB

OPTIMIZE の動作はエンジンによって異なります。MyISAM はインデックスとデータが分離されているため、OPTIMIZE はデータ ファイルをソートし、インデックスを再配置することができます。

OPTIMIZE 操作はテーブルを一時的にロックし、データ量が多いほど時間がかかります。結局のところ、単純なクエリ操作ではありません。したがって、プログラムに Optimize コマンドを配置するのは適切ではありません。ヒット率をどれだけ低く設定しても、アクセス回数が増えると、全体のヒット率も増加し、プログラムの実行効率に大きな影響を与えることは間違いありません。より良い方法は、シェルを作成し、mysql のinformation_schema.TABLESフィールドを定期的にチェックし、DATA_FREE フィールドをチェックすることです。0 より大きい場合は、断片化があることを意味します。

提案

クリア操作により、テーブルが一時的にロックされます。データ量が多いほど、時間がかかります。スクリプトを作成し、アクセスが少ない時間帯に定期的に実行することができます。たとえば、毎週水曜日の夜明けに DATA_FREE フィールドを確認します。想定される警告値より大きい場合は、一度クリーンアップします。

ご質問がありましたら、メッセージを残すか、コミュニティに参加して話し合いましょう。お読みいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL テーブルスペースの断片化の概念と関連する問題の解決策
  • MySQLテーブルの断片化の原因とクリーンアップを分析する
  • MySQL テーブルの断片化を解消し、スペースを再利用する方法

<<:  クリックナンバーゲームを実装するネイティブJS

>>:  ReactプロジェクトにSCSSを導入する方法

推薦する

mysql 変数の使用例の分析 [システム変数、ユーザー変数]

この記事では、例を使用して MySQL 変数の使用方法を説明します。ご参考までに、詳細は以下の通りで...

myBatis で条件を削除する際のスプライシング問題を解決する

私は今日、mybatis を学び、データベースに対していくつかの簡単な追加、削除、変更、クエリを実行...

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...

Linux でアップロードされたファイルのスケジュールされたバックアップと増分バックアップを実装する方法

導入Alibaba Cloud のような OSS ストレージ サービスを使用している場合は、サービス...

MySQL 5.7.30 のインストールとアップグレードの問題に関する詳細なチュートリアル

くさびコンピュータにインストールされている MySQL のバージョンが比較的古く、おそらくバージョン...

CSS3で実装されたグラデーションスライド効果

成果を達成する コードhtml <div class="css-slideshow&...

yum インストールエラーの問題を解決する 保護されたマルチライブラリバージョン

現在、クラウドサーバーに nginx をインストールする際、最初に zlib などの依存ライブラリを...

Dockerを使用してRedisクラスターを構築する方法

目次1. Redis Dockerベースイメージを作成する2. Redisノードイメージを作成する3...

ウェブページ作成時に標準 HTML コードを使用する際のポイント

<br />多くのウェブサイト デザイナーが犯す最も一般的な間違いは、ウェブページが I...

mysql MDLメタデータロックの詳細な分析

序文: MySQL で SQL 文を実行すると、予想した時間内に文が完了しません。このような場合、通...

JavaScript を使用してテーブル情報を追加および削除する

JavaScript 入門JavaScript は軽量なインタープリタ型の Web 開発言語です。言...

JavaScript の実行コンテキストとコールスタックの詳細な説明

目次1. 実行コンテキストとは何か2. 実行コンテキスト スタックとは何ですか? 3. 実行コンテキ...

要素の高さを下から上へ、上から下へ制御する CSS メソッド

よくある質問から議論を始めましょう。CSS を使用して要素の高さを [ブラウザ コンテンツ ウィンド...

CentOS7 上で KVM 仮想化プラットフォームを構築する (3 つの方法)

KVM はカーネルベースの仮想マシンの略で、Linux をハイパーバイザーに変換する Linux ...

JavaScriptはクリックトグル機能を実装します

この記事の例では、クリックして切り替える機能を実装するためのJavaScriptの具体的なコードを参...