MySQL

なぜ MySQL だけデフォルトが Repeatable Read なのか

DB トランザクション分離レベル MySQL(InnoDB) Repeatable Read PostgreSQL Read Committed SQL Server Read Committed Oracle Read Committed DB2 Read Committed なぜ MySQL だけデフォルトが Repeatable Read なのか MySQL 5.0までのバイナリログはこのよ…

MySQL のギャップロックとロック競合

REPEATABLE READ 分離レベルのときに 一意にならないインデックスで更新・削除しようとするとギャップロックが発生し これが複数同時になると、ロックが競合してデッドロックになる 対策としては操作対象が一意になるようにインデックスを設定する。

NUMAアーキテクチャ

今までの SMP(Symmetric Multiprocessing) 構成の場合、CPU が全てのメモリに均一にアクセスできた。 しかし CPU の搭載数が増えるに従い、増えた CPU によるメモリへのアクセス待ちが問題となっていった。 またメモリ参照には局所性があるから、全ての CPU …

Deadlock found when trying to get lock

アプリのコードが`必ず1トランザクションで1つのテーブルしか触ってない'コードなのに Deadlock found when trying to get lockが検出されることがある。 <略> デッドロックというより、単純なロック競合な訳だけれども、 Deadlock found when trying to get…

Innodb row size limitation

行データはすべてのカラムを 8KB に収めなければならない。 ただし上記計算において、可変長項目は定義長に関係なく最大長を 768 バイトとする。 可変長項目のうち 768 バイトを超えた部分は off-page storage へ格納される。 off-page strage を含めた row …