Co faktycznie mierzy licznik Perfmon „Nieoptymalne plany / s”?

13

Co w programie SQL Server mierzy licznik Perfmon „Statystyki grupy obciążeń: plany nieoptymalne / s”?

Jest to jeden z liczników Resource Governor , więc jest mierzony w grupie obciążeń (którą masz niezależnie od tego, czy skonfigurujesz RG, czy nie).

Nie pytam, co stanowi dobry lub zły plan, ale co konkretnie to przeciwdziała i gdzie idziesz, aby znaleźć dokładnie odpowiednie plany? Na przykład w zdarzeniach rozszerzonych nie mogę znaleźć niczego, co wydaje się pasować do zapytania uruchamiającego licznik „plany nieoptymalne / s”.

Brent Ozar
źródło
1
teraz patrzę na instancję z 1322 dla „nieoptymalnych planów / s” i zastanawiam się, gdzie szukać. To dobre pytanie, Brent.
Max Vernon
Dzięki! Właśnie dodałem go do sp_BlitzFirst, ponieważ nigdy go nie widziałem, zanim nie pracowałem w Hekaton w tym tygodniu.
Brent Ozar
Zastanawiam się, czy chodzi o przekroczenie limitu czasu optymalizacji planu przed otrzymaniem świetnego planu.
Max Vernon
Myślałem, że StatementOptmEarlyAbortReason="TimeOut"trudno będzie powiedzieć na pewno! Nie koreluje to jednak dobrze z licznikiem perfmon.
Max Vernon

Odpowiedzi:

6

Licznik śledzi dwa elementy:

  1. Koniec czasu
  2. Przekroczono limit pamięci

Wartości można znaleźć w planie XML, jak Max zaproponował w komentarzach. Mogę potwierdzić, że tak było od co najmniej SQL Server 2008.

Uznanie dla @Max Vernon i @Joe Obbish.

MSDN BOL Technet Docs opis nie jest super pomocny.

Sean Gallardy
źródło
2
Dzięki, Sean. Patrzyłem sys.dm_os_performance_countersi przeszukiwałem pamięć podręczną planu dla elementów Timeout i zauważyłem, że DMV nie zwiększa się, gdy sys.dm_exec_query_statswyświetla ostatnio używane zapytania o limit czasu . Może przygotuję jutro MCVE, żeby to zbadać. Należy również zauważyć, że dzieje się to w jednym z naszych instancji produkcyjnych EDW z uruchomionym 2012 Enterprise.
Max Vernon