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 をエレガントに使用する方法

推薦する

MySQL でよく使われる連結文のまとめ

はじめに: MySQL では、CONCAT() 関数を使用して複数の文字列を 1 つの文字列に連結し...

開発者がデータベースロックを詳細に理解する必要がある理由

1.ロックしますか? 1.1 ロックとは何ですか?ロックの本当の意味は、鍵またはコードで開くことがで...

CSS モジュールソリューション

CSS のモジュール ソリューションは、JS のモジュール ソリューションと同じくらい多く存在すると...

Dockerコンテナのタイムゾーン調整操作

Docker コンテナのタイムゾーンがホストマシンと一致しているかどうかを確認するにはどうすればよい...

Nginxは特定のページへのIPアクセスを制限します

1.すべてのIPアドレスが3つのページa1.htm、a2.htm、a3.htmにアクセスするのを禁止...

Websocket+Vuexはリアルタイムチャットソフトウェアを実装します

目次序文1. 効果は図の通りです2. 具体的な実施手順1. Vuexの紹介2.webscoked実装...

Nginx で WordPress 擬似静的を設定する方法の例

Baidu の擬似静的の説明を引用します。擬似静的は、実際の静的に相対的です。通常、検索エンジンの使...

初心者がソースコードからMySQLのデッドロック問題を理解する

夜遅くまで何度も困難なシングルステップデバッグを行った後、ようやく理想的なブレークポイントを見つけま...

MySQL 5.7.10 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

MySQL は比較的使いやすいリレーショナル データベースです。今日は、win10 システムを再イ...

Docker+daocloudはフロントエンドプロジェクトの自動構築とデプロイを実現します

自動プロジェクト展開は大企業やユニコーン企業でよく使用され、手動でプロジェクトを展開するよりも効率的...

Linux でファイルを削除するさまざまな方法の効率の比較

Linux で大量のファイルを削除する効率をテストします。まず500,000個のファイルを作成する$...

Firefox で英語の文字が折り返されない問題の解決方法

テキストのレイアウトには、言語に応じていくつかの書式設定要件があります。たとえば、簡体字中国語では、...

スマートCSSを使用して、ユーザーのスクロール位置に基づいてスタイルを適用します。

現在のスクロール オフセットを html 要素の属性に追加することで、現在のスクロール位置に基づいて...

jsを使用してシンプルな弾幕スクリーンシステムを実装する

この記事では、弾幕効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的な...

Linuxシステムの操作レベルの詳細な紹介

目次1. Linuxシステムの操作レベルの概要2. 実行レベルを確認する3. 現在のシステムの動作レ...