修正する時、照会する時に知っておくべきDatabase Lockについて
初めまして、Junior Back-end Developer、SIMOKITAZAWAです。
色々と足りないところがあるかと思いますがよろしくお願い致します。
私がZENNを始めた理由は、
- 私が勉強したことをまとめたい
- 勉強の内容を共有して一緒に成長したい
- 私が間違って理解している部分について先輩たちに教えてもらいたい
このような理由で始めることになりました。
たくさんの教えをお願いします。
Database Lockとは?
Databaseのrowに一つずつかかっているロックのようなものです。
AショッピングWebサイトに上記のようなdbデータがあるとしましょう。
itemにmacbookとipadがあり、priceにmacbookの価格は1000円でipadの価格は500です。
現在実際に円安でドルが高くて、Appleの製品が全部高くなりましたね。
Webサイトを管理する二人の管理者が値段を変えるためにAppleのWebサイト入りました。
そうしたら、二人の管理者に見えるDatabaseの情報は同じです。
Database Lock 修正時
その時、もしAdminA管理者がAdminBの管理者より、0.000000000000000000000000000001でも早くDatabaseに入ってMacbookの値段を変えます。変える時にAdminAはMacbookのLockを持つようになります。
adminAがMacbookのLockを持っているので、adminBはMacBookの値段を変えるとこができません。少し遅れたadminBは、adminAのトランザクションが終わってLockが返還されるまで待機しなければならないです。Lockを持っている間にはadminAだけ権限を持っていることです。
adminBはLockを獲得するため待機するロックタイムアウト時間が超過すると、修正sql文に例外が発生します。
Database Lock 照会時
また、adminAがMacbookの値段を2000円にしても、Commitをする前まではadminBのDatabaseにはまだ1000円です。なぜかというとトランザクションが終わらなかったからです。
よく分からないと先日掲載したトランザクション記事をみてきましょう。
照会の場合は、adminAがcommitをする前まで、adminBには元の持っていたデータが照会されます。
adminAがCommitまたはrollbackしたら、LockはDatabaseに返還されadminBのDatabaseにも結果が反映されます。
Discussion