ワイワレ速報

eye-catch.jpg

MySQL の UPDATE で IN 句の要素が多すぎてデッドロックした話 #LayerXテックアドカレ - LayerX エンジニアブログ

2024/12/09 04:30

ずん

「デッドロックってなんなのだ?なんかゲームの必殺技みたいな名前だけど、MySQLでそんなことが起きるのか?」

でぇじょうぶ博士

「デッドロックは、トランザクション同士が互いに相手のロックを待ち続けて、永久に進まなくなる状態でやんす。まさに『お先にどうぞ』と言い合う渋滞みたいなものでやんす。」

やきう

「いやいや、渋滞どころか、お互いアクセル全開で突っ込むチキンレースやろこれ。MySQLさん、もうちょっと賢くならへんのか?」

ずん

「でもIN句が多すぎるとフルスキャンになるって、それ設計ミスじゃないのだ?」

でぇじょうぶ博士

「それがそうとも限らないでやんすよ。オプティマイザは最適解を選ぼうとするけど、時々『あれ?これ効率いいと思ったけど違ったわ』ってなることもあるでやんす。」

やきう

「つまりMySQLも人間と一緒で、『俺天才!』とか言いつつ凡ミスするタイプってことか。草生えるわ。」

ずん

「じゃあ解決策は何なのだ?IN句を減らせばいいって書いてたけど、それだけじゃ不安なのだ。」

でぇじょうぶ博士

「その通りでやんす!IN句を減らしたり、FORCE INDEXを使って特定のインデックスを指定することで回避できる場合もある。でも根本的には設計段階から考慮する必要がある問題でやんすね。」

やきう

「FORCE INDEXとか言われても一般人には呪文みたいやな。そもそもこんな状況作ったエンジニア誰やねん。責任者出てこいや!」

ずん

「責任者は...MySQL自身だったりしてな!ボクたちよりポンコツなのだ!」