見出し画像

MySQLの色々その2Readとロックの色々

未経験からエンジニアになりたい人は、プログラミングから始める人が多いと思いますが、
エンジニアの仕事は、プログラミングだけではありません。そして、プログラミングだけでは、エンジニアになれません。同時にプログラミングが苦手でも、システム構成や開発の流れを理解するとエンジニアに近づきます!
今回はMySQLの色々その1として、Readとロックの色々について更に詳しく調べてみましょう!

Readの種類

ダーティリード【Dirty Reads】
並列実行中の他のトランザクションが書き込んだ未コミットのデータを読み込む。

ノンリピータブルリード【Non-repeatable Reads】
並列実行中の他のトランザクションが更新しコミットしたデータを読み込んでしまうため、以前読み込んだデータを再度読み込むと異なる値となる。

ファントムリード【Phantom Reads】
並列実行中の他のトランザクションが挿入しコミットしたレコードを読み込んでしまうため、以前存在しなかった行データが読めてしまう。

MySQLでは

MySQLのInnoDBでは、

分離レベルは Repeatable read でファントムリード等の間違ったReadが発生しないよう工夫が施されています。

この仕組みがネクストキーロックと呼ばれるアルゴリズムです。

ネクストキーロック

Where句で指定したデータとインデックスの隙間(ギャップ)のギャップロック
直近のデータのロック(レコードロック)

この2つをあわせてネクストキーロックという

まとめ

ーReadで色々な種類があり、 MySQLでもその対策がされている

ーMySQLでは、where句以外のデータもロックされる

ーロックの範囲を知ればロック対象を減らせてパフォーマンスが上がる

最後に

未経験の皆さん、若手エンジニアの皆さん、勉強方法について悩みがあればなんでも気軽に質問して下さい!
これからも記事を書いていきますので、モチベーションアップのためフォロー、イイねお願いします。

この記事が気に入ったらサポートをしてみませんか?