Я выполняю задачу каждые 5 минут на SQL Server MS 2008, который связывается с MySQL на другом сервере в сети. Это работает, вероятно, 80% времени. Остающиеся 20% приводят к зависанию MySQL и a service mysql restart
требуется.
Вот некоторая информация о запросе, который работает каждые 5 минут:
INSERT INTO MYSQLINTRANET...segments_temp SELECT * FROM ProjectTracking.dbo.segments;
Действительно ли возможно что ProjectTracking.dbo.segments
мог быть заблокирован, приведя к подвешиванию?
Без каких-либо ошибок, о которых сообщают, в журнале ошибок, куда я могу пойти отсюда?
Я бы оставил это как комментарий, но я хочу процитировать код, поэтому я делаю это здесь. Я бы начал с попытки отследить, где происходит блокировка. В следующий раз, когда у вас будет блокировка, соберите некоторые данные. На сервере MS SQL выполните следующее:
USE master
select text,wait_time,blocking_session_id AS "Block",
percent_complete, * from sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 order by start_time asc
Проанализируйте возврат и посмотрите, каков статус. Это заблокировано? Ожидает ли он возврата данных с удаленного компьютера?
На сервере mySQL запустите:
show full processlist;
Также как:
SHOW ENGINE INNODB STATUS
В первом будут перечислены запущенные процессы, каков статус вашего запроса? Что там написано, он ждет. Второй поможет определить, возникла ли проблема с тупиком.