Журнали запитів та інші T-SQL


14

Мені хотілося б знати, чи є схема SQL Server 2008 R2 за замовчуванням схема реєстрації SELECTвисловлювань (або будь-який інший T-SQL для цього питання).

Якщо так, то де я можу це побачити? Якщо ні, як я можу це налаштувати?

Відповіді:


18

За замовчуванням діяльність SQL Server не реєструється так, як ви очікували. Деяка активність запису записується в Журнал транзакцій , але це також залежить від налаштування ваших баз даних.

Існує чотири основні варіанти відстеження активності SELECT на сервері:

  1. Ви можете використовувати Profiler SQL Server для підключення до вашого сервера та спостереження за певною діяльністю, як це відбувається.

  2. Ви можете створити трасування на стороні сервера, щоб увійти активність у файл сліду на сервері, який потім може бути прочитаний програмою SQL Server Profiler, або за допомогою fn_trace_gettable завантажити його в таблицю для подальшого аналізу.

  3. Ви можете використовувати розширені події , які пропонують більше функціональних можливостей, ніж сліди на сервері, і які рекомендує Microsoft замість слідів на стороні сервера, починаючи з SQL Server 2012.

  4. Ви можете використовувати режим аудиту С2 .

Ви можете використовувати Profiler SQL Server для встановлення сліду (виберіть конкретні події, фільтри тощо), які ви хочете), а потім скриптуйте його за допомогою меню Файл та виконайте його на сервері, щоб створити трасування на стороні сервера, як описано тут .


5

Існує кілька рішень і методів SQL Server для відстеження операторів SELECT

  1. Спеціально розроблені збережені процедури та функції - Примітка. Цей метод вимагає розширених знань про програмування T-SQL та додаткового підтримання збережених процедур та функцій (наприклад, у випадку зміни схеми бази даних). Більше ви можете побачити в цій статті: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. Технологія слідування SQL Server - ви можете прочитати покрокову інструкцію в цій статті: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. Використання функції аудиту SQL Server - Функція аудиту (представлена ​​в SQL Server 2008) дозволяє відслідковувати як події сервера, так і бази даних, і використовує технологію Extended Events. Але аудит рівня баз даних підтримується лише виданнями для розробників SQL Server і Enterprise.

  4. Використання сторонніх інструментів, таких як ApexSQL Audit або Idera SQL Compliance Manager


3

За замовчуванням він не реєструє операторів SELECT. Ви можете посилатися на мою відповідь тут для отримання більш детальної інформації щодо аудиту операцій SELECT.

Крім того , за замовчуванням , навіть не увійти оператори T-SQL, замість цього він реєструє події , як сервер зраджує пам'ять, Аудит входу не вдалася, аудит Addlogin подій, і т.д. , і ви можете знайти більш детальну інформацію тут разом зі сценаріями T-SQL в інформаційній виписці з Трасування за замовчуванням.


3

Поки вам не байдуже, хто виконував запити, є кілька способів побачити показники запитів, які виконуються у вашій системі. Це обмежується даними з моменту останнього перезавантаження та, можливо, тиском кешу (або іншої пам'яті) тиском залежно від того, наскільки глибше ви розширите запит.

;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%';

Ви можете розширити шаблон - наприклад, це буде ігнорувати запити, які починаються з ;WITHіронії, і, можливо, захоплюють SELECT INTOі навіть змінні призначення, які не посилаються на фактичні таблиці.

Однак якщо вам потрібна більш детальна інформація, ніж відповідь, відповідь Натана - це хороший початок (за винятком випадків, коли ви збираєтеся використовувати слід, НЕ використовуйте Profiler). Пам'ятайте лише, що ведення кожного запиту проти вашої системи не буде безкоштовним.


Я погоджуюся з вищезазначеним твердженням, я би був неймовірно обережним щодо моніторингу всіх вибраних операторів у вашій базі даних.
Зейн

Я спробував ваше рішення - чи можливо це забезпечує лише процедури, функції та тригери, і жоден з adhoc виконаних операторів sql?
Magier

@Magier Ні, sys.dm_exec_query_stats повинен звітувати лише про заяви запитів (ad hoc або з модуля).
Аарон Бертран
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.