Estoy ejecutando una tarea cada 5 minutos en MS SQL Server 2008 que se vincula a MySQL en otro servidor de la red. Probablemente funcione el 80% del tiempo. El 20% restante provoca que MySQL se cuelgue y service mysql restart
se requiere a.
Aquí hay información sobre la consulta que se ejecuta cada 5 minutos:
- ~32.000 filas y 25 columnas
- Motor = MyISAM
- consulta (ejecutada desde SQL Server 2008) =
INSERT INTO MYSQLINTRANET...segments_temp SELECT * FROM ProjectTracking.dbo.segments;
- El fallo de la fila parece ser aleatorio
- Los registros de errores están vacíos
¿Es posible que se ProjectTracking.dbo.segments
pueda bloquear y provocar un bloqueo?
Sin ningún error reportado en el registro de errores, ¿adónde puedo ir desde aquí?
Respuesta1
Habría dejado esto como comentario pero quiero citar algún código, así que lo haré aquí. Empezaría por intentar localizar dónde se está produciendo el bloqueo. La próxima vez que tengas un candado, reúne algunos datos. En el servidor MS SQL ejecute lo siguiente:
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
Analice la devolución y vea cuál es el estado. ¿Está bloqueado? ¿Está esperando que los datos regresen desde el control remoto?
En el servidor MySQL ejecute:
show full processlist;
Así como también:
SHOW ENGINE INNODB STATUS
El primero enumerará los procesos en ejecución, ¿cuál es el estado de su consulta? ¿Qué dice? Está esperando. El segundo le ayudará a descubrir si tiene un problema de bloqueo.