未経験からエンジニアになりたい人は、プログラミングから始める人が多いと思いますが、
エンジニアの仕事は、プログラミングだけではありません。そして、プログラミングだけでは、エンジニアになれません。同時にプログラミングが苦手でも、システム構成や開発の流れを理解するとエンジニアに近づきます!
今回はMySQLの色々その1として、Readとロックの色々について更に詳しく調べてみましょう!
Readの種類
ダーティリード【Dirty Reads】
並列実行中の他のトランザクションが書き込んだ未コミットのデータを読み込む。
ノンリピータブルリード【Non-repeatable Reads】
並列実行中の他のトランザクションが更新しコミットしたデータを読み込んでしまうため、以前読み込んだデータを再度読み込むと異なる値となる。
ファントムリード【Phantom Reads】
並列実行中の他のトランザクションが挿入しコミットしたレコードを読み込んでしまうため、以前存在しなかった行データが読めてしまう。
MySQLでは
MySQLのInnoDBでは、
分離レベルは Repeatable read でファントムリード等の間違ったReadが発生しないよう工夫が施されています。
この仕組みがネクストキーロックと呼ばれるアルゴリズムです。
ネクストキーロック
Where句で指定したデータとインデックスの隙間(ギャップ)のギャップロック
直近のデータのロック(レコードロック)
この2つをあわせてネクストキーロックという
まとめ
ーReadで色々な種類があり、 MySQLでもその対策がされている
ーMySQLでは、where句以外のデータもロックされる
ーロックの範囲を知ればロック対象を減らせてパフォーマンスが上がる
最後に
未経験の皆さん、若手エンジニアの皆さん、勉強方法について悩みがあればなんでも気軽に質問して下さい!
これからも記事を書いていきますので、モチベーションアップのためフォロー、イイねお願いします。