Я запускаю задачу каждые 5 минут на MS SQL Server 2008, которая ссылается на MySQL на другом сервере в сети. Это работает, вероятно, 80% времени. Оставшиеся 20% приводят к зависанию MySQL, и требуется service mysql restart
.
Вот некоторая информация о запросе, который выполняется каждые 5 минут:
- ~32 000 строк и 25 столбцов
- Движок = MyISAM
- запрос (запущен из SQL Server 2008) =
INSERT INTO MYSQLINTRANET...segments_temp SELECT * FROM ProjectTracking.dbo.segments;
- Отказ строки, по-видимому, является случайным
- Журналы ошибок пусты
Возможно ли, что он ProjectTracking.dbo.segments
может быть заблокирован, что приведет к зависанию?
Куда мне двигаться дальше, если в журнале ошибок нет сообщений об ошибках?
решение1
Я бы оставил это в качестве комментария, но мне хочется процитировать код, поэтому я делаю это здесь. Я бы начал с попытки отследить, где происходит блокировка. В следующий раз, когда у вас будет блокировка, соберите какие-нибудь данные. На сервере 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
Первый выведет список запущенных процессов, каков статус вашего запроса? Что он говорит, что ожидает. Второй поможет вам найти, если у вас есть проблема взаимоблокировки.