Очистить транзакционный тупик?

Использование статуса showon innodb status. Я вижу, что wordpress имеет два взаимоблокировки. Я хотел бы очистить их, но я не вижу активного процесса для любого из этих cmds (IE что-то "убивает" и, надеюсь, вынуждает откат).

Я могу видеть идентификаторы потоков, идентификаторы запросов и т.д., но ничего, что я могу использовать, чтобы остановить работу.

Предложения о том, как разрешить это?

EDIT: Здесь (релевантная?) часть статуса:

------------------------
LATEST DETECTED DEADLOCK
------------------------
110327 10:54:14
*** (1) TRANSACTION:
TRANSACTION 9FBA099E, ACTIVE 0 sec, process no 14207, OS thread id 1228433728 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 376, 1 row lock(s)
MySQL thread id 12505112, query id 909492800 juno....edu 129....54 wordpress_user updating
DELETE FROM wp_options WHERE option_name = ''_site_transient_timeout_theme_roots''
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 4951009 page no 4 n bits 384 index `option_name` of table `wordpress_work`.`wp_options` trx id 9FBA099E lock_mode X waiting
Record lock, heap no 309 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
0: len 30; hex 5f736974655f7472616e7369656e745f74696d656f75745f7468656d655f; asc _site_transient_timeout_theme_; (total 35 bytes);
1: len 8; hex 0000000000002b6d; asc       +m;;

*** (2) TRANSACTION:
TRANSACTION 9FBA0995, ACTIVE 0 sec, process no 14207, OS thread id 1230031168 starting index read
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1248, 2 row lock(s)
MySQL thread id 12505095, query id 909492789 juno....edu 129.....54 wordpress_user updating
DELETE FROM wp_options WHERE option_name = ''_site_transient_timeout_theme_roots''
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 4951009 page no 4 n bits 384 index `option_name` of table `wordpress_work`.`wp_options` trx id 9FBA0995 lock_mode X locks rec but not gap
Record lock, heap no 309 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
0: len 30; hex 5f736974655f7472616e7369656e745f74696d656f75745f7468656d655f; asc   _site_transient_timeout_theme_; (total 35 bytes);
 1: len 8; hex 0000000000002b6d; asc       +m;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 4951009 page no 4 n bits 384 index `option_name` of table     `wordpress_work`.`wp_options` trx id 9FBA0995 lock_mode X waiting
Record lock, heap no 309 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
0: len 30; hex 5f736974655f7472616e7369656e745f74696d656f75745f7468656d655f; asc   _site_transient_timeout_theme_; (total 35 bytes);
1: len 8; hex 0000000000002b6d; asc       +m;;

*** WE ROLL BACK TRANSACTION (1)

Ответ 1

Учитывая, что некоторые данные о статусе "innodb" выглядят следующим образом:

---TRANSACTION 0 0, not started, process no 1024, OS thread id 140386055603968
MySQL thread id 197, query id 771 localhost marc
show innodb status

вы хотите сделать

KILL QUERY 771

чтобы убить один из двух запросов, которые зашли в тупик. Это убьет запрос, но оставьте соединение открытым. если вы хотите убить соединение, то вы сделали бы KILL 197.

Ответ 2

Я знаю, что это старо, но обычно, когда вы видите что-то подобное, потому что произошел тупик, и приложение, которое запустило тупик, уже давно перешло - жертва тупика получила предупреждение и либо потерпела неудачу, либо зарегистрировала ошибки или повторных попыток, и в любом случае перешел к другим продуктивным вещам. Обычно вам не нужно ничего делать, кроме как заглянуть в причину тупика и попытаться избежать будущих взаимоблокировок, если вы пишете программное обеспечение. Если вы просто используете программное обеспечение (например, Wordpress, если вы не работаете в Wordpress), вы можете сообщить о блокировке как возможную ошибку.

Ответ 3

Использование 'show engine innodb status' Я вижу, что wordpress имеет два взаимоблокировки... Предложения о том, как разрешить это?

Подумал, что я бы предоставил дополнительную информацию, которая помогла бы нам решить аналогичную проблему. Мы видели проблемы спящего режима Java, вызывающие блокируемые блокировки. Мы обнаружили блокировки, прочесывая выход через:

show engine innodb status;

Это выплескивает всю информацию. Соответствующий раздел находится в разделе TRANSACTIONS. В вашем выпуске важна проблема:

3 lock struct(s), heap size 1248, 2 row lock(s)
MySQL thread id 12505095, query id 909492789 juno....edu 129.....54 

Для нас это был # lock struct(s), который указывал на застрявший замок. Чтобы убить его, вам нужно выполнить, используя указанный "идентификатор потока #" - в этом случае:

kill 12505095

Это работало на AWS MySQL RDS, а также на локальном MySQL.


В нашем разделе "ОПЕРАЦИИ" мы также видим следующее:

---TRANSACTION 644793773, ACTIVE 21 sec
2 lock struct(s), heap size 360, 1 row lock(s)
MySQL thread id 217, OS thread handle 0x2aef097700, query id 10177 1.3.5.7 mpsp cleaning up

Мы ищем сообщения 2 lock struct(s) и ACTIVE 21 sec.