Czy historia zapytań jest przechowywana w niektórych plikach dziennika? Jeśli tak, czy możesz mi powiedzieć, jak znaleźć ich lokalizację? Jeśli nie, czy możesz mi doradzić, jak to zobaczyć?
sql-server
logging
ssms
mstaniloiu
źródło
źródło
Odpowiedzi:
[Ponieważ to pytanie prawdopodobnie zostanie zamknięte jako duplikat.]
Jeśli SQL Server nie został ponownie uruchomiony (a plan nie został wykluczony itp.), Możesz znaleźć zapytanie w pamięci podręcznej planu.
Jeśli zgubiłeś plik z powodu awarii Management Studio, możesz znaleźć pliki odzyskiwania tutaj:
W przeciwnym razie będziesz musiał użyć czegoś innego, aby pomóc Ci zapisać historię zapytań, na przykład pakietu narzędzi SSMS, jak wspomniano w odpowiedzi Eda Harpera - chociaż nie jest to bezpłatne w SQL Server 2012+. Lub możesz skonfigurować lekkie śledzenie filtrowane na twoim loginie lub nazwie hosta (ale użyj do tego śledzenia po stronie serwera, a nie Profiler).
Jak skomentował @ Nenad-Zivkovic, pomocne może być dołączenie
sys.dm_exec_query_stats
i zamówienie przezlast_execution_time
:źródło
sys.dm_exec_query_stats
i wyszukiwać lublast_execution_time
Późne, ale miejmy nadzieję, przydatne, ponieważ zawiera więcej szczegółów…
Nie ma możliwości wyświetlenia zapytań wykonywanych domyślnie w programie SSMS. Istnieje jednak kilka opcji.
Czytanie dziennika transakcji - nie jest to łatwe, ponieważ jest w zastrzeżonym formacie. Jeśli jednak chcesz zobaczyć zapytania, które były wykonywane historycznie (z wyjątkiem SELECT), jest to jedyny sposób.
Możesz użyć do tego narzędzi innych firm, takich jak ApexSQL Log i SQL Log Rescue (bezpłatne, ale tylko SQL 2000). Sprawdź ten wątek, aby uzyskać więcej informacji tutaj. Eksplorator / analizator dzienników transakcji programu SQL Server
SQL Server profiler - najlepiej nadaje się, jeśli chcesz tylko rozpocząć inspekcję i nie interesuje Cię to, co wydarzyło się wcześniej. Upewnij się, że używasz filtrów, aby wybrać tylko potrzebne transakcje. W przeciwnym razie bardzo szybko otrzymasz mnóstwo danych.
Śledzenie SQL Server - najlepiej nadaje się, jeśli chcesz przechwycić wszystkie lub większość poleceń i przechowywać je w pliku śledzenia, który można później przeanalizować.
Wyzwalacze - najlepiej nadają się, jeśli chcesz przechwytywać DML (z wyjątkiem selekcji) i przechowywać je gdzieś w bazie danych
źródło
Pakiet narzędzi SSMS dodaje między innymi funkcję rejestrowania historii wykonywania.
źródło
Jak zauważyli inni, można użyć programu SQL Profiler, ale można również wykorzystać jego funkcjonalność za pomocą systemowych procedur składowanych sp_trace_ *. Na przykład ten fragment kodu SQL (przynajmniej w 2000 r .; myślę, że jest taki sam dla SQL 2008, ale będziesz musiał dwukrotnie sprawdzić) przechwytuje
RPC:Completed
iSQL:BatchCompleted
zdarzenia dla wszystkich zapytań, których uruchomienie zajmuje ponad 10 sekund, i zapisze dane wyjściowe w plik śledzenia, który można później otworzyć w profilerze SQL:Identyfikator każdego zdarzenia śledzenia, kolumn itp. Można znaleźć w Books Online; po prostu wyszukaj sp_trace_create , sp_trace_setevent i sp_trace_setfiler sprocs. Następnie możesz sterować śledzeniem w następujący sposób:
... gdzie „15” to identyfikator śledzenia (zgodnie z raportem sp_trace_create, który uruchamia pierwszy skrypt powyżej).
Możesz sprawdzić, jakie ślady działają z:
Jedyne, co powiem z ostrożnością - nie wiem, jak bardzo obciąży to twój system; doda trochę, ale jak duża jest ta „część” prawdopodobnie zależy od tego, jak zajęty jest twój serwer.
źródło
System nie rejestruje w ten sposób zapytań. Jeśli jednak wiesz, że chcesz to zrobić z wyprzedzeniem, możesz użyć programu SQL Profiler do rejestrowania nadchodzących danych i śledzenia zapytań w czasie działania programu Profiler.
źródło
Używam poniższego zapytania do śledzenia aktywności aplikacji na serwerze SQL, który nie ma włączonego profilera śledzenia. Metoda używa magazynu zapytań (SQL Server 2016+) zamiast DMV. Daje to lepszą możliwość wglądu w dane historyczne, a także szybsze wyszukiwanie. Przechwytywanie krótko działających zapytań, których nie można przechwycić przez sp_who / sp_whoisactive, jest bardzo wydajne.
źródło
Powinno to pokazać godzinę i datę uruchomienia zapytania
źródło
Jeśli potrzebujesz, możesz monitorować zapytania SQL za pomocą programu SQL Profiler
źródło
Historię zapytań można przeglądać za pomocą widoków systemowych:
Na przykład, używając następującego zapytania:
Aktualne zapytania można zobaczyć za pomocą następującego skryptu:
To żądanie wyświetla wszystkie aktywne żądania i wszystkie żądania, które jawnie blokują aktywne żądania.
Wszystkie te i inne przydatne skrypty są implementowane jako reprezentacje w bazie danych SRV , która jest dystrybuowana bezpłatnie. Na przykład, pierwszy skrypt pochodzi z widoku [inf]. [VBigQuery] , a drugi z widoku [inf]. [VRequests] .
Istnieją również różne rozwiązania innych firm dotyczące historii zapytań. Używam Query Manager z Dbeaver : i Query Execution History z SQL Tools , który jest osadzony w SSMS :
źródło
Ta funkcja nie jest dostępna po wyjęciu z pudełka w programie SSMS.
Jeśli używasz SSMS 18 lub nowszego, możesz spróbować SSMSPlus.
Posiada funkcję historii zapytań.
https://github.com/akarzazi/SSMSPlus
Zastrzeżenie: jestem autorem.
źródło
jeśli korzystasz z Management Studio, możesz użyć opcji „Automatycznie generuj skrypt przy każdym zapisie”. To z pewnością nie jest rejestrowanie. Sprawdź, czy Ci się przyda ..;)
źródło
Jeśli zapytania, które Cię interesują, są zapytaniami dynamicznymi, które sporadycznie kończą się niepowodzeniem, możesz zarejestrować SQL, datę i godzinę oraz użytkownika w tabeli w momencie tworzenia instrukcji dynamicznej. Byłoby to jednak wykonywane na zasadzie indywidualnego przypadku, ponieważ wymaga specjalnego programowania i zajmuje trochę dodatkowego czasu przetwarzania, więc rób to tylko dla tych kilku zapytań, na których najbardziej Ci zależy. Jednak rejestrowanie określonych instrukcji może naprawdę pomóc, gdy próbujesz dowiedzieć się, dlaczego kończy się niepowodzeniem tylko raz w miesiącu. Dynamiczne zapytania są trudne do dokładnego przetestowania i czasami otrzymujesz jedną konkretną wartość wejściową, która po prostu nie zadziała, a rejestrowanie w czasie tworzenia kodu SQL jest często najlepszym sposobem, aby zobaczyć, co konkretnie znajdowało się w skompilowanym sql.
źródło
Nieco nieszablonową metodą byłoby utworzenie skryptu rozwiązania w AutoHotKey. Używam tego i nie jest to doskonałe, ale działa i jest bezpłatne. Zasadniczo ten skrypt przypisuje klawisz skrótu do CTRL+ SHIFT+, Rktóry skopiuje wybrany SQL w SSMS ( CTRL+ C), zapisze plik SQL z datownikiem, a następnie wykona podświetlone zapytanie ( F5). Jeśli nie jesteś przyzwyczajony do skryptów AHK, początkowy średnik jest komentarzem.
Największym ograniczeniem jest to, że ten skrypt nie zadziała, jeśli klikniesz „Wykonaj” zamiast użyć skrótu klawiaturowego, a skrypt ten nie zapisze całego pliku - tylko zaznaczony tekst. Ale zawsze można zmodyfikować skrypt, aby wykonać zapytanie, a następnie zaznaczyć wszystko ( CTRL+ A) przed kopiowaniem / zapisaniem.
Korzystanie z nowoczesnego edytora z funkcjami „znajdowania w plikach” umożliwia przeszukiwanie historii SQL. Możesz nawet wymyślić i zeskrobać swoje pliki do bazy danych SQLite3, aby zapytać o swoje zapytania.
źródło