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

推薦する

ElementUI の this.$notify.close() 呼び出しが機能しない問題の解決方法

目次要件の説明問題の説明問題分析問題解決質問の拡張要件の説明このプロジェクトでは、まずユーザーが質問...

React の 10 個のフックの紹介

目次ReactHook とは何ですか? Reactは現在フックを提供している1. 使用状態2.use...

njs モジュールを使用して nginx 構成に js スクリプトを導入する

目次序文1. NJSモジュールをインストールする方法1: NJSモジュールを動的にロードする方法2:...

JavaScript にはすでに Object があるのに、なぜ Map が必要なのでしょうか?

目次1. オブジェクトをマップとして扱わない1. 未定義のプロパティはプロトタイプチェーンを通じてア...

Docker デプロイメント Consul 構成プロセスの分析

コマンドを実行docker run -d --name consul -p 8500:8500 co...

CentOS はローカル yum ソースを使用して LAMP 環境を構築するグラフィック チュートリアル

この記事では、ローカル yum ソースを使用して CentOS 上に LAMP 環境を構築する方法に...

Docker を使用して静的 Web サイト アプリケーションを作成する (複数の方法)

静的ウェブサイトをホストできるサーバーは数多くあります。この記事では、nginx、apache、to...

MySQL CHARとVARCHARの保存と読み取りの違い

導入保存時と読み取り時に CHAR 型と VARCHAR 型の違いを本当にご存知ですか?まずいくつか...

WangEditor リッチ テキスト コンポーネントを Angular でカプセル化する方法

リッチ テキスト コンポーネントは、Web プログラムで、特にブログやフォーラムなどの Web サイ...

ウェブデザインにおける階層化インターフェースの設計経験

多くのネットユーザーは、なぜ自分のウェブサイトはいつも色の問題を抱えていて、いつも地味に見え、注目を...

CSS プロパティ *-gradient の実用的な価値を探る

まず興味深い性質であるconic-gradientを紹介しましょう。円錐グラデーション!円グラフの作...

Linux で大きなファイルの内容を消去または削除する 5 つの方法

Linux ターミナルでファイルを操作しているときに、Linux コマンドライン エディターでファイ...

JavaScript の条件付きアクセス属性と矢印関数の紹介

目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...

Centos7はMySQLログに基づいてデータを復元するためのサンプルコードを実装します

導入Binlog ログ、つまりバイナリ ログ ファイルは、データベースに対するユーザー操作の SQL...

js タグ構文の使用法の詳細

目次1. ラベルステートメントの紹介2. ラベルステートメントの使用序文:日常の開発では、プログラム...