Rejestrowanie zapytań i innych T-SQL

14

Chciałbym wiedzieć, czy SQL Server 2008 R2 ma domyślny schemat rejestrowania SELECTinstrukcji (lub inny T-SQL w tym zakresie).

Jeśli tak, gdzie mogę to zobaczyć? Jeśli nie, jak mogę to skonfigurować?

Xian Garcia
źródło

Odpowiedzi:

18

Domyślnie aktywność programu SQL Server nie jest rejestrowana w oczekiwany sposób. Niektóre operacje zapisu są rejestrowane w Dzienniku transakcji , ale zależy to również od konfiguracji baz danych.

Istnieją cztery główne opcje śledzenia aktywności SELECT na serwerze:

  1. Za pomocą programu SQL Server Profiler można połączyć się z serwerem i obserwować określoną aktywność.

  2. Można utworzyć śladu po stronie serwera , aby rejestrować aktywność do pliku śledzenia na serwerze, które następnie mogą być odczytywane przez SQL Server Profiler, lub za pomocą fn_trace_gettable załadować go do tabeli w celu dalszej analizy.

  3. Można użyć rozszerzonych zdarzeń , które oferują więcej funkcji niż śledzenie po stronie serwera i które firma Microsoft zaleca zamiast śledzenia po stronie serwera począwszy od SQL Server 2012.

  4. Możesz użyć trybu audytu C2 .

Za pomocą programu SQL Server Profiler można skonfigurować śledzenie (wybrać określone zdarzenia, filtry itp.), A następnie wykonać skrypt za pomocą menu Plik i wykonać na serwerze, aby utworzyć śledzenie po stronie serwera, zgodnie z opisem tutaj .

Nathan Jolly
źródło
5

Istnieje kilka rozwiązań i technik SQL Server do śledzenia instrukcji SELECT

  1. Specjalnie opracowane procedury składowane i funkcje - Uwaga: ta metoda wymaga zaawansowanej wiedzy na temat programowania T-SQL oraz dodatkowego utrzymania procedur składowanych i funkcji (np. W przypadku zmiany schematu bazy danych). Możesz zobaczyć więcej w tym artykule: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. Technologia śledzenia SQL Server - możesz przeczytać instrukcję krok po kroku w tym artykule: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. Korzystanie z funkcji SQL Server Audit - Funkcja Audit (wprowadzona w SQL Server 2008) może śledzić zdarzenia serwera i bazy danych oraz korzysta z technologii Extended Events. Ale inspekcja na poziomie bazy danych jest obsługiwana tylko przez wersje SQL Server Developer i Enterprise.

  4. Korzystanie z narzędzi innych firm, takich jak ApexSQL Audit lub Idera SQL Compliance Manager

Jaycob Przeczytaj
źródło
3

Domyślnie nie rejestruje instrukcji SELECT. Możesz zapoznać się z moją odpowiedzią tutaj, aby uzyskać więcej informacji na temat kontroli instrukcji SELECT.

Ponadto domyślnie nie rejestruje nawet instrukcji T-SQL, zamiast tego rejestruje WYDARZENIA, takie jak Zmiana pamięci serwera, Niepowodzenie logowania do audytu, Zdarzenie dodawania audytu itp. Można znaleźć tutaj więcej informacji wraz ze skryptami T-SQL, aby wyodrębnić informacje z Domyślny ślad.

Kin Shah
źródło
3

Dopóki nie obchodzi Cię, kto uruchomił zapytania, istnieje kilka sposobów wyświetlania metryk dotyczących zapytań uruchamianych w systemie. Jest to ograniczone do danych od ostatniego restartu i potencjalnie przez presję pamięci podręcznej (lub innej pamięci) w zależności od tego, o ile głębiej rozszerzysz zapytanie.

;WITH x AS
(
  SELECT 
    [text] = SUBSTRING(t.[text], 
      (s.statement_start_offset/2)+1, 
      COALESCE(NULLIF(s.statement_end_offset,-1),DATALENGTH(t.[text])*2)
       -(s.statement_start_offset/2)), 
    s.execution_count, s.last_execution_time,
    s.max_logical_reads, s.max_elapsed_time
  FROM sys.dm_exec_query_stats AS s
  CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
)
SELECT * FROM x
WHERE LTRIM([text]) LIKE 'SELECT%';

Być może zechcesz rozszerzyć wzorzec - na przykład zignoruje to zapytania zaczynające się od ;WITHironicznie i może przechwytywać, SELECT INTOa nawet przypisywać zmienne, które nie odwołują się do rzeczywistych tabel.

Jednak jeśli potrzebujesz bardziej szczegółowych informacji, odpowiedź Nathana jest dobrym początkiem (z wyjątkiem sytuacji, gdy zamierzasz użyć śledzenia, NIE używaj Profilera). Pamiętaj tylko, że rejestrowanie każdego zapytania w systemie nie będzie darmowe.

Aaron Bertrand
źródło
Zgadzam się z powyższym stwierdzeniem. Byłbym niezwykle ostrożny w monitorowaniu wszystkich wybranych instrukcji w bazie danych.
Zane
Wypróbowałem twoje rozwiązanie - czy to możliwe, że dostarcza tylko Procedury, Funkcje i Wyzwalacze i żadna z wykonywanych adhoc instrukcji SQL?
Magier
@Magier Nie, sys.dm_exec_query_stats powinien raportować tylko o instrukcjach zapytań (ad hoc lub z modułu).
Aaron Bertrand