Ich führe alle 5 Minuten eine Aufgabe auf MS SQL Server 2008 aus, die eine Verbindung zu MySQL auf einem anderen Server im Netzwerk herstellt. Das funktioniert wahrscheinlich 80 % der Zeit. In den restlichen 20 % bleibt MySQL hängen und ein service mysql restart
ist erforderlich.
Hier einige Informationen zur Abfrage, die alle 5 Minuten ausgeführt wird:
- ~32.000 Zeilen und 25 Spalten
- Engine = MyISAM
- Abfrage (ausgeführt von SQL Server 2008) =
INSERT INTO MYSQLINTRANET...segments_temp SELECT * FROM ProjectTracking.dbo.segments;
- Zeilenfehler scheinen zufällig zu sein
- Fehlerprotokolle sind leer
Ist es möglich, dass es ProjectTracking.dbo.segments
gesperrt ist und sich aufhängt?
Wie kann ich weitermachen, wenn im Fehlerprotokoll keine Fehler gemeldet werden?
Antwort1
Ich hätte das als Kommentar hinterlassen, aber ich möchte Code zitieren, also mache ich es stattdessen hier. Ich würde damit beginnen, herauszufinden, wo die Sperre auftritt. Wenn Sie das nächste Mal eine Sperre haben, sammeln Sie einige Daten. Führen Sie auf dem MS SQL-Server Folgendes aus:
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
Analysieren Sie die Rückgabe und prüfen Sie den Status. Ist sie blockiert? Wartet sie auf die Rückgabe von Daten von der Remote-Remote?
Führen Sie auf dem MySQL-Server Folgendes aus:
show full processlist;
Sowie:
SHOW ENGINE INNODB STATUS
Im ersten werden die laufenden Prozesse aufgelistet. Wie ist der Status Ihrer Abfrage? Worauf wird gewartet? Im zweiten können Sie herausfinden, ob ein Deadlock-Problem vorliegt.