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を導入する方法

推薦する

Webフロントエンドツール、Sublime Text 2の紹介

Sublime Text 2 は、軽量でシンプル、効率的なクロスプラットフォーム エディターです。ブ...

レスポンシブデザインについての簡単な説明

1. レスポンシブ デザインとは何ですか?レスポンシブデザインとは、ウェブサイトの開発プロセス中に、...

ウェブフォームデザインのための5つの実用的なヒント

1. フォームテキスト入力のモバイル選択: テキスト入力フィールドにプロンプ​​トが追加されている場...

Windows で MySQL のルート パスワードを忘れた場合にリセットする方法

私のマシン環境: Windows 2008 R2 MySQL 5.6 Baidu で「Windows...

MySQL 8.0.23 のインストールと設定方法のグラフィックチュートリアル (Win10 の場合)

この記事では、MySQL 8.0.23のインストールと設定方法を参考までに紹介します。具体的な内容は...

同期スクロールを実現するための複数のテーブル要素のサンプルコード

Element UIは、複数のテーブルを同時に水平および垂直にスクロールすることを実装します。 コー...

Docker execは複数のコマンドを実行します

docker exec コマンドは、実行中のコンテナ内でコマンドを実行できます。 docker ex...

フロントエンドJavaScriptのクラス

目次1. クラス1.1 コンストラクタ() 1.2 ゲッターとセッター1.3 これ1.4 静的プロパ...

Docker ベースのよく使われる CentOS7 イメージの概要

目次1 Dockerをインストールする2 国内ミラーソースの設定3 中国語環境基本版Centos7イ...

Dockerコンテナを停止および削除できない問題の解決策

実行中のコンテナIDを見つける ドッカーps上記のコンテナの物理的な場所を見つける /var/lib...

フロントエンドとバックエンド分離プロジェクトのDockerデプロイメントの実装例

目次1. 環境整備2. イメージを実行する問題を解決するRedis のインストールNginx のイン...

Windows 8 での MySQL Community Server 5.6 のインストールと設定のチュートリアル

この記事では、Windows 8 での MySQL5.6 のインストールと設定のチュートリアルを記録...

Linux CentOS 6.5 ifconfig が IP を照会できない問題の解決方法

最近、何人かの友人から、仮想マシンに CentOS をインストールした後、ifconfig コマンド...

mysql-connector-java8.0.27 へのアップグレードに関する注意事項

最近、オンライン セキュリティ スキャンにより、MySQL コネクタに脆弱性が見つかりました。確認し...

Linux でのインストール中にソフトウェア パッケージの依存関係レポートに関連する問題の解決策

目次背景1) yumのkeepchche機能を有効にする: 方法1 2) yum-utils ソフト...