sys.dm_db_missing_index_group_stats_query (T-SQL)
Berlaku untuk: SQL Server 2019 (15.x) Azure SQL Database Azure SQL Managed Instance
Mengembalikan informasi tentang kueri yang memerlukan indeks yang hilang dari grup indeks yang hilang, tidak termasuk indeks spasial. Lebih dari satu kueri dapat dikembalikan per grup indeks yang hilang. Satu grup indeks yang hilang mungkin memiliki beberapa kueri yang memerlukan indeks yang sama.
Di Azure SQL Database, tampilan manajemen dinamis tidak dapat mengekspos informasi yang akan memengaruhi penahanan database atau mengekspos informasi tentang database lain yang dapat diakses pengguna. Untuk menghindari mengekspos informasi ini, setiap baris yang berisi data yang bukan milik penyewa yang tersambung difilter.
Nama kolom | Jenis data | Deskripsi |
---|---|---|
group_handle | int | Mengidentifikasi sekelompok indeks yang hilang. Pengidentifikasi ini unik di seluruh server. Kolom lain menyediakan informasi tentang semua kueri di mana indeks dalam grup dianggap hilang. Grup indeks hanya berisi satu indeks. Dapat digabungkan ke index_group_handle dalam sys.dm_db_missing_index_groups. |
query_hash | biner(8) | Nilai hash biner dihitung pada kueri dan digunakan untuk mengidentifikasi kueri dengan logika serupa. Anda bisa menggunakan hash kueri untuk menentukan penggunaan sumber daya agregat untuk kueri yang hanya berbeda dengan nilai harfiah. |
query_plan_hash | biner(8) | Nilai hash biner dihitung pada rencana eksekusi kueri dan digunakan untuk mengidentifikasi rencana eksekusi kueri serupa. Anda dapat menggunakan hash rencana kueri untuk menemukan biaya kumulatif kueri dengan rencana eksekusi serupa. Akan selalu 0x000 ketika prosedur tersimpan yang dikompilasi secara asli meminta tabel yang dioptimalkan memori. |
last_sql_handle | varbinary(64) | Adalah token yang secara unik mengidentifikasi batch atau prosedur tersimpan dari pernyataan terakhir yang dikompilasi yang memerlukan indeks ini.last_sql_handle dapat digunakan untuk mengambil teks SQL kueri dengan memanggil fungsi manajemen dinamis sys.dm_exec_sql_text. |
last_statement_start_offset | int | Menunjukkan, dalam byte, dimulai dengan 0, posisi awal kueri yang dijelaskan baris dalam teks batch atau objek yang disimpan untuk pernyataan terakhir yang dikompilasi yang memerlukan indeks ini dalam batch SQL-nya. |
last_statement_end_offset | int | Menunjukkan, dalam byte, dimulai dengan 0, posisi akhir kueri yang dijelaskan baris dalam teks batch atau objek yang disimpan untuk pernyataan terakhir yang dikompilasi yang membutuhkan indeks ini dalam batch SQL-nya. |
last_statement_sql_handle | varbinary(64) | Adalah token yang secara unik mengidentifikasi batch atau prosedur tersimpan dari pernyataan terakhir yang dikompilasi yang memerlukan indeks ini. Digunakan oleh Penyimpanan Kueri. Tidak seperti last_sql_handle , mereferensikan yang statement_sql_handle digunakan oleh tampilan katalog Penyimpanan Kueri sys.query_store_query_textsys.query_store_query_text .Jika Penyimpanan Kueri tidak diaktifkan saat kueri dikompilasi, mengembalikan 0. |
user_seeks | bigint | Jumlah pencarian yang disebabkan oleh kueri pengguna yang dapat digunakan oleh indeks yang direkomendasikan dalam grup. |
user_scans | bigint | Jumlah pemindaian yang disebabkan oleh kueri pengguna yang dapat digunakan oleh indeks yang direkomendasikan dalam grup. |
last_user_seek | datetime | Tanggal dan waktu pencarian terakhir yang disebabkan oleh kueri pengguna yang dapat digunakan oleh indeks yang direkomendasikan dalam grup. |
last_user_scan | datetime | Tanggal dan waktu pemindaian terakhir yang disebabkan oleh kueri pengguna yang dapat digunakan oleh indeks yang direkomendasikan dalam grup. |
avg_total_user_cost | float | Biaya rata-rata kueri pengguna yang dapat dikurangi oleh indeks dalam grup. |
avg_user_impact | float | Manfaat persentase rata-rata yang dapat dialami kueri pengguna jika grup indeks yang hilang ini diterapkan. Nilai berarti bahwa biaya kueri akan rata-rata turun berdasarkan persentase ini jika grup indeks yang hilang ini diterapkan. |
system_seeks | bigint | Jumlah pencarian yang disebabkan oleh kueri sistem, seperti kueri statistik otomatis, yang dapat digunakan oleh indeks yang direkomendasikan dalam grup. Untuk informasi selengkapnya, lihat Kelas Peristiwa Statistik Otomatis. |
system_scans | bigint | Jumlah pemindaian yang disebabkan oleh kueri sistem yang dapat digunakan oleh indeks yang direkomendasikan dalam grup. |
last_system_seek | datetime | Tanggal dan waktu pencarian sistem terakhir yang disebabkan oleh kueri sistem yang dapat digunakan oleh indeks yang direkomendasikan dalam grup. |
last_system_scan | datetime | Tanggal dan waktu pemindaian sistem terakhir yang disebabkan oleh kueri sistem yang dapat digunakan oleh indeks yang direkomendasikan dalam grup. |
avg_total_system_cost | float | Biaya rata-rata kueri sistem yang dapat dikurangi oleh indeks dalam grup. |
avg_system_impact | float | Manfaat persentase rata-rata yang dapat dialami kueri sistem jika grup indeks yang hilang ini diterapkan. Nilai berarti bahwa biaya kueri akan rata-rata turun berdasarkan persentase ini jika grup indeks yang hilang ini diterapkan. |
Informasi yang dikembalikan oleh sys.dm_db_missing_index_group_stats_query
diperbarui oleh setiap eksekusi kueri, bukan oleh setiap kompilasi atau kompilasi ulang kueri. Statistik penggunaan tidak bertahan dan disimpan hanya sampai mesin database dimulai ulang.
Administrator database harus secara berkala membuat salinan cadangan informasi indeks yang hilang jika mereka ingin menyimpan statistik penggunaan setelah daur ulang server. sqlserver_start_time
Gunakan kolom di sys.dm_os_sys_info untuk menemukan waktu mulai mesin database terakhir. Anda juga bisa mempertahankan indeks yang hilang dengan Penyimpanan Kueri.
Catatan
Hasil yang ditetapkan untuk DMV ini dibatasi hingga 600 baris. Setiap baris berisi satu indeks yang hilang. Jika Anda memiliki lebih dari 600 indeks yang hilang, Anda harus mengatasi indeks yang hilang yang ada sehingga Anda kemudian dapat melihat yang lebih baru.
Untuk mengkueri tampilan manajemen dinamis ini, pengguna harus diberikan izin TAMPILKAN STATUS SERVER atau izin apa pun yang menyiratkan izin TAMPILKAN STATUS SERVER.
Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.
Contoh berikut mengilustrasikan cara menggunakan sys.dm_db_missing_index_group_stats_query
tampilan manajemen dinamis.
J. Menemukan teks kueri terbaru untuk 10 penyempurnaan tertinggi yang diantisipasi untuk kueri pengguna
Kueri berikut mengembalikan teks kueri terakhir yang direkam untuk 10 indeks yang hilang yang akan menghasilkan peningkatan kumulatif tertinggi yang diantisipasi, dalam urutan menurun.
SELECT TOP 10
SUBSTRING
(
sql_text.text,
misq.last_statement_start_offset / 2 + 1,
(
CASE misq.last_statement_start_offset
WHEN -1 THEN DATALENGTH(sql_text.text)
ELSE misq.last_statement_end_offset
END - misq.last_statement_start_offset
) / 2 + 1
),
misq.*
FROM sys.dm_db_missing_index_group_stats_query AS misq
CROSS APPLY sys.dm_exec_sql_text(misq.last_sql_handle) AS sql_text
ORDER BY misq.avg_total_user_cost * misq.avg_user_impact * (misq.user_seeks + misq.user_scans) DESC;
Pelajari selengkapnya tentang fitur indeks yang hilang dan konsep terkait dalam artikel berikut:
- Menyetel indeks non-kluster dengan saran indeks yang hilang
- sys.dm_db_missing_index_columns (T-SQL)
- sys.dm_db_missing_index_details (T-SQL)
- sys.dm_db_missing_index_groups (T-SQL)
- sys.dm_db_missing_index_group_stats (T-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- BUAT INDEKS (Transact-SQL)
- sys.dm_os_sys_info (T-SQL)
- Query Store