- 手元で再現しない・混む時間だけ起きる・数がずれる、などの「同時実行の型」に当てはまるか見たか
- 壊れたデータに、ほぼ同時(同じ秒)のリクエストが来ていないかログで確かめたか
- 重複や数のずれを、SQLの集計で数字として確かめたか
- 「SELECTしてからUPDATE/INSERT」している箇所をコードで探したか
- 「登録済みか確かめてからINSERT」している箇所がないか見たか
- 編集画面が、読み込んだ内容をまるごと上書き保存していないか見たか
- cronのバッチに二重起動防止(flockなど)があるか確かめたか
- 本番ではなく検証環境で、同時リクエストを送って再現を試したか
- 直し方を、一意制約・条件付き更新・行ロック・楽観ロックのどれか1つに決めたか
- 直したあと、同じ同時リクエストを流して壊れないことを確かめたか
全部を一度にそろえなくても大丈夫です。まずは「同時実行を疑ってみる」と「重複チェックのSQLを1本流す」の2つだけで、見えなかった原因にぐっと近づけます。
この内容は記事「同時実行で壊れるバグの見つけ方|排他制御の漏れを探す4つの手順」のチェックリストです。印刷してそのままお使いいただけます。 / 無料ツール一覧へ