creating sort index - Amazon Aurora

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

creating sort index

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

Versi mesin yang didukung

Informasi status thread ini didukung untuk versi berikut:

  • Aurora MySQL versi 2 hingga 2.09.2

Konteks

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

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

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.

Mengaktifkan Skema Performa jika tidak aktif

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 Mengaktifkan Skema Performa untuk Wawasan Performa di Aurora MySQL.

Mengidentifikasi kueri masalah

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.

Memeriksa "jelaskan rencana" untuk penggunaan filesort

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 Pengoptimalan ORDER BY dalam dokumentasi MySQL.

Meningkatkan ukuran buffer urutan

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