

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
<a name="ams-states.sort-index"></a>

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.

**Topics**
+ [Unterstützte Engine-Versionen](#ams-states.sort-index.context.supported)
+ [Kontext](#ams-states.sort-index.context)
+ [Wahrscheinliche Ursachen für erhöhte Wartezeiten](#ams-states.sort-index.causes)
+ [Aktionen](#ams-states.sort-index.actions)

## Unterstützte Engine-Versionen
<a name="ams-states.sort-index.context.supported"></a>

Diese Thread-Statusinformationen werden für die folgenden Versionen unterstützt:
+ Aurora MySQL Version 2 bis 2.09.2

## Kontext
<a name="ams-states.sort-index.context"></a>

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
<a name="ams-states.sort-index.causes"></a>

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
<a name="ams-states.sort-index.actions"></a>

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.

**Topics**
+ [Schalten Sie das Leistungsschema ein, wenn es nicht aktiviert ist](#ams-states.sort-index.actions.enable-pfs)
+ [Identifizieren Sie die Problemanfragen](#ams-states.sort-index.actions.identify)
+ [Untersuchen Sie die Erklärungspläne für die Dateisortierungs-Nutzung](#ams-states.sort-index.actions.plan)
+ [Erhöhen Sie die Sortierpuffergröße](#ams-states.sort-index.actions.increasebuffersize)

### Schalten Sie das Leistungsschema ein, wenn es nicht aktiviert ist
<a name="ams-states.sort-index.actions.enable-pfs"></a>

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 [Übersicht über das Leistungsschema für Performance Insights auf Aurora MySQL](USER_PerfInsights.EnableMySQL.md).

### Identifizieren Sie die Problemanfragen
<a name="ams-states.sort-index.actions.identify"></a>

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](#ams-states.sort-index.actions.plan).

### Untersuchen Sie die Erklärungspläne für die Dateisortierungs-Nutzung
<a name="ams-states.sort-index.actions.plan"></a>

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](https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html) in der MySQL-Dokumentation.

### Erhöhen Sie die Sortierpuffergröße
<a name="ams-states.sort-index.actions.increasebuffersize"></a>

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
```