Код ошибки MySQL: 1205. Блокировка тайм-аут ожидания во время обновления с внутренним соединением
Я пытаюсь обновить Time_Stamp
поле в моей таблице, simple_pack_data
, чтобы соответствовать значениям в одноименном поле в моем temp_data
Таблица. Каждая из таблиц имеет поля, называемые Test_Number
а также Time_Marker
, который я использую для INNER JOIN
столы. Time_Marker
это как отсчет чтения, где Time_Stamp
фактическое время с начала теста.
Я хочу обновить Time_Stamp
один тест за раз, поэтому код, который я пробовал, выглядит так:
UPDATE simple_pack_data s
INNER JOIN (
SELECT *
FROM temp_data t
WHERE t.Test = "3"
) AS tmp
ON s.Test_Number = tmp.Test_Number AND s.Time_Marker = tmp.Time_Marker
SET s.Time_Stamp = tmp.Time_Stamp
WHERE s.Test_Number = "3";
Когда я запускаю это, это занимает более 50 секунд, и я получаю ошибку 1205. Если я запускаю оператор выбора подобной структуры:
SELECT *
FROM simple_pack_data s
INNER JOIN (
SELECT *
FROM temp_data t
WHERE t.Test = "3"
) AS tmp
ON s.Test_Number = tmp.Test AND s.Time_Marker = tmp.Time_Marker
WHERE s.Test_Number = "3";
Это занимает гораздо меньше секунды, и я знаю, что соединение работает нормально. Обновление действительно так долго? Если да, есть ли способ изменить значение тайм-аута, чтобы оно могло пройти через него?
2 ответа
Эта ошибка полностью MySQL не делает, как следует. Лучшее решение - отказаться от MySQL, но, не имея этой возможности, этот пост в блоге по производительности помог мне обойти это в прошлом.
MySQL имеет много этих маленьких ошибок. Это похоже на работу в Access, половину времени программа собирается делать не то, что нужно, и не выдавать ошибку.
Попробуйте проверить, запущен ли на вашем сервере MySQL какой-либо процесс.
Чтобы убедиться в этом, запустите команду MySQL Client:
SHOW FULL PROCESSLIST;
Просмотрите столбцы идентификатора , состояния и информации и проанализируйте проблему. После того, как вы обнаружите проблему, завершите процесс с помощью:
KILL <PROCESS ID>;