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 SQL Versi saya 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, SQL kebutuhan saya untuk melakukan filesort
operasi 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.
Topik
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 Ikhtisar Skema Kinerja untuk Performance Insights di Aurora.
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 untuk pengoptimalan urutan urutan, lihat ORDERBY Optimization
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 pada tingkat sesi, karena meningkatkannya secara global dapat secara signifikan meningkatkan jumlah SQL penggunaan RAM Saya. 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