MySQLのストレージエンジンについて
ストレージエンジンとは?
- SQL文を受け取って結果を返すデータベースエンジン部分 ⇨ つまりテーブルにデータを書き込んだり読みだしたりするプログラム
- 複数の種類があり、データの取得方法、保存方法、処理方法がストレージエンジンによって異なる
- MySQLの場合、テーブル毎にストレージエンジンを分けられる
上図ではMySQLサーバ内の構造を中心に図示しており、複数のストレージエンジンがプラグのマーク付きで示されています。そして、複数のストレージエンジンの配下にユーザデータファイルやログファイルを持つファイルシステムが記されていることがわかると思います。 このようにストレージエンジン部分がモジュール化されたアーキテクチャは、アプリケーションの特性の違いによって適したストレージエンジンを使用できるといったメリットを生みます。
またアプリケーション開発者は、図1の上部にあるConnector APIを通してMySQLにアクセスするため、ストレージエンジンの違いを意識する必要はありません。
ストレージエンジンの種類
ストレージエンジン | 概要 |
---|---|
MyISAM | MySQL標準のストレージエンジンとして使用される(旧標準) |
InnoDB | 行ロックとトランザクションをサポートする(現在の標準) |
Memory | メモリ上にテーブルを配置する |
Merge | 複数のMyISAMテーブルを統合する |
Archive | 圧縮したデータベースを使用する |
Federated | リモートのデータベースを参照する |
NDB | クラスター構成にて使用される |
CSV | データファイルにCSVを使用する |
Blackhole | ダミーテーブルを使用する |
対応エンジン確認方法
SHOW ENGINES;
ストレージエンジン確認方法
SHOW TABLE STAUS WHERE NAME = [テーブル名] \G;
代表的なストレージエンジン
- MyIsam
- InnoDB
MyIsamエンジン
- 旧デフォルトストレージエンジンでバランスが良かったらしい
- トランザクション非対応
- レコードレベルのロックをサポートしない ⇨ 故にロックの粒度がテーブル単位になる
- クラッシュセーフでない ⇨ なんらかの事情によりプロセスがダウンしたり、マシンが電源毎落ちた場合、再起動後に元の状態に戻って処理を再開できない
- クラッシュしやすく、Innodbよりも復旧にかかる時間が長い
- リードは早いので参照が多いテーブル構成だとInnoDBよりパフォーマンスが高い
InnoDBエンジン
- 現在のデフォルト
- トランザクション対応
- クラッシュセーフである
- ロックの粒度がレコード単位 ⇨ ロック方法を指定できる(参考記事)
テーブル毎にストレージエンジンを変更できるが、それが必ずしも良いわけではなく、バックアップとサーバーの調整が難しくなるため十分な検討が必要
テーブル移行
- MyISAMからInnoDBに変更するのは注意が必要 ⇨ 詳細な注意点
参考記事
https://qiita.com/arutemyan/items/b75d240f2f5b7da98a4a
https://qiita.com/SuguruOoki/items/fbaed055611b9416e4cc
https://qiita.com/at_1016/items/33186523cfc20fb58675
https://www.dbonline.jp/mysql/myini/index4.html