MySQLシリーズ:9つのストレージエンジン

序文

         前述のように、MySQLは3層のデータベースシステム(接続層、SQL層、ストレージ層)です。ストレージ層は、さまざまなタイプのストレージエンジンによって実装されるデータストレージの抽象表現です。

         MySQLは階層設計を採用し、プラグインストレージエンジンをサポートするAPIを公開しています。InnoDBやMyISAMなど、MySQLがコンパイルおよびリリースされるときに、一部の一般的なストレージエンジンがmysqldにコンパイルされています。show engineコマンドは、次のように、システムでサポートされているインデックスエンジンとその特性を表示できます。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| FEDERATED          | YES     | Federated MySQL storage engine                                 | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

         作成者のMySQLシステムロックでサポートされているすべてのストレージエンジンを上に示します。ストレージエンジンが異なれば、特性も異なります(ストレージメディア、トランザクションサポート、バックアップとリカバリなど)。最も一般的に使用されるのは、トランザクション、XA分散トランザクション、セーブポイントなどをサポートするInnoDBであり、MySQLのデフォルトのストレージエンジン(MySQL 5.5以降)でもあります。

InnoDBの概要

         InnoDBはMySQLのデフォルトのストレージエンジンであり、非常に高い信頼性とパフォーマンスを備えています。そのため、MySQLはエンタープライズレベルのデータベースのオプションソリューションになりました。MySQLの主な機能は次のとおりです。

  1. 事務をサポートします。
  2. MVCC(マルチバージョン同時実行制御)を介して、行レベルのロック、継続的な非ロック読み取りを実現します。
  3. 高速自動回復

……

       InnoDBテーブルスペース

  • ORACLEの概念と同様に、表スペースはデータの論理ストレージ・ポイントであり、表スペースに対応する物理ファイルはデータの物理ストレージ・ポイントですMySQL InnoDBエンジンのメタデータ、元に戻すログ、バッファー、およびその他のデータも、デフォルトでシステムテーブルスペースに保存されます。このテーブルスペースには、複数の物理ファイルまたはrawパーティションを含めることもできます。表スペース・ファイルを照会します。
mysql>  show variables like '%data_file%';
+----------------------------+------------------------+
| Variable_name              | Value                  |
+----------------------------+------------------------+
| innodb_data_file_path      | ibdata1:12M:autoextend |
| innodb_temp_data_file_path | ibtmp1:12M:autoextend  |
+----------------------------+------------------------+
2 rows in set (0.00 sec)

上記には、次のように、InnoDBストレージエンジンのデフォルトのテーブルスペースファイル(ibdata1)と一時テーブルスペースファイル(ibtmp1)が含まれています。

 

  • デフォルトの共通テーブルスペースファイルには、元に戻すログを格納するためのロールバックセグメントが含まれています。元に戻すログは、innodb_undo_directoryとinnodb_undo_tablespacesを構成することでデフォルトのテーブルスペースから分離できます。---- 5.7.13以降非推奨になりました。

 

  • InnoDBエンジンは、デフォルトで各ユーザーテーブルを個別のテーブルスペースファイルに保存し、システムテーブルスペースはそのソースデータのみを保存します。オプションinnodb_file_per_tableは、この関数を構成できます。
mysql> show variables like '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.01 sec)

InnoDB共有表スペース構成

ORACLEが表スペースにファイルを追加するのと同様に、MySQLの表スペースを共有することもできます。

  • 共有テーブルスペースファイルの数を増やす

innodb_data_file_pathオプションを構成ファイルまたはmysqldの起動オプションに追加して、複数のテーブルスペースファイルをサポートできます。効果は次のとおりです(廃止されたようです。実験は失敗しました)。

innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
  • 自動的に増大する表スペースのサイズ(M単位)
mysql> show variables like '%innodb_autoextend_increment%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 64    |
+-----------------------------+-------+
1 row in set (0.00 sec)

関連コマンド

  • デフォルトのストレージエンジンを表示する

上記のshowengineに加えて、default_storage_engineシステム変数はデフォルトのストレージエンジンも格納します。

mysql> SELECT @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB                   |
+--------------------------+
1 row in set (0.00 sec)
  • テーブルのストレージエンジンを表示する
mysql> show create table zavier.table_name;
  • 構成ファイルはデフォルトのストレージエンジンを設定します
default-storage-engine=<Storage Engine>
  • 現在のセッションのストレージエンジンを設定します
SET @@storage_engine=<Storage Engine>;
  • テーブルを作成するときにストレージエンジンを指定します
CREATE TABLE t (i INT) ENGINE = <Storage Engine>;

総括する

MySQLのデフォルトのストレージエンジンとして、InnoDBには独自のパフォーマンスと利点があります。ただし、テクノロジーは絶えず進化しており、MySQLバージョンの継続的な更新により、一部の構成オプションは絶えず最適化されています。それを使用するとき、読者は公式ウェブサイトで彼ら自身のMySQLバージョンと一致するrefドキュメントリファレンスを見つける必要があります。

おすすめ

転載: blog.csdn.net/zhaogang1993/article/details/98777696