タグ

lockに関するbluerabbitのブックマーク (2)

  • ロック待ちでハマる前に知りたかったMySQL InnoDBの行ロックとテーブルロックの挙動

    整合性をしっかりとらないといけない処理ではトランザクションをかけるのですが、どうもトランザクションのロック待ちでタイムアウトしてしまうことがあるようです。 java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction トランザクションでテーブル全体にロックがかかってしまう 要するに、「トランザクションを実行するためにロックを獲得しなければいけないが、他のコネクションがロックを握っていて、ロックが獲得できない」ということです。 これの根的な原因は何かと調べますと、InnoDBでトランザクションを使用するときに、行ロックではなく、テーブル全体にロックがかかってしまう場合がある、というところにたどり着きました。 「InnoDBで行ロック/テーブルロックになる条件」を見ながら、少し試してみます。 テーブ

    ロック待ちでハマる前に知りたかったMySQL InnoDBの行ロックとテーブルロックの挙動
  • MySQL :: MySQL 5.1 リファレンスマニュアル (オンラインヘルプ) :: 9.8.6 InnoDB 内で各種 SQL ステートメントによって設定されるロック

    Section Navigation      [Toggle] 9.8 InnoDB トランザクションモデルとロック9.8.1 InnoDB ロックモード 9.8.2 一貫性非ロック読み取り 9.8.3 SELECT ... FOR UPDATE と SELECT ... LOCK IN SHARE MODE ロック読み取り 9.8.4 InnoDB レコード、ギャップ、およびネクストキーロック 9.8.5 ネクストキーロックによるファントム問題の回避 9.8.6 InnoDB 内で各種 SQL ステートメントによって設定されるロック 9.8.7 暗黙的なトランザクションコミットとロールバック 9.8.8 デッドロックの検出とロールバック 9.8.9 デッドロックにどのように対処するか ロックする読み取り、UPDATE、または DELETE は通常、SQL ステートメントの処理の中で走査

    bluerabbit
    bluerabbit 2013/01/07
    ロックする読み取り、UPDATE、または DELETE は通常、SQL ステートメントの処理の中で走査されるすべてのインデックスレコード上にレコードロックを設定します。行を除外する WHERE 条件がステートメント内に存在するかどう
  • 1