Udostępnij za pomocą


sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Dotyczy: SQL Server 2019 (15.x) i nowsze wersje bazy danychSQL Sql Database azure SQLDatabasew usłudze Microsoft Fabric

Zwraca informacje o zapytaniach, które wymagały brakującego indeksu z grup brakujących indeksów, z wyłączeniem indeksów przestrzennych. Na brakującą grupę indeksów może być zwracanych więcej niż jedno zapytanie. Jedna brakująca grupa indeksów może mieć kilka zapytań wymagających tego samego indeksu.

W bazie danych Azure SQL dynamiczne widoki zarządzania nie mogą ujawniać informacji, które mogłyby wpłynąć na zawartość bazy, ani udostępniać informacji o innych bazach danych, do których użytkownik ma dostęp. Aby uniknąć ujawniania tych informacji, każdy wiersz zawierający dane, które nie należą do połączonej dzierżawy, jest filtrowany.

Nazwa kolumny Typ danych Description
group_handle int Identyfikuje grupę brakujących indeksów. Ten identyfikator jest unikalny na całym serwerze.

Pozostałe kolumny dostarczają informacji o wszystkich zapytaniach, dla których indeks w grupie jest uznawany za brakujący.

Grupa indeksów zawiera tylko jeden indeks.

Można do niego dołączyć index_group_handle w sys.dm_db_missing_index_groups.
query_hash binary(8) Wartość skrótu binarnego obliczana dla zapytania i używana do identyfikowania zapytań z podobną logiką. Możesz użyć skrótu zapytania, aby określić zagregowane użycie zasobów dla zapytań, które różnią się tylko wartościami literału.
query_plan_hash binary(8) Wartość skrótu binarnego obliczona na planie wykonywania zapytania i używana do identyfikowania podobnych planów wykonywania zapytań. Możesz użyć skrótu planu zapytania, aby znaleźć skumulowany koszt zapytań z podobnymi planami wykonywania.

Zawsze 0x000 , gdy natywnie skompilowana procedura przechowywana zapytuje tabelę zoptymalizowaną pod pamięć.
last_sql_handle varbinary(64) Token, który jednoznacznie identyfikuje procedurę wsadową lub przechowywaną ostatniego skompilowanego wyrażenia, które wymagało tego indeksu.

Można użyć go last_sql_handle do pobrania tekstu SQL zapytania, wywołując funkcję dynamicznego zarządzania sys.dm_exec_sql_text.
last_statement_start_offset int Wskazuje, w bajtach, zaczynając od 0, pozycję początkową zapytania, które wiersz opisuje w tekście swojego obiektu wsadowego lub trwałego dla ostatniego skompilowanego zaświadczenia, które wymagało tego indeksu w swojej partii SQL.
last_statement_end_offset int Wskazuje, w bajtach, zaczynając od 0, końcową pozycję zapytania, które wiersz opisuje w tekście swojego obiektu wsadowego lub trwałego, dla ostatniego skompilowanego zaświadczenia, które wymagało tego indeksu w swojej partii SQL.
last_statement_sql_handle varbinary(64) Token, który jednoznacznie identyfikuje procedurę wsadową lub przechowywaną ostatniego skompilowanego wyrażenia, które wymagało tego indeksu. Używane przez Query Store. W przeciwieństwie do , sys.query_store_query_text odnosi się do last_sql_handlewidoku statement_sql_handle katalogowego Query Store sys.query_store_query_text.

Zwraca, 0 jeśli Storage Query Store nie był włączony podczas kompilacji zapytania.
user_seeks bigint Liczba wyszukiwań spowodowanych zapytaniami użytkownika, do których zalecany indeks w grupie mógł być użyty.
user_scans bigint Liczba skanów spowodowanych zapytaniami użytkownika, do których zalecany indeks w grupie mógł być użyty.
last_user_seek datetime Data i godzina ostatniego poszukiwania spowodowane zapytaniami użytkownika, do których zalecany indeks w grupie mógł zostać użyty.
last_user_scan datetime Data i godzina ostatniego skanowania spowodowane zapytaniami użytkownika, do których zalecany indeks w grupie mógł zostać użyty.
avg_total_user_cost float Średni koszt zapytań użytkownika, który można zmniejszyć o indeks w grupie.
avg_user_impact float Średnia procentowa korzyść, jaką zapytania użytkownika mogłyby odnieść, gdyby ta brakująca grupa indeksów została wdrożona. Wartość ta oznacza, że koszt zapytań średnio spadłby o ten procent, gdyby ta brakująca grupa indeksów została wdrożona.
system_seeks bigint Liczba wyszukiwań wywołanych zapytaniami systemowymi, takimi jak automatyczne statystyki, do których zalecany indeks w grupie mógł zostać użyty. Więcej informacji znajdziesz w sekcji Auto Stats Event Class.
system_scans bigint Liczba skanów spowodowanych zapytaniami systemowymi, do których zalecany indeks w grupie mógł być użyty.
last_system_seek datetime Data i czas ostatniego poszukiwania systemu spowodowane zapytaniami systemowymi, do których zalecany indeks w grupie mógł zostać użyty.
last_system_scan datetime Data i godzina ostatniego skanowania systemu spowodowane zapytaniami systemowymi, do których zalecany indeks w grupie mógł zostać użyty.
avg_total_system_cost float Średni koszt zapytań systemowych, które można by zmniejszyć o indeks w grupie.
avg_system_impact float Średnia procentowa korzyść, jaką zapytania systemowe mogłyby odnieść, gdyby ta brakująca grupa indeksów została wdrożona. Wartość ta oznacza, że koszt zapytań średnio spadłby o ten procent, gdyby ta brakująca grupa indeksów została wdrożona.

Uwagi

Informacje zwracane przez sys.dm_db_missing_index_group_stats_query są aktualizowane przez każde wykonanie zapytania, a nie każde kompilowanie czy rekompilację zapytań. Statystyki użytkowania nie są utrzymywane i są przechowywane tylko do momentu ponownego uruchomienia silnika bazy danych.

Administratorzy baz danych powinni okresowo tworzyć kopie zapasowe brakujących informacji indeksowych, jeśli chcą zachować statystyki użytkowania po recyklingu serwera. Użyj kolumny sqlserver_start_time w sys.dm_os_sys_info , aby znaleźć ostatni czas uruchamiania aparatu bazy danych. Możesz także utrzymywać brakujące indeksy za pomocą Query Store.

Permissions

Aby zapytać o ten dynamiczny widok zarządzania, użytkownicy muszą otrzymać VIEW SERVER STATE uprawnienia lub dowolne uprawnienia sugerujące takie VIEW SERVER STATE uprawnienia, zarówno w SQL Server 2019 (15.x) jak i w poprzednich wersjach.

Wymaga uprawnień VIEW SERVER PERFORMANCE STATE na serwerze, dla SQL Server 2022 (16.x) i nowszych wersji.

Przykłady

Poniższe przykłady ilustrują, jak korzystać z dynamicznego widoku sys.dm_db_missing_index_group_stats_query zarządzania.

A. Znajdź najnowszy tekst zapytań o 10 najczęściej oczekiwanych ulepszeń w zakresie zapytań użytkowników

Następujące zapytanie zwraca ostatni zarejestrowany tekst zapytania dla 10 brakujących indeksów, które przyniosłyby najwyższą oczekiwaną kumulatywną poprawę, w kolejności malejącej.

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;