MySQLのファイルシステムとストレージエンジンの概要

MySQLのファイルシステムとストレージエンジンの概要についてまとめました。

(1)MySQLのデータベース、テーブルとファイルシステムの関係


 
・MySQLはそれぞれのデータベース(スキーマ)をMySQLのデータディレクトリのサブディレクトリとして保存する。
 
・テーブルを作成するとそのテーブル定義をデータベースディレクトリ内に”テーブル名”.frmというファイル名のファイルを作成する。
 
・MySQLでは、データベースの名前とテーブル定義をそのサーバーのファイルシステムに保存するので、名前が大文字小文字を区別するかはそのサーバーのOSに依存する。
 
・それぞれのストレージエンジンがテーブルデータとインデックスを固有の方法で保存するが、テーブル定義はそのサーバー自身が取り扱う。
 
※デフォルトでは、データベースディレクトリは”/var/lib/mysql”で、このディレクトリ内に各データベース単位にデータベース名のサブディレクトリが作成されている。
 

(2)ストレージエンジン


 
1)MyISAMストレージエンジンの概要
 
●トランザクション
 
・トランザクション非対応、電源障害時などにデータ破損のおそれ有り。
 
●ストレージ
 
・テーブルをデータファイル(.MYD)とインデックスファイル(.MYI)に分けて保存する。
・ダイナミックとスタティック(固定長)の行を含む事が出来る。
テーブル定義に基づいてどちらにするか決める。
 
●ロック
 
・行レベルではなく、テーブルロック。
・読込時はすべての対象テーブルを共有ロック、書込み時は、排他ロック。
・並列インサートが出来る。
 
●リペア
 
・手動または自動チェックとテーブルのリペアは出来る。(トランザクションとクラッシュリカバリーには対応していないので、一部のデータが消失している可能性がある)ただし、時間はかかる。
CHECK TABLEコマンド、REPAIR TABLEコマンド
・サーバーがオフラインの状態でmyisamchkコマンドラインツールを使ってチェック・リペアが出来る。
 
●インデックス
 
・BLOB、TEXTカラムの先頭から500文字でインデックスを作成できる。
・フルテキストインデックスをサポート。
 
●遅延書込み
 
・DELAY_KEY_WRITEオプションを使ってテーブルを作成すると、インデックスが更新されたときに即座にキーバッファのフラッシュが行われずテーブルが閉じられたときに初めてフラッシュされる。
 性能を向上できるがサーバーがクラッシュした際にはインデックスが壊れて修復が必要になる可能性がある。
 
●テーブルの圧縮
 
・myisampackユーティリティを使ってテーブルを圧縮できる。データ変更を行わないテーブルに有用。
 サイズが小さくなることによってディスクシークが短縮でき高速に出来る。
 
●性能
 
・シンプルなデザインでディスクやメモリのフットプリントが小さいので、使用用途によっては良好なパフォーマンスを示す。
・キーキャッシュの排他制御、テーブルロックの影響によってパフォーマンスが劣化することもある。
 

2)InnoDBストレージエンジンの概要


 
※InnoDBストレージエンジンは、個人的にあまり使用していないので簡単に概要をまとめました。
 
・トランザクション処理可能なストレージエンジンのデフォルト。
 
・ロールバックが多い状況よりも短い時間のトランザクション処理用に適した設定。
 
・データをテーブルスペースと呼ばれる一つ又は複数のデータファイルに保存する。
 
・InnoDBのテーブルは、クラスターインデックス上に構築される。
 プライマリキーの検索は非常に高速だが、セカンダリインデックスはプライマリキーのカラムを含むのでプライマリキーのサイズが大きいと他のインデックスも大きくなってしまう。
 
・ストレージのフォーマットはプラットフォームに依存しない。データとインデックスファイルをIntelベースのサーバからPowerPCなど他のサーバーにコピーする事も可能。
 
・InnoDBでは、内部で様々な最適化が行われている。
 ディスクからのデータのプリフェッチ、自動でメモリにハッシュインデックス構築、インサートバッファなど。

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です