際際滷

際際滷Share a Scribd company logo
ファントムリ`ドが
軟こらないのに
SERIALIZABLEでない!?
M3 TechTalk #83 2017/12/06
眉屯 ?張 (@yuba)
SQLのトランザクション蛍xレベル
もしかして逗返吭Rありますか
SQLのトランザクション蛍xレベル
暴も寄篆猜屬任后
SQLのトランザクション
そこでXくおさらい
‐トランザクション/
ひとかたまりの荷恬。
畠何撹孔か恷兜からなかったことになるかの屈宥りの「しかない。
トランザクションはsynchronizedブロックとは`う。
トランザクションのM佩嶄にもほかのセッションにより震?とデ`タは筝さ
れていく。
SQLのトランザクション蛍xレベル
‐トランザクション蛍xレベル/
トランザクションがどんな孤hから便られるか
M佩嶄にどんなデ`タ筝をてしまわないことを隠^してもらうか
¢ レコ`ドg了のデ`タ壅F隠^
¢ テ`ブルg了のデ`タ壅F隠^
☆その隠^をどんな碧MみでgFするかはg廾に販されている。
SQLのトランザクション蛍xレベル
レコ`ドg了のデ`タ壅F隠^ テ`ブルg了のデ`タ壅F隠^
READ COMITED 掲隠^
匯業iんだレコ`ドを壅業iむ
と篁しているかもしれない
掲壅Fリ`ド
┘侫.県`リ`ド
掲隠^
匯業い栽わせてつからなかっ
たレコ`ドが壅業い栽わせて
つかるかもしれない
ファントムリ`ド
REPEATABLE READ 隠^ 掲隠^
SERIALIZABLE 隠^ 隠^
☆ダ`ティリ`ド?READ UNCOMITEDは勸濁すぎるので護
SERIALIZABLE
仝SERIALIZABLE々の云栖の吭龍は
光トランザクションに頼畠にg佩會vSがQめられること。
synchronizedブロックのような芦畠來
☆gHにはK双g佩してよい。
トランザクションK阻rにg佩會vSの狸芹k伏を奮できれば噴蛍。
┘灰潺奪半楫颪気譴襪里敗g佩する駅勣があります
ファントムリ`ドを契げているのとg佩會vSがQ協づけられるのって、
イコ`ル
PostgreSQLのREPEATABLE READ
ここからが云}
¢ PostgreSQLのREPEATABLE READはファントムリ`ドも契ぎます。
¢ ところが、PostgreSQLにはのREPEATABLE READとeにSERIALIZEDレベル
が贋壓します9.1參週
¢ ファントムリ`ドを契げているのにSERIALIZEDでないの
そう、會づけできないトランザクションをSしてしまうケ`スがあるのです
PostgreSQLのREPEATABLE READ
醤悶箭佐里離肇薀鵐競ションをK佩に2セッション撹孔できてしまう
畠隼會づけできてないじゃん
-- メ`ルアドレスがlにも聞われていないことを_J
select count(1)
from users
where email = 'alice@example.com';
-- そのメ`ルアドレスでユ`ザ`鞠h
insert into users
(email, name)
valuse
('alice@example.com', 'Alice');
PostgreSQLのREPEATABLE READ
REPEATABLE READが岷双晒狸芹として奮できないもの
壅業のい栽わせはしなくとも、麻の功となったい栽わせのY惚が
INSERTにより笋錣辰討靴泙κ堆
☆9.0參念ではこのREPEATABLE READをSERIALIZABLEと柵んでおり、
この樋泣もJRはされていました。
9.1で峰ZロックがgFされてこれが針捲され、症碧がREPEATABLE READ
として札Qのため火されました。
まとめ
¢ ファントムリ`ドを契いだだけではSERIALIZABLEだとは冱えない。
¢ アプリコ`ドによるUNIQUE隠^をしようとしたらSERIALIZABLE蛍xレベ
ルが駅勣。
¢ SERIALIZABLEレベルではREPEATABLE READレベルでもコミットrに
會vSの狸芹が奮される辛嬬來あり。
アプリコ`ドにはエラ`リトライI尖の峰を。
¢ PostgreSQLのSERIALIZABLEは9.0參念と9.1參週で吭龍が`う。
卞佩のHにはご廣吭。

More Related Content

ファントムリ`ドが軟こらないのに皆艶姻庄温鉛庄噛温恢鉛艶でない!