Erstellen des Sortierindex - Amazon Aurora

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 MySQL Version 2 bis 2.09.2

Context

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 muss MySQL eine teurere filesort-Operation ausfü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.

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 Aktivieren des Leistungsschemas für Performance Insights in Aurora MySQL.

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 zur Optimierung der Sortierreihenfolge finden Sie unter ORDER BY-Optimierung in der MySQL-Dokumentation.

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 den Anstieg auf Sitzungsebene an, da eine globale Erhöhung der RAM-MySQL-Nutzung 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