Robiłem głębokie zanurzenie w magazynie zapytań SQL Server i często widzę odniesienia do zapytań „ad-hoc”. Jednak nie widziałem, co Query Store określa jako zapytanie ad-hoc. Widziałem miejsca, w których można by wywnioskować, że jest to zapytanie bez parametrów lub zapytanie wykonane tylko raz. Czy istnieje formalna definicja tego? Nie mam na myśli w ogóle. Mam na myśli, ponieważ odnosi się to do sklepu z zapytaniami.
Na przykład na tej stronie pokazano przykład usuwania zapytań ad-hoc ze składnicy zapytań, ale wygląda na to, że stosowane przez niego kryteria to wykonanie tylko jednego. To wydaje się być dziwną definicją zapytania ad-hoc. BTW, jeśli przejdziesz na stronę, wyszukaj „Usuń zapytania ad-hoc”.
sql-server
query-store
Randy Minder
źródło
źródło
Odpowiedzi:
Po krótkich poszukiwaniach nie udało mi się znaleźć konkretnego i satysfakcjonującego źródła z dokumentacji Microsoft, aby odpowiedzieć na to pytanie. Istnieje wiele dobrych opisów i definicji adhoc / ad-hoc / ad hoc stron trzecich, ale myślę, że ze względu na specyfikę tego pytania jedno blisko źródła jest idealne.
Przechodząc obok ogólnych (ale wciąż dokładnych) definicji, takich jak ten post SO (dzięki SqlWorldWide), jeśli spojrzymy na to, co mówi dokumentacja na ten temat, zgadza się z tym, co wspomniałeś o definicji opartej na liczbie wykonań Myślę, że możemy uznać to za fakt.
Artykuł na temat optymalizacji przepływów pracy ad hoc mówi:
Wygląda więc na to, że opcja konfiguracji serwera zapytań ad hoc wykorzystuje również definicję pojedynczego wykonania jako definicję ad hoc. Jeśli zapytanie będzie nadal wykonywane i wygeneruje ten sam plan, nie będzie już tak traktowane.
Artykuł na temat najlepszych praktyk dla sklepu z zapytaniami również się z tym zgadza,
Dotyczy to oczywiście zapytań, które nie są jeszcze używane jako procedury składowane, parametryzowane itp., Ponieważ można je rozpoznać i odpowiednio potraktować od razu.
Na podstawie tego wszystkiego możemy powiedzieć, że zapytanie jest traktowane jako ad hoc, jeśli:
źródło
W przypadku zapytań ad-hoc kolumna object_id w
sys.query_store_query
DMV będzie wynosić 0, jak podano w dokumentacji sys.query_store_query :Możesz identyfikować zapytania ad-hoc na podstawie tej wartości, nawet jeśli nie jest to wyraźnie określone jako „jest to definicja zapytań ad-hoc ”. :)
źródło
Termin ad-hoc jest używany w odniesieniu do zapytań, które zostały wykonane tylko raz. Jest to zgodne z definicją zastosowaną dla ustawienia bazy danych „Optymalizuj pod kątem obciążeń ad-hoc”.
Odnośny link dotyczy usuwania zapytań ad-hoc obejmuje tę konkretną definicję „Usuń zapytania ad-hoc: usuwa zapytania, które zostały wykonane tylko raz i które mają więcej niż 24 godziny”.
źródło
Ad-hoc z kolumny sys.dm_exec_cached_plans dmv
objtype
w docs.microsoft.com.Jednym z zastosowań tej kolumny jest sprawdzenie w przypadku zapytań z wieloma planami, czy przyczyną jest wiele planów
Adhoc
.źródło