sys.dm_db_missing_index_group_stats_query (T-SQL)

Berlaku untuk: SQL Server 2019 (15.x) Azure SQL DatabaseAzure 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.

Keterangan

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.

Izin

Untuk mengkueri tampilan manajemen dinamis ini, pengguna harus diberikan izin TAMPILKAN STATUS SERVER atau izin apa pun yang menyiratkan izin TAMPILKAN STATUS SERVER.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Contoh

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; 

Langkah berikutnya

Pelajari selengkapnya tentang fitur indeks yang hilang dan konsep terkait dalam artikel berikut: