【MySQL】 トランザクションがロックを取得したままになってしまった


普通に実行できていたupdate文が下記エラーで実行できなくなってしまった。


DEBUG 2014-05-09 20:05:22,837 [http-8080-1] END hogehogeService#update(hogehoge@554dba7f) Throwable:org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外(SQL=[update hogehoge set MEMBER_ID = ? where ID = ?], Message=[[ESSR0072]SQLで例外(SQL=[update hogehoge set MEMBER_ID = ? where ID = ?], Message=[1205], ErrorCode=41000, SQLState={3})が発生しました : [SQLで例外(Message=[Lock wait timeout exceeded; try restarting transaction], ErrorCode=1205, SQLState=41000)が発生しました。], [Lock wait timeout exceeded; try restarting transaction], ErrorCode=1205, SQLState=41000)が発生しました

どうやらトランザクションをロックしたまま異常終了したプロセスがあるようだ。
仕方ないのでロックを強制解除する。

まずはロッグしているthreadを確認する

mysql> show innodb status\G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
140509 20:08:38 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 18 seconds
———-
SEMAPHORES
———-
OS WAIT ARRAY INFO: reservation count 44880, signal count 44793
Mutex spin waits 0, rounds 1180700, OS waits 225
RW-shared spins 102915, OS waits 43819; RW-excl spins 1038, OS waits 835

————
TRANSACTIONS
————
Trx id counter 0 24149739
Purge done for trx’s n:o < 0 24149713 undo n:o < 0 0 History list length 22 LIST OF TRANSACTIONS FOR EACH SESSION: ---TRANSACTION 0 0, not started, process no 3348, OS thread id 2965154720 MySQL thread id 79128, query id 8042878 localhost root show innodb status ---TRANSACTION 0 24149724, ACTIVE 476 sec, process no 3348, OS thread id 2967681952 MySQL thread id 79116, query id 8042590 192.168.10.10 user ---TRANSACTION 0 24149714, ACTIVE 853 sec, process no 3348, OS thread id 2968685472 11 lock struct(s), heap size 1024, 4 row lock(s), undo log entries 12 MySQL thread id 79097, query id 8042409 192.168.10.10 user Trx read view will not see trx with id >= 0 24149715, sees < 0 24149684

——–
FILE I/O
——–
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (write thread)
Pending normal aio reads: 0, aio writes: 0,
ibuf aio reads: 0, log i/o’s: 0, sync i/o’s: 0
Pending flushes (fsync) log: 0; buffer pool: 0
8070530 OS file reads, 507147 OS file writes, 423429 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s
————————————-
INSERT BUFFER AND ADAPTIVE HASH INDEX
————————————-
Ibuf: size 1, free list len 5, seg size 7,
1575259 inserts, 1575259 merged recs, 16953 merges
Hash table size 34679, node heap has 23 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s

LOG

Log sequence number 30 221142919
Log flushed up to 30 221142919
Last checkpoint at 30 221142919
0 pending log writes, 0 pending chkp writes
401480 log i/o’s done, 0.00 log i/o’s/second
———————-
BUFFER POOL AND MEMORY
———————-
Total memory allocated 25038214; in additional pool allocated 1048576
Dictionary memory allocated 4752960
Buffer pool size 512
Free buffers 0
Database pages 489
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages read 55138303, created 74735, written 187568
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
————–
ROW OPERATIONS
————–
0 queries inside InnoDB, 0 queries in queue
2 read views open inside InnoDB
Main thread process no. 3348, id 2979978144, state: waiting for server activity
Number of rows inserted 7342806, updated 156440, deleted 410472, read 309046394
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
—————————-
END OF INNODB MONITOR OUTPUT
============================

1 row in set, 1 warning (0.00 sec)

TRANSACTIONSの項目にて「ACTIVE 」になっているthreadのidを確認する。
そしてそれをkillする。

mysql> kill 79116;
Query OK, 0 rows affected (0.00 sec)

mysql> kill 79097;
Query OK, 0 rows affected (0.00 sec)

これでロックを無理やり解除する事ができました。
私はテスト環境だったので何も考えずにkillしましたが
本番で行う場合は自己責任でお願いします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です