Einige Sql sind nicht gut geschrieben. Manchmal kostet eine Suche in Anwendungen Stunden. Wenn eine Anwendung (z.B. eine Website) eine Abfrage stellt, die lange Zeit läuft, muss ich die Mysql neu starten. Wie kann ich die Ausführungszeit einer Sql-Abfrage in der Datenbank begrenzen?
Antworten
Zu viele Anzeigen?Um eine Abfrage in MySQL nach einer langen Ausführungszeit automatisch zu beenden:
-
Erstellen Sie eine gespeicherte Prozedur als:
DECLARE CURSOR cur1 FOR SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Query' AND TIME > 120;
dann innerhalb der Schleife von curosr do:
FETCH ID INTO @var_kill_id; KILL QUERY @var_kill_id;
-
erstellen.
EVENT FOR EVERY 5 SECONDS
und einfachCALL
die obige Prozedur darin.
Hinweis: KILL QUERY beendet nur die Abfrage und die MySQL-Verbindung wird nicht unterbrochen. siehe aquí .
Wenn möglich, können Sie auch Twitters mysql-Fork ausprobieren, der "max_statement_time" unterstützt und eine Abfrage, die diesen Wert überschreitet, mit einer Granularität von einer Millisekunde abbricht.
Véase http://engineering.twitter.com/2012/04/mysql-at-twitter.html y https://github.com/twitter/mysql/wiki/Statement-Timeout
Original Quelle .
Die einzige Möglichkeit ist, eine andere Sitzung zu öffnen, indem Sie PROZESSLISTE ANZEIGEN und dann TODESANFRAGE derjenige, den Sie kündigen möchten.
Sie können die mysqladmin Befehlszeilentool, um diese Befehle auszuführen.
Dies ist vielleicht nicht die exakte Lösung für die Einschränkung der SQL-Ausführungszeit, aber ich denke, es wird Ihnen helfen. Sie müssen Ihren MySQL-Server nicht neu starten.
Versuchen Sie es mit einem MySQL GUI Tool wie SQLyog . Dort können Sie die Ausführung der Abfrage manuell stoppen (überprüfen Sie die X-Schaltfläche im Screenshot), wenn Sie der Meinung sind, dass sie zu lange dauert.
Außerdem können Sie den Abfrageprozess auch beenden, indem Sie auf die Prozessliste zugreifen. Überprüfen Sie die beiden anderen Bilder im Screenshot mit den Schritten zum Beenden von Prozessen...
Ich hoffe, es hilft....