MYSQLの概要
3792 ワード
ロック粒度表レベルロック:MYSQLの最も基本的なロックポリシーで、最小のオーバーヘッドを持ち、表全体をロックします.クライアントがテーブルを書き込み操作すると、書き込みロックが取得され、他の読み取りと書き込み操作がブロックされます.クライアントがリード操作を行うと、他のリード取得ロックに影響を及ぼさずにリードロックが取得されます. 行レベルのロック:最も優れた同時実行能力を提供し、同時に最大のコストを費やします.InnoDBとXtraDBストレージエンジンは行レベルロックを実現している.
取引
ACID Atomicity(アトミック):トランザクションは、単一の分割不可能な作業ユニットとして、トランザクション内の操作が成功したり、ロールバックしたりする必要があります. Consistency(コンシステンシ):データベースは常に1つのコンシステンシ状態から次のコンシステンシ状態にする必要があります. Isolation(独立性):1つのトランザクションの結果は、通常、このトランザクションが完了したときにのみ他のトランザクションが表示されます. Durability(永続性):トランザクションがコミットされると、その変更は永続化されなければなりません.
隔離レベル READ UNCOMMITTED(未提出読み):トランザクションは他の未提出トランザクションの結果を見ることができ、汚れた読みにもなります.他の独立性レベルよりもパフォーマンスが優れているわけではありません. READ COMMITTED(提出読み):繰り返し読み不可とも言います.ほとんどのデータベースのデフォルトの独立性レベル(MYSQLではありません).1つの事務所の変更は、コミットが完了してから他の事務に表示されます. REPEATABLE READ(繰り返し可能):同じトランザクションで同じローが読み込まれた場合、2回の結果が一致することを保証します.幻読が現れるかもしれません. SERIALIZABLE(シリアル化):最大独立性レベル.トランザクションのシリアル化を強制し、物事間の相互影響を確保します.幻読の問題を解決した.
隔離等級の長所と短所
Isolation level
Dirty reads possible
Nonrepeatable reads possible
Phantom reads possible
Locking reads
READ UNCOMMITTED
YES
YES
YES
NO
READ COMMITTED
NO
YES
YES
NO
REPEATABLE READ
NO
NO
YES
NO
SERIALIZABLE
NO
NO
NO
YES
MVCC(multiversion concurrency control)
動作原理:ある時点でのデータのスナップショットを保存します.
InnoDBのMVCC実現
行ごとに2つの追加の非表示値が保存されます.行の作成トランザクションバージョン番号と行の削除トランザクションバージョン番号です.
例: SELECT:InnoDB must examine each row to ensure that it meets two criteria: InnoDB must find a version of the row that is at least as old as the transaction (i.e., its version must be less than or equal to the transaction’s version). This ensures that either the row existed before the transaction began, or the transaction created or altered the row. The row’s deletion version must be undefined or greater than the transaction’s version. This ensures that the row wasn’t deleted before the transaction began. Rows that pass both tests may be returned as the query’s result.
INSERT: InnoDB records the current system version number with the new row. DELETE: InnoDB records the current system version number as the row’s deletion ID. UPDATE: InnoDB writes a new copy of the row, using the system version number for the new row’s version. It also writes the system version number as the old row’s deletion version.
MYSQLストレージエンジン
InnoDBトランザクション はテーブルレベル、行レベルロック をサポートする.
MYISAM非トランザクション はテーブルレベルロック のみをサポートする. BLOB、TEXT列の上位500文字をインデックス 全文インデックス をサポート
Archive INSERTとSELECT のみサポートからMYSQL 5.1はインデックス をサポートする
XtraDBサードパーティエンジン InnoDBの修正版 テーブルのストレージエンジンの変更 ALTER TABLE mytable ENGINE = InnoDB; 最も簡単な方法 時間:MYSQLは1行1行のコピーデータを新しいテーブルの にコピーします.は、ディスクのI/O をフルにする可能性があります.変換中、元のテーブルは読み込みロックされ、対標データの読み取りがブロックされる .
Dump and import mysqldumpを使用してテーブル をバックアップ dumpファイルを編集し、テーブル名とエンジンタイプ を変更します. mysqldumpデフォルトではCREATE TABLEの前にDROP TABLE文が書かれているので、実行する前に に注意してください.
CREATE and SELECT の前の2つの方式の中和 新しいテーブルを作成し、INSERTを使用します.SELECTは新しい表にデータを充填し、適合データが多くない場合 データが多い場合、増分挿入を使用するとより良い
取引
ACID
隔離レベル
隔離等級の長所と短所
Isolation level
Dirty reads possible
Nonrepeatable reads possible
Phantom reads possible
Locking reads
READ UNCOMMITTED
YES
YES
YES
NO
READ COMMITTED
NO
YES
YES
NO
REPEATABLE READ
NO
NO
YES
NO
SERIALIZABLE
NO
NO
NO
YES
MVCC(multiversion concurrency control)
動作原理:ある時点でのデータのスナップショットを保存します.
InnoDBのMVCC実現
行ごとに2つの追加の非表示値が保存されます.行の作成トランザクションバージョン番号と行の削除トランザクションバージョン番号です.
例:
MYSQLストレージエンジン
InnoDB
MYISAM
Archive
XtraDB
mysql> CREATE TABLE innodb_table LIKE myisam_table;
mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;
mysql> START TRANSACTION;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table WHERE id BETWEEN x AND y;
mysql> COMMIT;