MySQL テーブルスペースとは何ですか?

MySQL テーブルスペースとは何ですか?

今日皆さんにお伝えしたいトピックは、「皆さんがよく話題にするテーブル スペースとは一体何でしょうか。データ テーブルとは一体何でしょうか。」です。

これは実際には概念的な知識ポイントであり、知識を拡張するものと見なす必要があります。必要なのは、関連する概念を理解し、関連するパラメータの印象を残すことだけです。

1. テーブルとは何ですか?

MySQL を使用したことがある人なら誰でも、MySQL のデータがデータ テーブルに保存されることを直感的に知っています。

たとえば、Update SQL は次のようになります。

ユーザーを更新し、username = 'Daydream'、id = 999 に設定します。

ユーザーデータテーブル内のID 1のレコードのユーザー名列を「Daydream」に変更します。

ここでのユーザーは実際にはデータ テーブルです。もちろん、これは重要な点ではありません。私が言いたいのは、データ テーブルは実際には論理的な概念であるということです。以下で説明するテーブル スペースは物理的な概念です。

2. テーブルスペースとは何ですか?

「InnoDB ストレージ エンジンでは、データはテーブルスペースに従って整理され、保存されます。」という文章を見たことがあるでしょうか。実際、そこには次の意味があります。テーブルスペースは、実際の物理ファイルであるテーブルスペース ファイルです。

MySQL はこのように設計および設定されているため、なぜテーブルスペースと呼ばれるのか、またなぜテーブルスペースがディスク上の物理ファイルに対応するのかについて心配する必要はありません。概念をそのまま受け入れてください。

MySQL には多くの種類のテーブルスペースがあります。一緒に見ていきましょう。

3. sysテーブルスペース

MySQL システム テーブルスペースは次のように表示できます。

値の部分は、名前:サイズ:属性で構成されます。

デフォルトでは、MySQL は ibdata1 という名前のファイルを 12MB のサイズで初期化し、データの増加に応じて自動的に拡張します。

この ibdata1 ファイルは、システム テーブルスペース、デフォルト テーブルスペース、デフォルト テーブルスペースの物理ファイル、および一般的な共有テーブルスペースです。

この共有表領域に関して、直感的には、この表領域に複数のテーブルのデータを格納できる場合は共有表領域と呼ぶことができるため、システム表領域を共有表領域と考えることができます。

4. sysテーブルスペースを構成する

システムテーブルスペースの数とサイズは、起動パラメータ innodb_data_file_path で設定できます。

# 私の.cnf
[mysqld]
innodb_data_file_path=/dir1/ibdata1:2000M;/dir2/ibdata2:2000M:自動拡張

5. テーブルごとのファイル テーブルスペース

各データベース テーブルに個別のテーブルスペース ファイルを持たせたい場合は、パラメータ innodb_file_per_table を使用して設定できます。

このパラメータは MySQL 5.6 以降でのみ使用できます。

設定ファイルを通じて

[mysqld]
innodb_file_per_table=オン

次のコマンドを使用することもできます

mysql> SET GLOBAL innodb_file_per_table=ON; 

これを ON に設定すると、InnoDB ストレージ エンジンによって生成されたテーブルには、独自の独立したテーブルスペース ファイルが含まれるようになります。

独立テーブルスペースファイルの命名規則: テーブル名.ibd

知らせ:

独立した表領域ファイルには、表に対応するデータ、インデックス、および挿入バッファ ビットマップのみが格納されます。

UNDO 情報、挿入バッファ インデックス ページ、二重書き込みバッファなどの残りの情報は、引き続きデフォルトの表領域、つまり共有表領域に配置されます。

元に戻す、挿入バッファ、二重書き込みバッファが何であるか理解していなくても問題ありません。大まかなスケジュールに沿って、第41回と第42回の記事でシェアさせていただきます。ここで理解しておく必要があるのは、innodb_file_per_table=ON に設定しても共有テーブルスペースのサイズは拡大し続け、undo を使用してロールバックを続行しても共有テーブルスペースのサイズは縮小されないということです。

私のテーブルスペースファイルを確認してください:

最後に、テーブルごとにこのファイルの利点と欠点を簡単に説明しましょう。

アドバンテージ:

  • フォールト トレランスを向上します。テーブル A のテーブル領域が破損しても、他のテーブル領域は影響を受けません。 s
  • MySQL Enterprise Backup を使用すると、他の InnoDB テーブルの使用を妨げることなく、ファイルごとのテーブルスペースで作成されたテーブルを迅速にバックアップまたは復元できます。

欠点:

これは fsync システム コールに適していません。テーブルスペース ファイルを使用する場合、1 回のシステム コールでデータのフラッシュを完了できますが、テーブルスペース ファイルを複数に分割する場合は、元の fsync は、関係するすべての表領域ファイルに対して実行される fsync になり、fsync の数が増加する可能性があります。

6. 一時テーブルスペース

一時表領域は、ユーザーによって作成された一時表とディスク上の内部一時表を格納するために使用されます。

パラメータ innodb_temp_data_file_path は、以下に示すように、一時表領域の名前、サイズ、および仕様属性の一部を定義します。

一時テーブルスペースファイルが保存されているディレクトリを表示します

7. UNDO表領域

undolog について聞いたことがあると思います。プログラムがトランザクションをロールバックする場合、基盤となる MySQL は実際にこれらの undo 情報を通じてロールバックを支援します。

MySQL 設定には、undolog ログ ファイルを保存するために特別に使用できるテーブル スペースがあります。

ただし、MySQL 設定では、undolog はデフォルトでシステム テーブルスペースに配置されます。

MySQL が新しくインストールされた場合は、次のコマンドを実行して MySQL UNDO テーブルスペースの使用状況を表示できます。

ご覧のとおり、MySQL には 2 つの UNDO ログ テーブルスペースがあります。

つまり、UNDO はデフォルトのシステム表領域から UNDO ログ専用表領域に転送されます。

では、デフォルト構成を使用して、UNDO ログをシステム テーブルスペースに配置する必要がありますか?それとも、UNDO 表領域に配置する必要がありますか?

これは実際には、サーバーが使用するストレージ ボリュームの種類によって異なります。

SSD ストレージを使用する場合は、UNDO 情報を UNDO 表領域に保存することをお勧めします。

上記はMySQLテーブルスペースとは何かについての詳細な内容です。MySQLテーブルスペースの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL でテーブルスペースの断片化を解消する詳細な例
  • MySQLテーブルの断片化の原因とクリーンアップを分析する
  • MySQL ダーティ ページ フラッシュとテーブル スペースの縮小の原理の分析
  • MySQL InnoDB テーブルスペース暗号化の例の詳細な説明
  • MySQL オンラインリカバリ UNDO テーブルスペース 実戦記録
  • MySQL 5.7 一時テーブルスペースの詳細な分析
  • MySQL InnoDB テーブルスペースのアンロード、移行、ロードの使用方法
  • MySQL で、すべてのデータベースが占有するディスク容量と、単一データベース内のすべてのテーブルのサイズを照会する SQL ステートメント
  • MySQL テーブルスペースの断片化の概念と関連する問題の解決策

<<:  HTMLフォーム入力監視の詳細な理解

>>:  JS で async await をエレガントに使用する方法

推薦する

Django+vue 登録とログインのサンプルコード

登録するフロントエンドは、vue の axios を使用して値を渡し、取得したアカウントとパスワード...

HTMLの最適化によりWebページの速度が向上

明らかな HTML、隠された「公開スクリプト」 Web ページのダウンロード時間を短縮する鍵は、フ...

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...

Linux で so または実行可能プログラムの依存ライブラリを表示します

Linux で実行可能プログラムまたは so の依存ライブラリを表示します。 Linux の実行可能...

Docker5フル機能の港湾倉庫構築プロセス

Harbor は、Docker イメージを保存および配布するためのエンタープライズ レベルのレジスト...

複数のdiv内のテーブルのtdwidth設定は同じで、揃えることができません

最近、複数のdivにあるテーブルのTDを同じ幅に調整しても、揃えることができず、幅にパターンがないこ...

Linux の crontab タスク スケジューリングの簡単な分析

1. スケジュールタスクを作成する命令crontab -eは現在のユーザーの編集インターフェースに入...

MySQL パーティション フィールド列に別のインデックスを作成する必要がありますか?

序文パーティション フィールドは主キーの一部でなければならないことは誰もが知っています。では、複合主...

アコーディオン効果を実現するJavaScript

この記事では、アコーディオン効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

挿入前にレコードが既に存在するかどうかを確認するには、SQL ステートメントを使用します。

目次SQL文を挿入する前にレコードが既に存在するかどうかを確認するSQL挿入時の判断の簡単なコレクシ...

js で継承を実装する 5 つの方法

コンストラクタの借用この手法の基本的な考え方は単純です。サブタイプ コンストラクター内からスーパータ...

MySQL から Excel にテーブルデータをエクスポートする際の日時形式に関する簡単な説明

最近、MySQL を使用してテーブル データを Excel ファイルにエクスポートしました。MySQ...

JavaScript は大容量ファイルのアップロード処理を実装します

数十 MB 程度の小さいものから 1G 以上の大きいものまで、ビデオ ファイルなどのファイルのアップ...

mysql 5.7.11 winx64 初期パスワード変更

公式サイトからMySQL-5.7.11-winx64の圧縮版をダウンロード。インストール後、パスワー...

Jenkins を通じて None のイメージを定期的にクリーンアップする方法

序文継続的なコード配信のプロセスで、Jenkins を利用して Docker イメージを作成すると、...