Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Erstellen des Sortierindex
Dieser creating sort index
-Thread-Zustand zeigt an, dass ein Thread eine SELECT
-Anweisung verarbeitet, die die Verwendung einer internen temporären Tabelle zum Sortieren der Daten erfordert.
Unterstützte Engine-Versionen
Diese Thread-Statusinformationen werden für die folgenden Versionen unterstützt:
-
Aurora My SQL Version 2 bis 2.09.2
Kontext
Der Zustand creating sort index
wird angezeigt, wenn eine Abfrage mit einer ORDER BY
- oder GROUP BY
-Klausel keinen vorhandenen Index verwenden kann, um die Operation auszuführen. In diesem Fall SQL muss My eine filesort
teurere Operation durchführen. Dieser Vorgang wird normalerweise im Speicher ausgeführt, wenn die Ergebnismenge nicht zu groß ist. Andernfalls geht es darum, eine Datei auf der Festplatte zu erstellen.
Wahrscheinliche Ursachen für erhöhte Wartezeiten
Das Auftreten von creating sort index
deutet nicht allein auf ein Problem hin. Wenn die Leistung schlecht ist und Sie häufig creating sort index
-Instances sehen, sind die wahrscheinlichste Ursache langsame Abfragen mit ORDER BY
- oder GROUP BY
-Operatoren.
Aktionen
Die allgemeine Richtlinie besteht darin, Abfragen mit ORDER BY
- oder GROUP
BY
-Klauseln zu finden, die mit den Erhöhungen des Zustands creating sort
index
verbunden sind. Prüfen Sie dann, ob das Hinzufügen eines Index oder das Vergrößern der Sortierpuffergröße das Problem löst.
Themen
Schalten Sie das Leistungsschema ein, wenn es nicht aktiviert ist
Performance Insights meldet Thread-Status nur, wenn Leistungsschema-Instrumente nicht aktiviert sind. Wenn Leistungsschema-Instrumente aktiviert sind, meldet Performance Insights stattdessen Warteereignisse. Leistungsschema-Instrumente bieten zusätzliche Erkenntnisse und bessere Tools, wenn Sie potenzielle Leistungsprobleme untersuchen. Daher wird empfohlen, dass Sie das Leistungsschema aktivieren. Weitere Informationen finden Sie unter Überblick über das Leistungsschema für Performance Insights auf Aurora My SQL My SQL.
Identifizieren Sie die Problemanfragen
KennUm aktuelle Abfragen zu identifizieren, die eine Erhöhung des creating sort
index
-Zustands verursachen, führen Sie show processlist
aus und prüfen Sie, ob eine der Abfragen ORDER BY
oder GROUP BY
hat. Führen Sie optional explain for connection N
aus, wobei N
die Prozesslisten-ID der Abfrage mit filesort
ist.
Um frühere Abfragen zu identifizieren, die diese Zunahmen verursachen, aktivieren Sie das Protokoll für langsame Abfragen und suchen Sie die Abfragen mit ORDER BY
. Führen Sie EXPLAIN
für die langsamen Abfragen aus und suchen Sie nach „using filesort“. Weitere Informationen finden Sie unter Untersuchen Sie die Erklärungspläne für die Dateisortierungs-Nutzung.
Untersuchen Sie die Erklärungspläne für die Dateisortierungs-Nutzung
Identifizieren Sie die Anweisungen mit ORDER BY
- oder GROUP BY
-Klauseln, die den creating sort index
-Zustand ergeben.
Das folgende Beispiel zeigt, wie explain
für eine Abfrage ausgeführt wird. Die Spalte Extra
zeigt, dass diese Abfrage filesort
verwendet.
mysql> explain select * from mytable order by c1 limit 10\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: mytable partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2064548 filtered: 100.00 Extra: Using filesort 1 row in set, 1 warning (0.01 sec)
Das folgende Beispiel zeigt das Ergebnis der Ausführung von EXPLAIN
für dieselbe Abfrage, nachdem ein Index für Spalte c1
erstellt wurde.
mysql> alter table mytable add index (c1);
mysql> explain select * from mytable order by c1 limit 10\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: mytable partitions: NULL type: index possible_keys: NULL key: c1 key_len: 1023 ref: NULL rows: 10 filtered: 100.00 Extra: Using index 1 row in set, 1 warning (0.01 sec)
Informationen zur Verwendung von Indizes für die Optimierung der Sortierreihenfolge finden Sie ORDERunter BY-Optimierung
Erhöhen Sie die Sortierpuffergröße
Um festzustellen, ob für eine bestimmte Abfrage ein filesort
-Prozess erforderlich ist, der eine Datei auf dem Datenträger erstellt hat, überprüfen Sie den sort_merge_passes
-Variablenwert, nachdem Sie die Abfrage ausgeführt haben. Es folgt ein Beispiel.
mysql> show session status like 'sort_merge_passes'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Sort_merge_passes | 0 | +-------------------+-------+ 1 row in set (0.01 sec) --- run query mysql> select * from mytable order by u limit 10; --- run status again: mysql> show session status like 'sort_merge_passes'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Sort_merge_passes | 0 | +-------------------+-------+ 1 row in set (0.01 sec)
Wenn der Wert von sort_merge_passes
hoch ist, sollten Sie die Größe des Sortierpuffers erhöhen. Wenden Sie die Erhöhung auf Sitzungsebene an, da eine globale Erhöhung die Anzahl RAM meiner SQL Nutzungen erheblich erhöhen kann. Das folgende Beispiel zeigt, wie Sie die Größe des Sortierpuffers ändern, bevor Sie eine Abfrage ausführen.
mysql> set session sort_buffer_size=10*1024*1024; Query OK, 0 rows affected (0.00 sec) -- run query