FAT47の底辺インフラ議事録

学んだことのメモ帳です

MySQLの勉強メモ:ロック、ストレージエンジン、INFORMATION_SCHEMA

MySQLの勉強の個人的なメモです。

http://kambing.ui.ac.id/mysql/doc/refman/5.1/ja/


セクション 5: ロック
ロックの概念
明示的なテーブル・ロック
アドバイザリ・ロック

http://kambing.ui.ac.id/mysql/doc/refman/5.1-olh/ja/internal-locking.html

ロック
共有ロック(読み取りロック)と排他ロック(書き込みロック)が存在する。
共有ロックでは複数のクライアントがリソースを同時に読み取りが可能で互いに干渉しません。これに対して排他ロックは読み取りと書き込みロックをブロックします。

テーブルロック
最も基本的でオーバヘッドが低いロックです。テーブル全体をロックします。
MyISAM、MEMORY、および MERGE テーブルにはテーブルレベルロックが使用されています。

行ロック
オーバーヘッドは高いが、並行性が最も高いロックです。InnoDBやFalconストレージエンジンで使用されています。

明示的なテーブルロック
LOCK_TABLESによって現在のスレッドに対してロックを取得します。読み取りロック、書き込みロックどちらを取得するか選択可能です。


UNLOCK TABLESは現在のスレッドによって行われたロックを全て明示的にリリースします。スレッドが別の LOCK TABLES を発行した時、またはサーバへの接続が閉じられた時に、現在のスレッドにロックされている全てのテーブルは暗黙的にロック解除されます。

アドバイザリロック
MySQLのGET_LOCK()やRELEASE_LOCK()で提供されているようなアプリケーションレベルロックです。相互に連携するアプリケーションでのみ機能します。


セクション 6: ストレージ・エンジン
MySQL ストレージ・エンジン
MyISAM エンジン
MERGE エンジン
InnoDB エンジン
MEMORY エンジン
FEDERATED エンジン
Cluster ストレージ・エンジン
その他のストレージ・エンジン


MyISAMストレージエンジン
デフォルトのストレージエンジンです。トランザクション、行レベルのロックをサポートしていません。
各テーブルをデータファイルとインデックスファイルの2ファイルで保存します。
それぞれ.MYD .MYIの拡張子がついています。これらのフォーマットはプラットフォーム依存いないため、別の環境のサーバにコピーしてもそのまま利用できます。
MySQL5.0以降であればMyISAMテーブルは、デフォルトでデータレコードへの6バイトポイントを使用して256TBのデータを扱えるようになっている。最大8バイトのポイントを扱えます。
MyISAMテーブルでポインタのサイズを変更するにはテーブル作成時にMAX_ROWSオプションとAVG_ROW_LENGTHオプションの値をします。ALTER文でも変更できますが、テーブル全体に影響があるので時間がかかります。

ロック
テーブル全体をロックします。読み取り時には共有ロック、書き込み時には排他ロックを取得します。選択クエリが実行されているテーブルに対しては新しい行の挿入は可能です。

修復
CHECK TABLEコマンドとREPAIR TABLEコマンドでテーブルのエラーチェックを行い、それを修復することができます。myisamchkコマンドを利用してオフライン時にチェックと修復を行うことも可能です。

MERGEストレージエンジン
MyISAMの一種であるMergeエンジンは、複数のMyISAMテーブルを一つの仮想テーブルに組み合わることができます。

InnoDBストレージエンジン
トランザクション処理に対応したストレージエンジンです。パフォーマンスの良さから利用されているケースが多いです。
テーブル領域と呼ばれる1つ以上のデータファイルにデータを保存します。MVCCを使って高い並行性を実現しており、SQLの4つの標準分離レベルをすべて実装しています。
デフォルトではREPEATABLE READ分離レベルを使用しています。


MEMORYストレージエンジン
以前はHEAPと呼ばれていたものです。決して変化しないデータや、再起動後に消えてしまっても問題のないデータを格納することで、データへの高速アクセスが可能になります。
Memoryテーブルのテーブル構造はサーバを再起動しても維持されますが、データは全て失われます。


FEDERATEDストレージエンジン
データをローカルに保存しません。FederatedテーブルはそれぞれリモートのMySQLサーバ上のテーブルを参照します。すべての操作は実際にリモートサーバに接続して実行されます。

NDB Clusterストレージエンジン
冗長性と負荷分散機能を備えています。NDBデータベースはデータノード、管理ノード、SQLノードで構成されています。データノードがそれぞれのクラスタのデータの断片を格納します。
その断片は複製されているため、様々なノードに同じデータのコピーが存在します。

その他のストレージエンジン
Archiveエンジン
CSVストレージエンジン
Blackholeストレージエンジン
Falconストレージエンジン
SolidDBストレージエンジン
PBXTストレージエンジン
Ariaストレージエンジン


セクション 8: INFORMATION_SCHEMA データベース
INFORMATION_SCHEMA アクセス・シンタックス
INFORMATION_SCHEMA と SHOW コマンド
INFORMATION_SCHEMA の制限

INFORMATION_SCHEMAデータベースはSQL規格で定義されているシステムビューです。SHOWコマンドで見られないビューを確認することができます。
標準SQLで照会できるため集計や結合などの操作をすることが可能です。


INFORMATION_SCHEMA の制限
SHOWコマンドと比べて非常に低速な場合がある。ビューはすべてのデータを取得してそれを一時テーブルに格納したあと、一時テーブルでクエリを実行できるようにします。
また、ビューを更新することもできません。