Informationen zu MySQL-Vorgängen abfragen Status anzeigen – Zeigt alle Informationen zu MySQL-Vorgängen an. Status anzeigen, z. B. „com_insert%“; – Ruft die Anzahl der MySQL-Einfügungen ab. Status wie „com_delete%“ anzeigen; – Anzahl der Löschungen in MySQL abrufen; Status wie „com_select%“ anzeigen; – Anzahl der MySQL-Abfragen abrufen; Status wie „Betriebszeit“ anzeigen; -- Die Laufzeit des MySQL-Servers abrufen. Status wie „Verbindungen“ anzeigen; -- Die Anzahl der MySQL-Verbindungen abrufen. Abfrageinformationen zu MySQL-Operationen zeigen den Status [session|global] wie … an. Wenn Sie [session|global] nicht schreiben, ist die Standardeinstellung „session“ und es wird nur die Ausführung des aktuellen Fensters abgerufen. Wenn Sie alles sehen möchten (vom MySQL-Start bis jetzt, sollten Sie „global“ verwenden)
Langsame Abfrage Wenn die Leistung von MySQL nachlässt, aktivieren Sie die langsame Abfrage, um herauszufinden, welche SQL-Anweisung die langsame Antwort verursacht, und analysieren Sie sie. Natürlich führt das Aktivieren langsamer Abfragen zu CPU-Ausfällen und einem IO-Overhead bei Protokolldatensätzen. Daher müssen wir das Protokoll langsamer Abfragen gelegentlich aktivieren, um den MySQL-Ausführungsstatus zu prüfen. Eine langsame Abfrage kann alle SQL-Anweisungen aufzeichnen, die länger als die „long_query_time“ ausgeführt werden. Dies dient dazu, langsame SQL-Anweisungen zu finden und zu optimieren. Variablen wie „%slow%“ anzeigen; – Ob langsame Abfragen aktiviert werden sollen; Status wie „%slow%“ anzeigen; – Abfrage des langsamen SQL-Abfragestatus; Variablen wie „long_query_time“ anzeigen; – Langsame Abfragezeit Einstellung zum Aktivieren langsamer Abfragen mysql> Variablen wie „long_query_time“ anzeigen; -- Standardmäßig betrachtet MySQL 10 Sekunden als langsame Abfrage+-----------------+-----------+ | Variablenname | Wert | +-----------------+------------+ | lange Abfragezeit | 10.000000 | +-----------------+------------+ mysql> set long_query_time=1; -- Ändern Sie die langsame Abfragezeit, nur gültig für die aktuelle Sitzung; mysql> set global slow_query_log='ON';-- Langsame Abfrage aktivieren, global hinzufügen, andernfalls wird ein Fehler gemeldet; Sie können auch die MySQL-Konfigurationsdatei my.ini [windows] / my.cnf [Linux] in der Konfigurationsdatei ändern und hinzufügen. Beachten Sie, dass es nach [mysqld] hinzugefügt werden muss. slow_query_log = on – Protokollierung aktivieren; slow_query_log_file = /data/f/mysql_slow_cw.log – Protokolldatei zum Aufzeichnen von Protokollen; Hinweis: Der absolute Pfad muss in das Fenster geschrieben werden, z. B. D:/wamp/bin/mysql/mysql5.5.16/data/show-slow.log long_query_time = 2 – die längste Abfragezeit in Sekunden; log-queries-not-using-indexes – gibt an, dass Abfragen, die keine Indizes verwenden, protokolliert werden Verwenden langsamer Abfragen Beispiel 1: mysql> wähle sleep(3); mysql> Status wie „%slow%“ anzeigen; +---------------------+--------+ | Variablenname | Wert | +---------------------+--------+ | Langsame Startthreads | 0 | | Langsame Abfragen | 1 | +---------------------+--------+ -- Slow_queries Es gibt insgesamt eine langsame Abfrage Beispiel 2: Verwenden Sie gespeicherte Prozeduren, um eine große Datenbank zum Testen aufzubauen. Datenaufbereitung CREATE TABLE Abteilung( deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 Kommentar 'Nummer', dname VARCHAR(20) NOT NULL DEFAULT "" Kommentar 'Name', loc VARCHAR(13) NOT NULL DEFAULT "" Kommentar 'Standort' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 Kommentar „Abteilungstabelle“; Tabelle erstellen emp (empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, ename VARCHAR(20) NOT NULL DEFAULT "" Kommentar 'Name', job VARCHAR(9) NOT NULL DEFAULT "" Kommentar 'Arbeit', mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 Kommentar 'Übergeordnete Nummer', hiredate DATE NOT NULL Kommentar 'Datum des Stelleneintritts', sal DECIMAL(7,2) NOT NULL Kommentar 'Gehalt', comm DECIMAL(7,2) NOT NULL Kommentar 'Dividende', deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 Kommentar 'Abteilungsnummer' )ENGINE=MyISAM DEFAULT CHARSET=utf8 Kommentar „Mitarbeitertabelle“; Tabelle erstellen salgrade( Note MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 Kommentar 'Note', losal DECIMAL(17,2) NOT NULL Kommentar 'Mindestlohn', hisal DECIMAL(17,2) NOT NULL Kommentar 'Höchstes Gehalt' )ENGINE=MyISAM DEFAULT CHARSET=utf8 Kommentar „Gehaltsstufentabelle“; Einfügen in Salgrade-Werte (1.700.1200); EINFÜGEN IN Salgrade-WERTE (2,1201,1400); EINFÜGEN IN „Salgrade“-WERTE (3,1401,2000); EINFÜGEN IN Salgrade-WERTE (4,2001,3000); EINFÜGEN IN Salgrade-WERTE (5,3001,9999); Trennzeichen $ Funktion rand_num() erstellen gibt tinyint(6) zurück. LIEST SQL-DATEN beginnen Deklarieren Sie return_num tinyint(6) als Standard 0; setze return_num = floor(1+rand()*30); Rückgabewert_Nummer; Ende $ Trennzeichen $ Funktion rand_string(n INT) erstellen gibt varchar(255) zurück. LIEST SQL-DATEN beginnen deklarieren Sie chars_str varchar(100) als Standard „abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ“; Deklarieren Sie return_str varchar(255) als Standard ''; deklariere i als int default 0; während ich setze return_str = concat(return_str,substring(chars_str,floor(1+rand()*52),1)); setze i = i + 1; Ende während; Rückgabe return_str; Ende $ Trennzeichen $ Prozedur insert_emp erstellen(in start int(10),in max_num int(10)) beginnen deklariere i als int default 0; #set autocommit =0 Setzen Sie Autocommit auf 0 und schalten Sie die automatische Übermittlung aus. setze Autocommit = 0; wiederholen setze i = i + 1; in emp-Werte einfügen ((start+i),rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num()); bis i = max_num Wiederholung beenden; begehen; Ende $ rufen Sie insert_emp(1,4000000) auf; SELECT * FROM `emp`, wobei ename wie '%mQspyv%' ist; – 1,163 s # Zeit: 150530 15:30:58 -- Die Abfrage erfolgte am 30.05.2015 um 15:30:58 # User@Host: root[root] @ localhost [127.0.0.1] -- Wer ist der Abfragende und auf welchem Host? # Abfragezeit: 1,134065 Sperrzeit: 0,000000 Gesendete Zeilen: 8 Untersuchte Zeilen: 4000000 -- Query_time: die Gesamtzeit, die für die Abfrage benötigt wurde, Lock_time: die Zeit, für die die Tabelle während der Abfrage gesperrt ist, Rows_sent: die Anzahl der zurückgegebenen Zeilen, Rows_examined: das Ergebnis, das nach dem Scannen von 4 Millionen Datenzeilen erzielt wurde; SET timestamp=1432971058; – Der Zeitstempel, wann die langsame Abfrage aufgetreten ist; SELECT * FROM `emp`, wobei ename wie '%mQspyv%' ist; Nachdem die langsame Abfrage aktiviert wurde, können täglich mehrere GB an langsamen Abfrageprotokollen anfallen. Zu diesem Zeitpunkt ist eine manuelle Analyse offensichtlich nicht praktikabel. Tools zur Analyse langsamer Abfragen: mysqldumpslow Dieses Tool ist ein Tool zur Analyse langsamer Abfragen, das mit langsamen Abfragen geliefert wird. Normalerweise ist dieses Tool verfügbar, solange MySQL installiert ist. Verwendung: mysqldumpslow [ OPTS... ] [ LOGS... ] – gefolgt von Parametern und der absoluten Adresse der Protokolldatei; -s wonach sortiert werden soll (al, at, ar, c, l, r, t), „at“ ist Standard al: durchschnittliche Sperrzeit ar: Durchschnittlich gesendete Zeilen at: durchschnittliche Abfragezeit c: Anzahl l: Sperrzeit r: gesendete Zeilen t: Abfragezeit -r Sortierreihenfolge umkehren (größtes zuletzt statt zuerst) -t NUM zeigt nur die Top-n-Abfragen an -a abstrahiere nicht alle Zahlen zu N und Strings zu 'S' -n NUM abstrakte Zahlen mit mindestens n Ziffern innerhalb der Namen -g PATTERN grep: nur Anweisungen berücksichtigen, die diesen String enthalten -h HOSTNAME Hostname des Datenbankservers für *-slow.log Dateiname (kann ein Platzhalter sein), Der Standardwert ist '*', d. h. alle -i NAME Name der Serverinstanz (bei Verwendung des Startskripts mysql.server) -l Sperrzeit nicht von Gesamtzeit abziehen Allgemeine Verwendung mysqldumpslow -sc -t 10 /var/run/mysqld/mysqld-slow.log # Ruft die 10 langsamsten Abfragen ab mysqldumpslow -st -t 3 /var/run/mysqld/mysqld-slow.log # Ruft die 3 langsamsten Abfragen ab mysqldumpslow -st -t 10 -g "left join" /database/mysql/slow-log # Ruft die 10 langsamsten Abfragen mit Left Joins, sortiert nach Zeit ab mysqldumpslow -sr -t 10 -g 'left join' /var/run/mysqld/mysqld-slow.log # Ruft die 10 langsamsten Abfragen mit Left Joins, sortiert nach Zeit ab mysqldumpslow -sr -t 10 -g 'left join' /var/run/mysqld/mysqld-slow.log #
Wenn: SELECT * FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000; Anzahl: 1 Zeit=1,91 s (1 s) Sperre=0,00 s (0 s) Zeilen=1000,0 (1000), vgos_dba[vgos_dba]@[10.130.229.196] SELECT * FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N; pt-Abfrage-Digest veranschaulichen pt-query-digest ist ein Tool zum Analysieren langsamer MySQL-Abfragen. Es kann Binlog-, allgemeine Log-, Slowlog- oder MySQL-Protokolldaten analysieren, die von SHOWPROCESSLIST oder tcpdump erfasst wurden. Die Analyseergebnisse können in eine Datei ausgegeben werden. Der Analyseprozess besteht darin, zunächst die Bedingungen der Abfrageanweisung zu parametrisieren, dann die parametrisierten Abfragen zu gruppieren und zu zählen und die Ausführungszeit, Häufigkeit, Anteil usw. jeder Abfrage zu berechnen. Die Analyseergebnisse können verwendet werden, um Probleme zu identifizieren und zu optimieren. Installieren wget http://www.percona.com/get/pt-query-digest chmod +x pt-Query-Digest # Beachten Sie, dass dies ein Linux-Skript ist. Sie müssen den absoluten oder relativen Pfad angeben, um es zu verwenden - oder laden Sie den gesamten Tool-Satz herunter wget percona.com/get/percona-toolkit.rpm U/min -ivh percona-toolkit-2.2.13-1.noarch.rpm wget percona.com/get/percona-toolkit.tar.gz tar -zxvf percona-toolkit-2.2.13.tar.gz CD Percona-Toolkit-2.2.13 perl Makefile.PL machen && machen installieren Syntax und wichtige Optionen pt-query-digest [OPTIONEN] [DATEIEN] [DSN] --create-review-table Wenn der Parameter --review verwendet wird, um die Analyseergebnisse in eine Tabelle auszugeben, wird diese automatisch erstellt, falls sie nicht existiert. --create-history-table Wenn der Parameter --history verwendet wird, um die Analyseergebnisse in eine Tabelle auszugeben, wird diese automatisch erstellt, wenn die Tabelle nicht existiert. --filter gleicht die langsamen Eingabeabfragen ab und filtert sie gemäß der angegebenen Zeichenfolge, bevor sie analysiert werden. --limit begrenzt den Prozentsatz oder die Anzahl der Ausgabeergebnisse. Der Standardwert ist 20, was bedeutet, dass die 20 langsamsten Anweisungen ausgegeben werden. Wenn es 50 % sind, werden sie entsprechend dem Anteil an der gesamten Antwortzeit von groß nach klein sortiert, und die Ausgabe endet, wenn die Summe 50 % erreicht. --host MySQL-Serveradresse --user MySQL-Benutzername --password MySQL-Benutzerkennwort --history Speichert die Analyseergebnisse in der Tabelle. Die Analyseergebnisse sind relativ detailliert. Wenn Sie --history das nächste Mal verwenden und dieselbe Anweisung vorhanden ist und das Zeitintervall der Abfrage von dem in der Verlaufstabelle abweicht, wird dies in der Datentabelle aufgezeichnet. Sie können die historischen Änderungen eines bestimmten Abfragetyps vergleichen, indem Sie dieselbe PRÜFSUMME abfragen. --review speichert die Analyseergebnisse in der Tabelle. Diese Analyse parametrisiert lediglich die Abfragebedingungen, ein Datensatz für einen Abfragetyp, was relativ einfach ist. Wenn Sie --review das nächste Mal verwenden, wird die gleiche Anweisungsanalyse, falls sie bereits vorhanden ist, nicht in der Datentabelle aufgezeichnet. --output Der Ausgabetyp der Analyseergebnisse. Die Werte können report (Standardanalysebericht), slowlog (MySQL Slow Log), json oder json-anon sein. Report wird im Allgemeinen zur leichteren Lesbarkeit verwendet. --since Der Zeitpunkt, zu dem die Analyse gestartet werden soll. Der Wert ist eine Zeichenfolge. Es kann sich um einen angegebenen Zeitpunkt im Format „yyyy-mm-dd [hh:mm:ss]“ oder einen einfachen Zeitwert handeln: s (Sekunden), h (Stunden), m (Minuten), d (Tage). Beispielsweise bedeutet 12h, dass die Statistiken vor 12 Stunden beginnen. --until deadline kann in Kombination mit --since langsame Abfragen über einen bestimmten Zeitraum analysieren. Teil I: Statistische Gesamtergebnisse: Erläuterung zum Standardanalysebericht Gesamt: Wie viele Abfragen gibt es insgesamt? Im obigen Beispiel sind es insgesamt 266 Abfragen. Teil 2: Ergebnisse der Abfragegruppenstatistik: Dieser Teil parametrisiert und gruppiert die Abfragen und analysiert dann die Ausführung jedes Abfragetyps. Die Ergebnisse werden nach der Gesamtausführungszeit vom größten zum kleinsten sortiert. Teil 3: Detaillierte Statistiken für jede Abfrage: Wie aus der obigen Abbildung ersichtlich, sind in der oberen Tabelle die detaillierten statistischen Ergebnisse der Abfrage Nr. 1 aufgeführt. Dabei werden die Statistiken jedes Elements aufgelistet, z. B. die Anzahl der Ausführungen, Maximum, Minimum, Durchschnitt, 95 % usw. Anwendungsbeispiele (1) Analysieren Sie die langsame Abfragedatei direkt: pt-query-digest slow.log > slow_report.log (2) Analysieren Sie die Abfragen der letzten 12 Stunden: pt-query-digest --since=12h slow.log > slow_report2.log (3) Analysieren Sie Abfragen innerhalb eines bestimmten Zeitraums: pt-query-digest slow.log – seit „2014-05-17 09:30:00“ – bis „2014-06-17 10:00:00“ >> slow_report3.log (4) Analysieren Sie langsame Abfragen, die nur Select-Anweisungen enthalten pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' slow.log> slow_report4.log (5) Langsame Abfrage für einen bestimmten Benutzer pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' slow.log> slow_report5.log (6) Abfrage aller langsamen Abfragen, die vollständige Tabellenscans oder vollständige Verknüpfungen beinhalten pt-query-digest --filter '(($event->{Full_scan} || "") gleich "ja") ||(($event->{Full_join} || "") gleich "ja")' slow.log> slow_report6.log (7) Speichern Sie die Abfrage in der Tabelle query_review der Testdatenbank. Wenn sie nicht existiert, wird sie automatisch erstellt. pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_review --create-review-table slow.log (8) Speichern Sie die Abfrage in der Tabelle query_history pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_history --create-review-table slow.log_20140401 (9) Erfassen Sie die TCP-Protokolldaten von MySQL über tcpdump und analysieren Sie sie anschließend tcpdump -s 65535 -x -nn -q -tttt -i beliebig -c 1000 Port 3306 > mysql.tcp.txt pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log (10) Binlog analysieren mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql pt-query-digest --type=binlog mysql-bin000093.sql > slow_report10.log (11) Allgemeines Protokoll analysieren pt-query-digest --type=genlog localhost.log > slow_report11.log Oben finden Sie eine ausführliche Erklärung zu langsamen MySQL-Abfragen. Weitere Informationen zu langsamen MySQL-Abfragen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: jQuery implementiert einen einfachen Karusselleffekt
Wenn Sie mit Docker noch nicht vertraut sind, seh...
Überlauf ausblenden Damit ist gemeint, dass Text-...
Die in diesem Beispiel verwendete MySQL-Version i...
Umfassendes Verständnis des html.css-Überlaufs XM...
Beim Abspielen von Musik werden die Liedtexte im ...
Inhaltsverzeichnis Die Grundprinzipien des respon...
Für die Entwicklung benötigen Sie immer Daten. Al...
1. Umgebung und zugehörige Software Virtuelle Mas...
Herzlichen Glückwunsch, dass Sie Ihren Chef endli...
1. Einleitung Vagrant ist ein Tool zum Erstellen ...
HTML 4 HTML (nicht XHTML), MIME-Typ ist text/html...
Inhaltsverzeichnis 1. Ziele 2. Umweltvorbereitung...
Dieser Artikel veranschaulicht anhand von Beispie...
So erstellen Sie einen Dienst und starten ihn aut...
Grundlegendes Konzept: Funktionsprinzip von Macvl...