MYSQL Advanced – Abfrageoptimierung – Aktueller STATUS

Zurück in die Stadt schicken – „ 100 Tage MYSQL-Kenntnisse vom Eintritt bis zur Anstellung“

Am Ende des Artikels gibt es eine Buchverleihung, an der Sie teilnehmen können!

1. Übungsthemen

Themenlink Schwierigkeit
Erweitertes SQL – Abfrageoptimierung – STATUS ANZEIGEN ★★★☆☆

Zweitens: SQL-Ideen

Erweitertes SQL – Abfrageoptimierung – STATUS ANZEIGEN

Fügen Sie hier eine Bildbeschreibung ein

Initialisierungsdaten

这里写入初始化表结构,初始化数据的sql

Lösung

Was ist STATUS ANZEIGEN?

SHOW STATUS kann einen bestimmten Status des MySQL-Dienstes abrufen. Diese Status sind die Leistungsparameter des MySQL-Dienstes!
Grammatik:

SHOW [SESSION | GLOBAL] STATUS

SESSION bedeutet, die Leistungsparameter auf der aktuellen Sitzungsebene abzurufen, und GLOBAL bedeutet, die Leistungsparameter auf globaler Ebene abzurufen. SESSION und GLOBAL können weggelassen werden. Wenn sie weggelassen werden, ist der Standardwert SESSION.
B
Fügen Sie hier eine Bildbeschreibung ein
Da es viele Parameter gibt, kann bei der Suche nach bestimmten Parametern die folgende Syntax verwendet werden:

SHOW [SESSION | GLOBAL] STATUS LIKE 'status_name';

Dabei ist Statusname der Parametername des Status.

Praktische Erfahrung: allgemeine MySQL-Statusabfrage

1. QPS (Anzahl der pro Sekunde verarbeiteten Anfragen)

QPS ist die Anzahl der von MySQL pro Sekunde ausgeführten SQL-Anweisungen, ist jedoch nicht auf Select-, Instert-, Update- und Delete-Anweisungen beschränkt.

QPS = Fragen (oder Abfragen) / Sekunden

show global status like 'Question%';

Fügen Sie hier eine Bildbeschreibung ein

 show global status like 'uptime_since_flush_status';

Fügen Sie hier eine Bildbeschreibung ein

Berechnungsideen:

Rufen Sie zunächst die Daten von Frage 1 ab , indem Sie den globalen Status „Frage %“ anzeigen. Berechnen Sie nach einer gewissen Zeit den globalen Status „Frage %“ anzeigen, um die Daten von Frage 2 zu erhalten.

QPS = (Frage2-Frage1)/(uptime_since_flush_status2-uptime_since_flush_status1)

Der Unterschied zwischen Fragen und Abfragen

Fügen Sie hier eine Bildbeschreibung ein
Da Abfragen mehr Statistiken zählen, ist die Anzahl der Abfragen theoretisch immer größer oder gleich der Anzahl der Fragen.

Bei Abfragen werden mehr gespeicherte Prozeduranweisungen und vorbereitete Anweisungen gezählt als bei Fragen.

2. TPS (die Anzahl der pro Sekunde verarbeiteten Transaktionen)

TPS bezieht sich auf die Anzahl der pro Sekunde verarbeiteten Transaktionen, ausgenommen ausgewählte Anweisungen.

TPS = (Com_commit + Com_rollback) / Sekunden

show global status like 'Com_commit';

show global status like 'Com_rollback';

Feld Beschreibung:

Com_commit: Anzahl der Transaktions-Commits.
Com_rollback: Anzahl der Transaktions-Rollbacks

Bei Datenbanken mit sehr häufigen Rollback-Vorgängen kann dies auf ein Problem beim Schreiben der Anwendung hinweisen.

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Berechnungsideen:

Rufen Sie zuerst den Wert commit_rollback1 von ** (Com_commit + Com_rollback) ** und dann nach einer gewissen Zeit den Wert commit_rollback2 von ** (Com_commit + Com_rollback) ** ab.
TPS = (commit_rollback2-commit_rollback1)/(uptime_since_flush_status2-uptime_since_flush_status1);

3. Trefferquote des Schlüsselpuffers

Die Schlüsselpuffer-Trefferrate stellt die Index-Cache-Trefferrate der Myisam-Tabelle dar, und die Trefferrate wirkt sich direkt auf die Lese- und Schreibleistung der Myisam-Tabelle aus.
Wenn die Trefferquote zu niedrig ist, liegt ein Problem beim Lesen und Schreiben der Myisam-Typentabelle vor.
Die Trefferquote des Schlüsselpuffers umfasst tatsächlich zwei Typen, die Lese-Trefferquote und die Schreib-Trefferquote, und die Berechnungsformel lautet wie folgt:

key_buffer_read_hits = (1-key_reads / key_read_requests) * 100 %
key_buffer_write_hits = (1-key_writes / key_write_requests) * 100 %

show global status like 'key%';

Fügen Sie hier eine Bildbeschreibung ein

4. Trefferquote des InnoDB-Puffers

Der Innodb-Puffer bezieht sich auf innodb_buffer_pool, den internen Speicherplatz, der zum Zwischenspeichern von Tabellen und Indizes vom Typ Innodb verwendet wird.
Wenn die Trefferquote zu niedrig ist, deutet dies auf ein Problem beim Lesen und Schreiben von InnoDB-Tabellen hin.
Berechnungsformel:
innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100 %

show global  status like 'innodb_buffer_pool_read%';

Fügen Sie hier eine Bildbeschreibung ein

5. Abfrage-Cache-Trefferquote

Der Abfragecache ist der Abfragecache von MySQL. Wenn er in der Konfigurationsdatei my.cnf aktiviert ist, kann das Ergebnis der Abfrageanweisung zwischengespeichert werden.
Für einige Plattformen mit wenigen Benutzern oder einmaligen Statistiken wird empfohlen, den Abfragecache zu deaktivieren.
Wenn der Abfragecache aktiviert ist, ist es auch notwendig, die Trefferquote des Abfragecaches zu überwachen, die uns Aufschluss darüber geben kann, ob die Datenbank den Abfragecache korrekt verwendet.
Berechnungsformel:
query_cache_hits =(Qcache_hits/(Qcache_hits+Qcache_inserts))* 100 %;

show global status like 'Qcache%';

In MySQL5 wird die Funktion des Abfragecaches eingeführt und der Abfragecache ist standardmäßig deaktiviert.
MySQL empfiehlt, dass wir Caching-Technologie von Drittanbietern verwenden, anstatt MySQLs eigenen Abfrage-Cache zum Zwischenspeichern von Daten zu verwenden. In MySQL8 wird der Abfrage-Cache ebenfalls entfernt

6. Trefferquote von table_cache (table_open_cache).

table_cache ist ein sehr wichtiger MySQL-Leistungsparameter. table_cache wird hauptsächlich zum Festlegen der Anzahl der Tabellencaches verwendet. In Versionen nach 5.1.3 heißt es table_open_cache .
Da jede Clientverbindung auf mindestens eine Tabelle zugreift, bezieht sich der Wert dieses Parameters auf max_connections.
Wenn MySQL auf eine Tabelle zugreift und noch Platz im Tabellencache vorhanden ist, wird die Tabelle geöffnet und die Daten werden darin abgelegt, sodass beim nächsten Zugriff auf die Tabelle schneller auf den Inhalt der Tabelle zugegriffen werden kann.
Durch Überprüfen der Statuswerte open_tables und open_tables zur Spitzenzeit können Sie feststellen, ob der table_cache-Wert erhöht werden soll.
Es ist zu beachten, dass eine zu hohe Einstellung für table_cache zu unzureichenden Dateideskriptoren führen kann, was zu einer instabilen Leistung oder einem Verbindungsfehler führen kann.

Vorschlag: Das Verhältnis zwischen der Zustandsmenge open_tables und open_tables sollte größer als 80 % sein

Wenn das Verhältnis zwischen open_tables und open_tables zu niedrig ist, bedeutet dies, dass die Tabellencache-Einstellung zu klein ist.

show global status like 'open%_tables';

Fügen Sie hier eine Bildbeschreibung ein
Sehen Sie sich den Wert von table_open_cache an:

show global variables like 'table_open_cache';

Ändern Sie den Wert von table_open_cache wie folgt:

  • Methode 1: Sie können den Wert des Parameters table_open_cache in my.ini oder my.cnf ändern . Um den MySQL-Dienst neu zu starten.
  • Methode 2: In SET GLOBAL table_open_cache= 2000; diese Methode erfordert keinen Neustart des MySQL-Dienstes. Nach dem Neustart von MySQL schlägt der Vorgang fehl.
6. Thread-Cache-Trefferquote

Um den Prozess der Clientverbindung so weit wie möglich zu verbessern, ist in MySQL ein Thread-Cache-Pool implementiert, in dem inaktive Verbindungsthreads gespeichert werden, anstatt nach Abschluss der Anforderung zerstört zu werden. Wenn eine neue Verbindungsanforderung vorliegt, MySQL prüft zunächst den Thread. Ob der Cache inaktive Verbindungsthreads speichert. Wenn vorhanden, nehmen Sie sie heraus und verwenden Sie sie direkt. Wenn keine inaktiven Verbindungsthreads vorhanden sind, erstellen Sie neue Threads.
Die Thread-Cache-Trefferrate kann direkt widerspiegeln, ob die Einstellung des Systemparameters thread_cache_size angemessen ist. Ein angemessener Parameter read_cache_size kann viele Ressourcen einsparen, die beim Erstellen neuer Verbindungen verbraucht werden müssen. Normalerweise ist eine Thread-Cache-Trefferquote von über 90 % angemessen.

Berechnungsformel:

thread_cache_hits = (1- threads_created/connections) * 100 %;

show global status like 'Thread%';
show global status like 'Connections';

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Parameterbeschreibung:

  • threads_created: Gibt die Anzahl der erstellten Threads an. Wenn threads_created zu groß ist, bedeutet dies natürlich, dass der MySQL-Server Threads erstellt hat. Dies ist auch ein relativ ressourcenintensiver Prozess, was darauf hinweist, dass der Server nicht fehlerfrei ist
  • Verbindungen: Die Anzahl der Verbindungen zum MySQL-Server.
Optimierung

Wenn die Thread-Cache-Trefferquote unter 90 %
liegt , überprüfen Sie die Größe von thread_cache_size:

show global variables like 'thread_cache_size';

Fügen Sie hier eine Bildbeschreibung ein
Erhöhen Sie den Wert thread_cache_size in der Konfigurationsdatei entsprechend und fügen Sie thread_cache_size=64 direkt zur Datei my.cnf hinzu.
Starten Sie den MySQL-Dienst neu, damit die Konfiguration wirksam wird.

Oder führen Sie den folgenden Befehl aus. Auf diese Weise muss der MySQL-Dienst nicht neu gestartet werden. Nach dem Neustart von MySQL schlägt der Vorgang fehl.

set global thread_cache_size=30;
7, tmp-tabellenbezogene Statusanalyse

Die tmp-Tabelle wird hauptsächlich verwendet, um zu überwachen, ob MySQL zu viele temporäre Tabellen verwendet und ob temporäre Tabellen zu groß sind und Dateien aus dem Speicher auf die Festplatte ausgelagert werden müssen

show global status like 'created_tmp%';

Fügen Sie hier eine Bildbeschreibung ein

Parameterbeschreibung:

Created_tmp_disk_tables: Die Häufigkeit, mit der die Festplatte verwendet werden musste, weil die temporäre Tabelle zu groß war, um im Speicher ausgeführt zu werden.
Wenn zu viele create_tmp_tables vorhanden sind, gibt es möglicherweise zu viele sortierte Sätze oder die Verbindungsmethode ist möglicherweise nicht sehr optimiert.
Und wenn das Verhältnis von create_tmp_dis_table/create_tmp_tables zu hoch ist, beispielsweise mehr als 10 %, müssen Sie überlegen, ob der Parameter tmp_table_size größer angepasst werden muss.
Es wird empfohlen, dass tmp_table_size und max_heap_table_size auf die gleiche Größe eingestellt werden müssen. Fügen Sie den Wert von tmp_table_size
direkt in der Datei my.cnf hinzu bzw. passen Sie ihn an . Starten Sie den MySQL-Dienst neu, damit die Konfiguration wirksam wird.

Oder führen Sie den folgenden Befehl aus. Auf diese Weise muss der MySQL-Dienst nicht neu gestartet werden. Nach dem Neustart von MySQL schlägt der Vorgang fehl.

set global tmp_table_size=自定义;

Sehen Sie sich die effektive Konfiguration an:

show global variables like 'tmp_table_size';
show global variables like 'max_heap_table_size';

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

8、Binlog-Cache

Wenn Sie die Binlog-Protokollfunktion aktivieren, müssen Sie das Binlog-Cache-Problem berücksichtigen. Das Binlog wird nicht in das Binlog geschrieben, sobald Daten vorhanden sind, sondern zunächst in den Binlog-Cache und dann in das Binlog.
Binlog_cache_disk_use ist die von binlog verwendete Festplattenmenge und Binlog_cache_use ist die von binlog verwendete Menge. Wenn Binlog_cache_disk_use größer als 0 ist, bedeutet dies, dass binlog_cache nicht ausreicht und binlog_cache_size erhöht werden muss.

show status like 'binlog_cache%';

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie den Wert von binlog_cache_size direkt in der Datei my.cnf hinzu bzw. passen Sie ihn an . Starten Sie den MySQL-Dienst neu, damit die Konfiguration wirksam wird.

Oder führen Sie den folgenden Befehl aus. Auf diese Weise muss der MySQL-Dienst nicht neu gestartet werden. Nach dem Neustart von MySQL schlägt der Vorgang fehl.

set global binlog_cache_size=自定义;

Sehen Sie sich die effektive Konfiguration an:

show global variables like 'binlog_cache_size';

Fügen Sie hier eine Bildbeschreibung ein

9、innodb_log_waits
show status like 'innodb_log_waits';

Wenn der Innodb_log_waits-Wert ungleich 0 ist, weist dies darauf hin, dass der Innodb-Protokollpuffer aufgrund von unzureichendem Speicherplatz wartet. Der Wert von innodb_log_buffer_size muss erhöht werden, und eine entsprechende Erhöhung führt nicht zu unzureichendem Speicher. Fügen Sie den Wert von innodb_log_buffer_size
Fügen Sie hier eine Bildbeschreibung ein
direkt in der Datei my.cnf hinzu bzw. passen Sie ihn an . Starten Sie den MySQL-Dienst neu, damit die Konfiguration wirksam wird.

Oder führen Sie den folgenden Befehl aus. Auf diese Weise muss der MySQL-Dienst nicht neu gestartet werden. Nach dem Neustart von MySQL schlägt der Vorgang fehl.

set global innodb_log_buffer_size=自定义;

Sehen Sie sich die effektive Konfiguration an:

show global variables like 'innodb_log_buffer_size';

Fügen Sie hier eine Bildbeschreibung ein

10. Sperrstatus

Zu den MySQL-Sperren gehören Tabellensperren und Zeilensperren. Die Mindestsperre von Myisam sind Tabellensperren und die Mindestsperre von InnoDB sind Zeilensperren. Mit den folgenden Befehlen können Sie die Anzahl der Sperren, die Häufigkeit, mit der andere Threads auf Sperren warten, und die Sperre ermitteln Informationen zur Wartezeit.

 show status like '%lock%';

Wenn das Verhältnis von Table_locks_waited/Table_locks_immediate relativ groß ist, bedeutet dies, dass die durch Tabellensperren verursachte Blockierung relativ schwerwiegend ist. Es kann erforderlich sein, die Abfrageanweisung anzupassen, die Speicher-Engine zu ändern oder die Geschäftslogik anzupassen.

Wenn Innodb_row_lock_waits jedoch groß ist, bedeutet dies, dass die Zeilensperre von Innodb ebenfalls schwerwiegend ist und die normale Verarbeitung anderer Threads beeinträchtigt.
Die schwerwiegende Ursache für Innodb-Zeilensperren kann darin liegen, dass der von der Abfrageanweisung verwendete Index nicht sinnvoll genug ist (Innodb-Zeilensperren werden basierend auf Indizes gesperrt), was zu übermäßigen Lückensperren führt.

3. Zusammenfassung

In diesem Artikel wird beschrieben, was SHOW STATUS ist und wie man SHOW STATUS verwendet. 10 häufig verwendete MySQL-Statusabfragen geteilt:

  • QPS (Abfragemenge pro Sekunde)
  • TPS (Transaktionen pro Sekunde)
  • Trefferquote des Schlüsselpuffers
  • Trefferquote des InnoDB-Puffers
  • Trefferquote im Abfrage-Cache
  • table_cache (table_open_cache) Trefferquote
  • tmp-tabellenbezogene Statusanalyse
  • Binlog-Cache
  • innodb_log_waits
  • Sperrzustand

Die Antwort auf diese Frage ist also optional. . Sagen Sie es Bruder Xu Zhu laut im Kommentarbereich.

4. Referenz


MySQL Advanced Skill Tree > Abfrageoptimierung > Wie SHOW STATUS das QPS/TPS-
MySQL-Debugging von MySQL berechnet – Status anzeigen

5. Vorteile für Fans

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Wohlfahrt 0

Bruder Xu Zhu hat direkt ein gutes Buch geschickt, das mit den meisten Likes~

  • Derjenige mit der höchsten Anzahl an Likes erhält ein kostenloses Buch: Derjenige mit den meisten Likes für diesen Artikel erhält ein physisches Buch „Java Core Technology“ (Band 1 oder Band 2 Ihrer Wahl).

  • Statistikschluss: 10.08.2023 19:00:00

Vorteil 1

Bruder Xuzhu wird direkt 2 gute Bücher verschicken und sich an der Lobpreisung beteiligen und Bücher verschenken~

  • Nehmen Sie an der Buchlieferung für Lob teil: 2 glückliche Leser werden nach dem Zufallsprinzip ausgewählt und jeder der 2 glücklichen Leser erhält ein physisches Buch „Java Core Technology“ (wählen Sie eines aus Band 1 oder Band 2).

  • Statistikschluss: 10.08.2023 19:00:00

Vorteil 2

Kommen Sie zu Xu Zhus Freundeskreis, der Bücher sendet, um Bücher zu liken, zu liken und zu senden ~
Xu Zhu eröffnet die Freundesposition: Portal –“

  • Für den 8. und 88. Freund, denen es gefällt, erhalten 2 glückliche Leser jeweils ein physisches Buch „Java Core Technology“ (wählen Sie eines aus Band 1 oder Band 2).
  • Statistikschluss: 10.08.2023 19:00:00

Bitte senden Sie innerhalb von 7 Tagen nach Ablauf der Frist für die Statistik der Gewinner eine private Nachricht an die Lieferadresse von Bruder Xu Zhu, die abgelaufenen Belohnungen werden ungültig!

Ich bin Bruder Xuzhu, bis morgen

Supongo que te gusta

Origin blog.csdn.net/shi_hong_fei_hei/article/details/132184603
Recomendado
Clasificación