序文
前述のように、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の主な機能は次のとおりです。
- 事務をサポートします。
- MVCC(マルチバージョン同時実行制御)を介して、行レベルのロック、継続的な非ロック読み取りを実現します。
- 高速自動回復
……
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ドキュメントリファレンスを見つける必要があります。