MySQL-Kill-Befehl – ​​Verwendungshandbuch

MySQL-Kill-Befehl – ​​Verwendungshandbuch
KILL [VERBINDUNG | ABFRAGE] Prozesslisten-ID

In MySQL wird jede Verbindung als separater Thread ausgeführt. Mit der Anweisung KILL processlist_id können Sie die Ausführung der Anweisung beenden.

KILL erlaubt optionale CONNECTION- oder QUERY-Modifikatoren:

  • KILL CONNECTION KILL ist dasselbe wie kein Modifikator: Beenden Sie die mit der angegebenen Prozesslisten-ID verknüpfte Verbindung, nachdem alle von dieser Verbindung ausgeführten Anweisungen beendet wurden.
  • KILL QUERY beendet die aktuell auf der Verbindung ausgeführte Anweisung, lässt die Verbindung selbst jedoch intakt.

Verwenden Sie „show processlist“, um alle IDs anzuzeigen

Verwendung des Kill-Befehls

Wenn unsere Anwendung SQL ausführt und die Ausführung von SQL aufgrund einer Sperrauswahl für die Aktualisierung oder einer zu großen Zahl in der Datenbank hängen bleibt, was sollen wir tun, wenn wir SQL abbrechen möchten? Wir können den Befehl kill verwenden, um den MySQL-Thread zu stoppen oder die SQL-Ausführung abzubrechen. Sollten wir den Befehl kill threadId oder den Befehl kill query theadId ausführen?

Der größte Unterschied zwischen Kill und Kill Query besteht darin, ob alle auf der Verbindung ausgeführten SQLs abgebrochen werden sollen, also ob der Thread geschlossen werden soll. Wenn der Thread geschlossen wird, entspricht dies dem Schließen der Anweisung in JDBC.

-- Die Datenbank sperrt den Datensatz mit acctno=13 und führt die folgende Update-Anweisung aus: update test set acctname ='12' where acctno=13

Zeigen Sie die Prozessliste an, um die Thread-ID anzuzeigen, die SQL ausführt.

Wenn Sie die SQL-Ausführung abbrechen möchten, können Sie den Befehl kill query 407 verwenden, um die SQL-Ausführung abzubrechen. Nach der Ausführung verschwindet der 407-Thread nicht. Wenn die Verbindung eine SQL-Ausführung durchführt, wird sie weiterhin ausgeführt; wenn Sie jedoch kill 407 verwenden, verschwindet der 407-Thread. Bitte beachten Sie bei der Verwendung den Unterschied zwischen beiden.

Zusätzlich zur Anzeige der Thread-ID über die Anzeige der Prozessliste können Sie auch programmgesteuerte Methoden verwenden, um die Thread-ID abzurufen.

 Verbindung Verbindung = getConnection();
 ((MysqlConnection)Verbindung).getSession().getThreadId();

Anweisungsabbruchmethode

Wenn wir die Datenbank mit JDBC-Programmierung betreiben, können wir zum Abbrechen auch die Cancel-Methode des Statement-Objekts verwenden. Der MySQL-Treiber sendet auch intern die Kill-Query-ThreadId-Anweisung. Der Quellcode der Cancel-Methode des MySQL-Treibers

 öffentliche void cancel() wirft SQLException {
    versuchen {
      wenn (this.query.getStatementExecuting().get()) {
        wenn (!this.isClosed && this.connection != null) {
          JdbcConnection cancelConn = null;
          Objekt cancelStmt = null;

          versuchen {
            HostInfo hostInfo = this.session.getHostInfo();
            Zeichenfolge Datenbank = hostInfo.getDatabase();
            String-Benutzer = StringUtils.isNullOrEmpty(hostInfo.getUser()) ? "" : hostInfo.getUser();
            String-Passwort = StringUtils.isNullOrEmpty(hostInfo.getPassword()) ? "" : hostInfo.getPassword();
            NativeSession neueSession = neue NativeSession(this.session.getHostInfo(), this.session.getPropertySet());
            newSession.connect(hostInfo, Benutzer, Passwort, Datenbank, 30000, neuer TransactionEventHandler() {
              public void Transaktion abgeschlossen () {
              }

              public void TransaktionBeginnen() {
              }
            });
            //Der Treiber verwendet den Befehl KILL QUERY + threadId, um newSession.sendCommand((new NativeMessageBuilder()).buildComQuery(newSession.getSharedSendPacket(), "KILL QUERY " + this.session.getThreadId()), false, 0); abzubrechen.
            dies.setCancelStatus(CancelStatus.CANCELED_BY_USER);
          } Fang (IOException var13) {
            wirf SQLExceptionsMapping.translateException(var13, this.exceptionInterceptor);
          Endlich
            if (cancelStmt != null) {
              ((Anweisung)cancelStmt).close();
            }

            wenn (cancelConn != null) {
              ((JdbcConnection)cancelConn).schließen();
            }

          }
        }

      }
    } Fang (CJException var15) {
      wirf SQLExceptionsMapping.translateException(var15, this.getExceptionInterceptor());
    }
  }

Ausführung des Clienttools

Das Client-Tool bricht die Ausführung nach der Ausführung von SQL ab. Einige Tools senden Kill-Befehle und andere senden Kill-Abfrageanweisungen. Sie können das Paketerfassungstool verwenden, um zu überprüfen, welche Anweisungen das Navicat-Tool sendet. Das empfohlene Paketerfassungstool ist Wireshark, das sehr leistungsstark ist.

Es handelt sich um einen Kill-Befehl und die entsprechende Thread-ID ist 407. Einige Tools senden auch einen Kill-Query-Befehl.

Oben finden Sie den detaillierten Inhalt der Gebrauchsanweisung für den MySQL-Kill-Befehl. Weitere Informationen zum MySQL-Kill-Befehl finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Ausführungsprinzips des MySQL-Kill-Befehls
  • Lösung für das versehentliche Löschen von Daten in MySQL und Kill-Anweisungsprinzip
  • Mysql verwendet den Kill-Befehl, um das Deadlock-Problem zu lösen (eine bestimmte SQL-Anweisung, die ausgeführt wird, abzubrechen).
  • Lösung für MySQL Slave, der Oom-Killer auslöst
  • MySQL OOM-Serie 3: Befreien Sie sich vom Pech, dass MySQL abgeschafft wurde
  • MySQL OOM System 2 OOM-Killer
  • pt-kill-Methode des Percona-Toolkits zum Beenden von MySQL-Abfragen oder -Verbindungen
  • Batch-Kill-SQLs, die für eine lange Zeit in MySQL ausgeführt werden
  • Gründe, warum MySQL Kill Threads nicht beenden kann

<<:  Erste Schritte: Eine kurze Einführung in die grundlegenden Tags und Attribute von HTML

>>:  Detaillierte Erläuterung der Überwachung des Jenkins-Prozesses basierend auf Zabbix

Artikel empfehlen

Dieser Artikel hilft Ihnen, den Lebenszyklus in Vue zu verstehen

Inhaltsverzeichnis 1. vorErstellen & erstellt...

Verwenden Sie die Befehle more, less und cat in Linux, um Dateiinhalte anzuzeigen

Unter Linux können die Befehle cat, more und less...

Die Verwendung und der Unterschied zwischen vue3 watch und watchEffect

1. Hörer ansehen Vorstellung der Uhr importiere {...

So verwenden Sie Nginx, um domänenübergreifende Front-End-Probleme zu lösen

Vorwort Bei der Entwicklung statischer Seiten, wi...

js, um einfache Lupeneffekte zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

Ein Artikel, der Ihnen hilft, die Grundlagen von VUE zu verstehen

Inhaltsverzeichnis Was ist VUE Kern-Plugins in Vu...

Tabelle td Bild horizontal und vertikal zentriert Code

HTML Code: Code kopieren Der Code lautet wie folgt...

Detaillierte Erläuterung der Angular-Routing-Grundlagen

Inhaltsverzeichnis 1. Routing-bezogene Objekte 2....

Der Unterschied zwischen Float- und Positionsattributen im CSS-Layout

CSS-Layout – Positionseigenschaft Das Positionsat...

So implementieren Sie Lastenausgleich in MySQL

Vorwort MySQL ist ein schnelles, leistungsstarkes...

Informationen zur ROS2-Installation und zur Verwendung der Docker-Umgebung

Inhaltsverzeichnis Warum Docker verwenden? Docker...

MySQL 5.7.20 Win64 Installations- und Konfigurationsmethode

mysql-5.7.20-winx64.zipInstallationspaket ohne In...

Detaillierte Erklärung der Funktion und Verwendung der DOCTYPE-Deklaration

1. Browser-Rendering-Modus und Doctype Einige Web...

MySQL-Fall beim Gruppieren nach Beispiel

Eine MySQL-ähnliche PHP-Switch-Case-Anweisung. wä...