Estou executando uma tarefa a cada 5 minutos no MS SQL Server 2008 vinculada ao MySQL em outro servidor da rede. Funciona provavelmente 80% das vezes. Os 20% restantes resultam no travamento do MySQL e service mysql restart
é necessário.
Aqui estão algumas informações sobre a consulta que é executada a cada 5 minutos:
- ~32.000 linhas e 25 colunas
- Motor = MyISAM
- consulta (executada no SQL Server 2008) =
INSERT INTO MYSQLINTRANET...segments_temp SELECT * FROM ProjectTracking.dbo.segments;
- A falha na linha parece ser aleatória
- Os logs de erros estão vazios
É possível que o ProjectTracking.dbo.segments
bloqueio possa resultar em travamento?
Sem nenhum erro relatado no log de erros, para onde posso ir a partir daqui?
Responder1
Eu teria deixado isso como um comentário, mas quero citar algum código, então estou fazendo isso aqui. Eu começaria tentando rastrear onde o bloqueio está acontecendo. Na próxima vez que você tiver um bloqueio, reúna alguns dados. No servidor MS SQL execute o seguinte:
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
Analise o retorno e veja qual está o status. Está bloqueado? Está aguardando o retorno dos dados remotamente?
No servidor MySQL execute:
show full processlist;
Assim como:
SHOW ENGINE INNODB STATUS
A primeira listará os processos em execução, qual o status da sua consulta? O que diz que está esperando. A segunda irá ajudá-lo a descobrir se você está tendo um problema de impasse.