Ostrzeżenie o brakujących statystykach w planie wykonania

24

Mam sytuację, której nie rozumiem. Mój plan wykonania programu SQL Server mówi mi, że brakuje mi statystyk w tabeli, ale statystyki są już utworzone:

Ostrzeżenie

Ale jeśli spojrzymy na tabelę, zobaczymy, że istnieje statystyka, która została utworzona automatycznie:

wprowadź opis zdjęcia tutaj

Czy ktoś może pomóc zrozumieć, jak to może być?

Statystyki Auto_Update i Auto_Create są włączone na bieżącej bazie danych.

Korzystam z programu SQL Server 2014.

Artash Khachatryan
źródło

Odpowiedzi:

15

Ostrzeżenie nie zawsze odpowiada brakującym statystykom jednokolumnowym .

Nie ma łatwego sposobu na dokładne określenie dokładnej statystyki, której szukał optymalizator i której nie znalazł we wszystkich przypadkach, ale prawie zawsze jest to statystyka wielokolumnowa , która zapewniłaby pewne informacje o korelacji w wielu predykatach równości w zapytaniu.

Być może w twoim przypadku odpowiada to dokładnie predykatom w filtrze po skanie, w którym pojawia się ostrzeżenie.

Byłoby miło, gdyby SQL Server zgłaszał wszystkie kolumny z ostrzeżeniem o „brakującej statystyce”, ale niestety nie tak to działa dzisiaj.

Konieczna może być pewna ilość prób i błędów, aby zidentyfikować wielokolumnową statystykę, którą należy utworzyć, aby usunąć ostrzeżenie. Pamiętaj, że statystyki wielokolumnowe nie mogą być tworzone automatycznie. Pomimo ostrzeżenia możesz, ale nie musisz, stwierdzić, że jakość oszacowania poprawia się, nawet jeśli dostarczona jest brakująca statystyka.

Paul White mówi GoFundMonica
źródło
8

Ponieważ wydaje się jasne, że statystyka już istnieje dla konkretnej kolumny, oferuję dwie możliwości:

  1. Eksplorator obiektów jest wskazany na inną bazę danych - jestem podejrzliwy, ponieważ baza danych ma DEVnazwę, więc możliwe jest, że w jednym przypadku patrzysz na programistę, aw innym nie.
  2. Używany plan pochodzi z okresu przed utworzeniem statystyki (albo została ona wygenerowana wcześniej, albo, co mniej prawdopodobne, coś uniemożliwiło uruchomienie ponownej kompilacji podczas tworzenia statystyki).

Sprawdź, czy prosta odpowiedź (1) nie stanowi problemu, i spróbuj wysłać to samo zapytanie, OPTION (RECOMPILE)aby potwierdzić lub wykluczyć (2).

Aaron Bertrand
źródło
1
Aaron Bertnand, wielkie dzięki za odpowiedź. Ale Eksplorator obiektów jest wskazywany na bieżącą bazę danych, a dodanie OPCJI (RECOMPILE) nie rozwiązuje problemu. Chcę również dodać, że moje zapytanie wykonuje procedurę składowaną.
Artash Khachatryan
2

Właśnie zauważyłem, że gdy pojawi się takie ostrzeżenie o statystykach, jeśli uruchomisz zapytanie lub procedurę z poniższymi ustawieniami:

SET SHOWPLAN_ALL ON

wprowadź opis zdjęcia tutaj

możesz zobaczyć brakujące statystyki:

wprowadź opis zdjęcia tutaj

a korzystając ze skryptów tutaj możesz sprawdzić, jakie statystyki są obecnie na miejscu, a jeśli ich brakuje, możesz je dodać.

Marcello Miorelli
źródło