

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

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

Status thread `creating sort index` menunjukkan bahwa thread sedang memproses pernyataan `SELECT` yang memerlukan penggunaan tabel sementara internal untuk mengurutkan data.

**Topics**
+ [

## Versi mesin yang didukung
](#ams-states.sort-index.context.supported)
+ [

## Konteks
](#ams-states.sort-index.context)
+ [

## Kemungkinan penyebab peningkatan peristiwa tunggu
](#ams-states.sort-index.causes)
+ [

## Tindakan
](#ams-states.sort-index.actions)

## Versi mesin yang didukung
<a name="ams-states.sort-index.context.supported"></a>

Informasi status thread ini didukung untuk versi berikut:
+ Aurora MySQL versi 2 hingga 2.09.2

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

Status `creating sort index` muncul saat kueri dengan klausa `ORDER BY` atau `GROUP BY` tidak dapat menggunakan indeks yang ada untuk melakukan operasi. Dalam hal ini, MySQL perlu melakukan operasi `filesort` yang lebih mahal. Operasi ini biasanya dilakukan dalam memori jika set hasil tidak terlalu besar. Jika set hasil besar, operasi akan melibatkan pembuatan file pada disk.

## Kemungkinan penyebab peningkatan peristiwa tunggu
<a name="ams-states.sort-index.causes"></a>

Kemunculan `creating sort index` tidak dengan sendirinya menunjukkan adanya suatu masalah. Jika performa buruk, dan Anda sering melihat instans `creating sort index`, penyebab yang paling mungkin adalah kueri lambat dengan operator `ORDER BY` atau `GROUP BY`.

## Tindakan
<a name="ams-states.sort-index.actions"></a>

Pedoman umumnya adalah menemukan kueri dengan klausa `ORDER BY` atau `GROUP BY` yang terkait dengan peningkatan dalam status `creating sort index`. Lalu, lihat apakah menambahkan indeks atau meningkatkan ukuran buffer urutan akan memecahkan masalah.

**Topics**
+ [

### Mengaktifkan Skema Performa jika tidak aktif
](#ams-states.sort-index.actions.enable-pfs)
+ [

### Mengidentifikasi kueri masalah
](#ams-states.sort-index.actions.identify)
+ [

### Memeriksa "jelaskan rencana" untuk penggunaan filesort
](#ams-states.sort-index.actions.plan)
+ [

### Meningkatkan ukuran buffer urutan
](#ams-states.sort-index.actions.increasebuffersize)

### Mengaktifkan Skema Performa jika tidak aktif
<a name="ams-states.sort-index.actions.enable-pfs"></a>

Wawasan Performa akan melaporkan status thread hanya jika instrumen Skema Performa tidak aktif. Bila instrumen Skema Performa diaktifkan, Wawasan Performa akan melaporkan peristiwa tunggu. Instrumen Skema Performa memberikan wawasan tambahan dan alat yang lebih baik untuk menyelidiki potensi masalah performa. Oleh karena itu, sebaiknya Anda mengaktifkan Skema Performa. Untuk informasi selengkapnya, lihat [Ikhtisar Skema Kinerja untuk Performance Insights di Aurora ](USER_PerfInsights.EnableMySQL.md).

### Mengidentifikasi kueri masalah
<a name="ams-states.sort-index.actions.identify"></a>

Untuk mengidentifikasi kueri saat ini yang menyebabkan peningkatan dalam status `creating sort index`, jalankan `show processlist` dan lihat apakah kueri memiliki `ORDER BY` atau `GROUP BY`. Cara lainnya, jalankan `explain for connection N`, dengan `N` adalah ID daftar proses kueri dengan `filesort`.

Untuk mengidentifikasi kueri sebelumnya yang menyebabkan peningkatan ini, aktifkan log kueri lambat dan temukan kueri dengan `ORDER BY`. Jalankan `EXPLAIN` pada kueri lambat dan cari "menggunakan filesort". Untuk informasi selengkapnya, lihat [Memeriksa "jelaskan rencana" untuk penggunaan filesort](#ams-states.sort-index.actions.plan).

### Memeriksa "jelaskan rencana" untuk penggunaan filesort
<a name="ams-states.sort-index.actions.plan"></a>

Identifikasi pernyataan dengan klausa `ORDER BY` atau `GROUP BY` yang menghasilkan status `creating sort index`. 

Contoh berikut menunjukkan cara menjalankan `explain` pada kueri. Kolom `Extra` menunjukkan bahwa kueri ini menggunakan `filesort`.

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

Contoh berikut menunjukkan hasil menjalankan `EXPLAIN` pada kueri yang sama setelah indeks dibuat pada kolom `c1`.

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

Untuk informasi tentang penggunaan indeks pada pengoptimalan tata urutan, lihat [ORDER BY Optimization](https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html) dalam dokumentasi MySQL.

### Meningkatkan ukuran buffer urutan
<a name="ams-states.sort-index.actions.increasebuffersize"></a>

Untuk mengetahui apakah kueri tertentu memerlukan proses `filesort` yang membuat file pada disk, periksa nilai variabel `sort_merge_passes` setelah menjalankan kueri. Berikut adalah contohnya.

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

Jika nilai `sort_merge_passes` tinggi, coba tingkatkan ukuran buffer urutan. Terapkan peningkatan tersebut pada tahap sesi. Menerapkannya secara global dapat secara signifikan meningkatkan jumlah penggunaan RAM MySQL. Contoh berikut menunjukkan cara mengubah ukuran buffer urutan sebelum menjalankan kueri. 

```
mysql> set session sort_buffer_size=10*1024*1024;
Query OK, 0 rows affected (0.00 sec)
-- run query
```