2013-04-10 3 views
2

У меня есть запрос блокировки таблиц в MySQL (с использованием InnoDB):запрос блокировки таблицы, не может убить этот процесс

UPDATE table SET status = 2 WHERE status = 3 

Этот запрос вызвал затор на столе, и не может обойти его.

Я попытался сделать:

show processlist 

затем убить идентификатор процесса, но я не могу, кажется, убить его

Я пробовал:

kill 9588 

9588 идентификатор процесса.

Тогда я делаю show processlist Я все еще вижу тот же запрос в списке.

Как я могу заставить убить этот процесс, и почему этот запрос вызовет мертвую блокировку? как я могу это исправить?

+0

'убить -9' является командой операционной системы, а не команда MySQL. – tadman

+0

'UPDATE' будет заблокирован, если он не сможет получить доступ на запись к любой из строк с' status = 3'. Я бы удостоверился, что все транзакции совершили свои изменения, и у вас нет выкидывания 'select for update' – cmd

ответ

2

Команда KILL запрашивает завершение запроса, а состояние команды должно отображаться как Killed. Невозможно заставить кого-то убить и немедленно прекратить его.

В качестве последнего средства вы всегда можете отключить и перезагрузить серверный процесс mysqld.

1

вы должны попытаться убить mysql/sql service на вашем компьютере, а затем лоток, чтобы убить программу, в которой вы выполняете белый запрос.

надеюсь, что он будет работать для вас

+0

okay, это убило запрос. Спасибо, но я ударяю мертвыми замками! – Mike

+0

Возможно, я могу помочь вам с вашим запросом, если вы расскажете мне немного больше о своей базе данных и о том, что вы пытаетесь сделать. если вы не решили его струя. –

+0

Этот ответ может быть лучше, предоставляя примерную команду, чтобы убить mysql. – mopo922

12

При запуске экземпляра MySQL на RDS и хотите, чтобы убить нить или запрос по какой-то причине, вы обнаружите, вы не можете использовать KILL или mysqladmin kill, потому что вы не имеют разрешение на это.

RDS предоставляет хранимые процедуры с именем mysql.rds_kill и mysql.rds_kill_query, которые будут убивать поток и запрос соответственно. Чтобы убить поток, сначала используйте SHOW PROCESSLIST, чтобы получить список тем и найти идентификатор потока, который вы хотите убить. Если предположить, что идентификатор потока является 53512, а затем использовать

CALL mysql.rds_kill(53512) 

Источник: http://snak.tumblr.com/post/13856391340/killing-a-thread-or-query-of-mysql-running-on-rds

+0

Официальные документы по этому вопросу: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html – fideloper