Ich bin auf der Suche nach einem gut getesteten Bash-Skript (oder einer alternativen Lösung), um zu vermeiden, dass max_connection erschöpft ist. Ich weiß, dass es die Symptome bekämpft, brauche aber wirklich ein solches Skript als kurzfristige Lösung.
linux
mysql
query
kill-process
alfish
quelle
quelle
Antworten:
Besuche pt-Kill - Befehl aus dem Percona Toolkit .
und ... fangen Sie an, Ihr System zu überwachen - Munin , Kakteen mit besseren Kakteenvorlagen für MySQL , alles, damit Sie eine Vorstellung davon bekommen, was los ist. Das Protokollieren langsamer mysql-Abfragen ist ebenfalls eine gute Idee.
quelle
Wenn Sie MySQL 5.1 haben, dessen Prozessliste sich in der INFORMATION_SCHEMA befindet, können Sie dies tun, um die KILL QUERY-Befehle in großen Mengen aus dem mysql-Client für Abfragen zu generieren, die länger als 20 Minuten (1200 Sekunden) ausgeführt werden:
Sie können WHERE-Klauseln für das INFO-Feld verwenden, um nach einer bestimmten Abfrage zu suchen, das TIME-Feld für lang laufende Abfragen oder das DB-Feld für eine bestimmte Datenbank.
Wenn Sie root @ localhost sind, sollten Sie über die folgenden Berechtigungen verfügen, um dies auszuführen
Sie können dies wie folgt überprüfen:
Hier ist eine andere Variante:
Übrigens: Sie haben keine myDB angegeben, da ich explizit aus information_schema.processlist als vollständig qualifizierten Tabellennamen gelesen habe.
Hier ist eine Demonstration dessen, was Sie sehen sollten. In diesem Beispiel werde ich den KILL-Befehl aller Prozesse wiederholen, deren Zeit> 20000 Sekunden ist:
Ich mache diese Technik seit 5 Jahren. Tatsächlich habe ich diese Antwort letztes Jahr beim DBA StackExchange eingereicht und sie wurde akzeptiert .
quelle
Ich habe hier den folgenden Code gefunden :
Update 2013-01-14: Es gab einen anonymen Hinweis darauf, dass dies möglicherweise gefährlich ist und auch Replikationsprozesse zum Erliegen bringen kann. So verwenden Sie auf eigenes Risiko:
quelle
Ab MySQL 5.7 können Sie die Variable max_execution_time verwenden, um dies automatisch für alle "SELECT" -Leseabfragen zu erledigen.
quelle
Ich würde keine bash-Lösungen ausprobieren, wenn Sie die Betriebszeit mögen!
Wenn Sie Zugriff auf den Code haben , können Sie tatsächlich die maximale Ausführungszeit auf SELECT - Anweisungen gesetzt mit der Methode skizziert hier :
Andernfalls auf dem Server:
/programming/415905/how-to-set-a-maximum-execution-time-for-a-mysql-query
Installieren Sie pt-kill:
Machen Sie einen Schnappschuss Ihrer Prozessliste:
Testen Sie pt-kill auf dem Schnappschuss:
Stellen Sie sicher, dass die Spielregeln Ihrem Fall entsprechen. Diese oben genannten Befehle beenden alle Execute-Anweisungen innerhalb von 45 Sekunden. Wenn Sie sicher sind, ändern Sie diesen Befehl und führen Sie ihn aus, um die Anweisung im Abstand von 10 Sekunden auszuführen:
quelle