Znajdź wszystkie zapytania wykonane ostatnio w bazie danych

21

[Jestem programistą T-SQL na poziomie początkującym]
[i mam nadzieję, że jestem na właściwej stronie wymiany stosów]

Chciałbym uzyskać listę wszystkich zapytań, które wykonałem (przynajmniej te, które wykonałem dzisiaj od rana). Muszę zrobić raport na temat czasu wykonania zapytań.

Wyszukiwanie online nie dostarczyło mi wielu przydatnych informacji. Jedyne zapytanie, które znalazłem online, które wydawało się dość bliskie, to

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

To zapytanie zwróciło niektóre nieparzyste wyniki (z których większość stanowiła grupa sproców). Ponadto wszystkie te wyniki pokazują zapytania wykonane od dzisiejszego popołudnia (potrzebuję zapytań od rana).

Nie mogłem znaleźć niczego w poprzednich pytaniach (jeśli podobne pytanie zostało już zadane, proszę o wskazanie mnie).

Widziałem kilka sugestii dotyczących SQL Profiler, ale myślę, że profiler pomógłby mi tylko wtedy, gdy już rozpocząłem śledzenie (popraw mnie, jeśli się mylę).

Czy ktoś może mi zasugerować, jak powinienem uzyskać listę wszystkich zapytań, które zostały wykonane w bazie danych od rana (w tym czasy wykonania zapytań) ..

[Przydałoby się (nie jest to wymóg), jeśli mogę w jakiś sposób uzyskać nazwę użytkownika, który wykonał zapytanie]

Prashanth Tilleti
źródło

Odpowiedzi:

12

To zapytanie zwróciło niektóre nieparzyste wyniki (z których większość stanowiła grupa sproców). Ponadto wszystkie te wyniki pokazują zapytania wykonane od dzisiejszego popołudnia (potrzebuję zapytań od rana).

Wynika to z tego, że przeglądasz pamięć podręczną procedur, a plany, które były używane rano, mogą już tam nie istnieć (z powodu presji pamięci, restartu serwera / instancji, ręcznego czyszczenia pamięci podręcznej proc itp.).

Rzeczywistym sposobem na wykonanie zapytań względem instancji (a dokładniej bazy danych) byłoby utworzenie śledzenia SQL lub sesji zdarzeń rozszerzonych. Prawidłowo utworzone jedno z nich zapewni informacje, których szukasz.

Jeśli szukasz statystyk wykonania z dzisiejszego poranka i tylko z samego rana (tj. Skonfigurowanie wyżej wspomnianych implementacji monitorowania jako zadania proaktywnego i do wykonania na następny czas nie jest wystarczające), to chyba że zostało to już utworzone, nie będzie sposób natywnie, aby uzyskać te informacje.

W celu przyszłego wykorzystania zacznij od śledzenia SQL, który przechwytuje zdarzenie SQL: StmtCompleted . W XE byłoby to sql_statement_completedwydarzenie.

Moim zdaniem, zamiast kontynuować wyszukiwanie pozostałości statystyk wykonania zapytania, zacznę spędzać czas na zastanawianiu się, jak ponownie wykonać obciążenie, które próbujesz zmierzyć. Ale tym razem wcześniej skonfiguruj odpowiednie śledzenie / monitorowanie.

Thomas Stringer
źródło
Czy mogę filtrować według SQL: kolumny danych StmtCompleted?
Kiquenet,