web-dev-qa-db-ja.com

エラーコード:MySQLで1205ロック待機タイムアウトを超えました

InnoDBロック待機タイムアウトを120秒に設定しました。

以下のクエリを初めて実行すると、正常に機能します。ただし、2回目は、同じクエリに異なる値を指定すると、次のようになります。

エラーコード:1205ロック待機タイムアウトを超えました。トランザクションを再開してみてください

INSERT INTO PM_SPEC_DOC_APPROVE (
    SDA_SYS_NUM, 
    SDA_SPEC_SYS_NUM, 
    SDA_SYS_REV, 
    SDA_APPR_UID, 
    SDA_APPR_DATE, 
    SDA_CR_UID, 
    SDA_CR_DT, 
    SDA_SRNO, 
    SDA_NOTE) 
VALUES (
    '7414', 
    '24510', 
    NULL, 
    'E13462', 
    '2012-07-25 16:35:49', 
    'E13462', 
    '2012-07-25 16:35:49', 
    '3', 
    NULL)

MySQL v5.1を使用しています

3
user1409935

innodb_lock_wait_timeout

デフォルト値は50秒です。別のInnoDBトランザクションによってロックされている行にアクセスしようとするトランザクションは、次のエラーを発行する前に、最大でこの秒数の間ハングします。

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

ロック待機タイムアウトが発生すると、現在のステートメントは実行されません。現在のトランザクションはロールバックされません。 (MySQL 5.0.13まで、ロック待機タイムアウトが発生した場合、InnoDBはトランザクション全体をロールバックしました。 -innodb_rollback_on_timeout オプションでサーバーを起動することにより、この動作を復元できます。

デフォルトでは、トランザクションはロールバックされません。再試行するかロールバックするかに関係なく、このエラーの処理方法を決定するのはアプリケーションコードの責任です。

また、このエラーが発生した後、サーバーで「SHOW ENGINE INNODB STATUS」を発行すると、イベントの詳細を確認できます。

3
Mahesh Patil