Aracılığıyla paylaş


sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümleri Microsoft Fabric'teAzure SQL VeritabanıAzure SQL Yönetilen Örneği SQL veritabanı

Eksik indeks gruplarından eksik bir indeks gerektiren sorgular hakkında bilgi döndürür, mekânsal indeksler hariç. Eksik indeks grubu için birden fazla sorgu döndürülebilir. Eksik bir indeks grubunun aynı indekse ihtiyacı olan birkaç sorgu olabilir.

Azure SQL Veritabanı'nda, dinamik yönetim görünümleri veritabanı muhafızlığını etkileyecek bilgileri veya kullanıcının erişebildiği diğer veritabanları hakkında bilgileri açığa çıkaramaz. Bu bilgilerin açığa çıkmasını önlemek için, bağlı kiracıya ait olmayan verileri içeren her satır filtrelenir.

Sütun adı Veri türü Description
group_handle int Eksik bir grup indeksleri belirler. Bu tanımlayıcı sunucu genelinde benzersizdir.

Diğer sütunlar, gruptaki indeksin eksik olarak kabul edilen tüm sorgular hakkında bilgi sağlar.

Bir indeks grubu yalnızca bir indeks içerir.

sys.dm_db_missing_index_groups içinde birleştirilebilirindex_group_handle.
query_hash binary(8) Sorguda hesaplanan ve benzer mantığa sahip sorguları tanımlamak için kullanılan ikili karma değeri. Sorgu karması kullanarak yalnızca değişmez değerlerle farklılık gösteren sorguların toplam kaynak kullanımını belirleyebilirsiniz.
query_plan_hash binary(8) Sorgu yürütme planında hesaplanan ve benzer sorgu yürütme planlarını tanımlamak için kullanılan ikili karma değer. Benzer yürütme planlarına sahip sorguların toplu maliyetini bulmak için sorgu planı karması kullanabilirsiniz.

0x000 Her zaman doğal derlenmiş bir depolanmış prosedür bellek optimize edilmiş bir tabloyu sorguladığında.
last_sql_handle varbinary(64) Bu indekse ihtiyaç duyan son derlenmiş ifadenin toplu veya depolanmış prosedürünü benzersiz şekilde tanımlayan bir token.

Dinamik last_sql_handle yönetim fonksiyonu sys.dm_exec_sql_text çağrılarak sorgunun SQL metnini almak için kullanılabilir.
last_statement_start_offset int 0 ile başlayan bayt cinsinden, satırın betch veya kalıcı nesnesinin metininde tarif ettiği sorgunun başlangıç konumunu gösterir; bu indeks SQL batch'inde bu indekse ihtiyaç duyan son derlenmiş ifadedir.
last_statement_end_offset int Sıranın betch veya kalıcı nesnesinin metininde tarif ettiği sorgu bitiş konumunu bayt 0cinsinden, SQL batch'inde bu indeksin gerektirdiği son derlenmiş ifade için belirtir.
last_statement_sql_handle varbinary(64) Bu indekse ihtiyaç duyan son derlenmiş ifadenin toplu veya depolanmış prosedürünü benzersiz şekilde tanımlayan bir token. Query Store tarafından kullanılıyor. Bunun aksine last_sql_handle, sys.query_store_query_textstatement_sql_handle Query Store katalog görünümü tarafından kullanılan referanslar sys.query_store_query_text.

Query Store derlenirken Query Store etkin değilse geri 0 döner.
user_seeks bigint Gruptaki önerilen indeksin kullanılabileceği kullanıcı sorguları nedeniyle yapılan arama sayısı.
user_scans bigint Gruptaki önerilen indeksin kullanılabileceği kullanıcı sorguları nedeniyle yapılan tarama sayısı.
last_user_seek datetime Gruptaki önerilen indeksin kullanılabileceği kullanıcı sorguları nedeniyle son arama tarihi ve saati.
last_user_scan datetime Grupta önerilen indeksin kullanılabileceği kullanıcı sorguları nedeniyle son taramanın tarihi ve saati.
avg_total_user_cost float Gruptaki indeks tarafından azaltılabilen kullanıcı sorgularının ortalama maliyeti.
avg_user_impact float Bu eksik endeks grubu uygulanırsa kullanıcı sorgularının yaşayabileceği ortalama yüzde faydası. Bu değer, eksik endeks grubu uygulansaydı sorgu maliyetinin ortalama olarak bu yüzdeyi düşeceği anlamına gelir.
system_seeks bigint Sistem sorguları (örneğin otomatik istatistik sorguları) nedeniyle oluşturulan ve gruptaki önerilen indeksin kullanılabileceği arama sayısı. Daha fazla bilgi için Otomatik İstatistik Etkinlik Sınıfına bakınız.
system_scans bigint Grupta önerilen indeksin kullanılabileceği sistem sorguları nedeniyle yapılan tarama sayısı.
last_system_seek datetime Gruptaki önerilen indeksin kullanılabileceği sistem sorguları nedeniyle son sistem aramasının tarihi ve saati.
last_system_scan datetime Gruptaki önerilen indeksin kullanılabileceği sistem sorguları nedeniyle son sistem taramasının tarihi ve saati.
avg_total_system_cost float Gruptaki endeks tarafından azaltılabilen sistem sorgularının ortalama maliyeti.
avg_system_impact float Bu eksik endeks grubu uygulanırsa sistem sorgularının yaşanabileceği ortalama yüzde faydası. Bu değer, eksik endeks grubu uygulansaydı sorgu maliyetinin ortalama olarak bu yüzdeyi düşeceği anlamına gelir.

Açıklamalar

Geri sys.dm_db_missing_index_group_stats_query dönen bilgiler, her sorgu derlemesi veya yeniden derleme ile değil, her sorgu yürütülmesiyle güncellenir. Kullanım istatistikleri devam etmez ve sadece veritabanı motoru yeniden başlatılana kadar saklanır.

Veritabanı yöneticileri, sunucu geri dönüşümünden sonra kullanım istatistiklerini korumak istiyorlarsa, eksik indeks bilgilerinin yedeği olarak düzenli olarak yedeklemelidir. sqlserver_start_time Son veritabanı altyapısı başlangıç zamanını bulmak için sys.dm_os_sys_info sütununu kullanın. Ayrıca eksik indeksleri Query Store ile devam ettirebilirsiniz.

Permissions

Bu dinamik yönetim görünümünü sorgulamak için, kullanıcılara SQL Server 2019 (15.x) ve önceki sürümler için izin veya bu VIEW SERVER STATE izni ima eden herhangi bir izin verilmesi VIEW SERVER STATE gerekir.

SQL Server 2022 (16.x) ve sonraki sürümler için sunucuda VIEW SERVER PERFORMANCE STATE izni gerektirir.

Örnekler

Aşağıdaki örnekler dinamik yönetim görünümünün sys.dm_db_missing_index_group_stats_query nasıl kullanılacağını göstermektedir.

A. Kullanıcı sorguları için en son 10 beklenen iyileştirme için en son sorgu metnini bulun

Aşağıdaki sorgu, en yüksek beklenen kümülatif iyileşmeyi sağlayacak 10 eksik indeks için son kaydedilen sorgu metnini azalan sırayla döndürür.

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;