KILL
KILL thread_id
Каждое соединение с mysqld
запускается в отдельном потоке. При помощи
команды SHOW PROCESSLIST
можно просмотреть список запущенных потоков, а
при помощи команды KILL thread_id
- удалить поток.
Если у вас есть привилегия PROCESS
, можно просмотреть все потоки. Обладая
привилегией SUPER
, можно удалять любые потоки. В противном случае можно
просматривать и удалять только свои собственные потоки.
Для просмотра и удаления потоков можно также применять команды mysqladmin
processlist
и mysqladmin kill
.
При использовании команды KILL
для потока устанавливается специальный флаг
kill flag
.
В большинстве случаев удаление потока занимает некоторое время, поскольку этот флаг проверяется с определенным интервалом.
SELECT
, ORDER BY
и GROUP BY
флаг проверяется только после
считывания блока строк. Если установлен флаг удаления, то выполнение
оператора будет отменено.
ALTER TABLE
флаг удаления проверяется перед
считыванием каждого блока строк из исходной таблицы. Если флаг
установлен, то выполнение команды отменяется и временная таблица
удаляется. При выполнении команд UPDATE
и DELETE
флаг
удаления проверяется после каждого считывания блока, а также после
каждого обновления или удаления строки. Если флаг удаления установлен,
то выполнение оператора отменяется. Обратите внимание: если не
используются транзакции, то отменить изменения будет невозможно!
GET_LOCK()
будет отменен при помощи NULL
.
INSERT DELAYED
быстро сбросит все строки, которые он содержит в
памяти и будет удален.
Locked
), то
блокировка таблицы будет быстро отменена.
User Comments
Would be advantageous to have an immediate kill command - currently have a v3.23 db that is locked up (I believe waiting on a thread) the thread cannot be killed so the only hope I have is to kill the whole db :(
I am using version 4.0.15-standard and I had the same problem! A thread was stuck in the "Killed" state for 12000 seconds. I gave in and killed the server, then had to endure a nasty rollback.
Same problem here:
mysqladmin Ver 8.40 Distrib 4.0.16, for sun-solaris2.8 on sparc
I am trying to kill a query, been jammed to state: 'Repair with keycache' and command 'Killed' for 15655 seconds now and still counting.
I dont care if that table crash and have to fix it, but I want to kill that query no matter what I cannot shut down the whole mysql process or i'll have to fix hundreds of other tables.
Does anyone know how to do that ?
Here the sample script to kill automatic the mysql user. I used this and my mysql server keep alive and not hang again.
$result = mysql_query("SHOW FULL PROCESSLIST");
while ($row=mysql_fetch_array($result)) {
$process_id=$row["Id"];
if ($row["Time"] > 200 ) {
$sql="KILL $process_id";
mysql_query($sql);
}
}
Add your own comment.