Если у вас установлена версия SQL Server 2005 и выше, то скорее всего эта версия работает со стандартным трассировщиком. В этой статье мы рассмотрим стандартный трассировщик в SQL Server и узнаем, как извлекать ценную информацию о событиях из файлов трассировки, созданных этим фоновым процессом.
Что такое стандартный трассировщик?
Стандартный трассировщик – это предопределенное определение трассировщика профиля, которое поставляется с установкой SQL Server. Он работает как трассировщик на стороне сервера и автоматически запускается при запуске SQL Server. Стандартный трассировщик фиксирует различные события, такие как запуск и остановка сервера, неудачные попытки входа, создание и удаление объектов, изменение памяти и многое другое.
Включение стандартного трассировщика
По умолчанию стандартный трассировщик включен при установке SQL Server. Однако вы можете проверить его статус, выполнив следующий запрос:
SELECT * FROM sys.configurations WHERE name like 'default trace enabled'Если значение в столбце value_in_use равно 1, то стандартный трассировщик настроен на автоматическое выполнение. Если он не работает, вы можете настроить его для автоматического запуска, выполнив следующие команды:
USE master;
GO
EXEC sp_configure 'show advanced option', '1';
RECONFIGURE;
GO
EXEC sp_configure 'default trace enabled', 1;
RECONFIGURE;Обратите внимание, что для изменения настройки включения стандартного трассировщика необходимо установить параметр show advanced option равным 1. После настройки стандартного трассировщика он будет автоматически запускаться при запуске SQL Server.
Просмотр информации о стандартном трассировщике
Информация о стандартном трассировщике записывается в файл трассировки профиля. Чтобы определить местоположение файла трассировки, вы можете выполнить следующий запрос:
SELECT * FROM sys.traces WHERE id = 1;Столбец path указывает текущий записываемый файл трассировки.
Существует два способа просмотра информации, собранной стандартным трассировщиком: с использованием SQL Server Profiler или TSQL-кода.
Использование SQL Server Profiler
Чтобы открыть файл трассировки с помощью SQL Server Profiler, выполните следующие действия:
- Запустите SQL Server Profiler.
- Выберите меню “File”, затем наведите указатель на “Open” и выберите “Trace File”.
- Перейдите к местоположению файла трассировки или введите полное имя пути.
- Нажмите “Open”.
Файл трассировки будет открыт в графическом интерфейсе Profiler, позволяя прокручивать и искать зафиксированные события.
Использование TSQL-кода
Другой способ прочитать файл трассировки – использовать функцию “::fn_trace_gettable” в TSQL. Следующий код демонстрирует, как просмотреть информацию в текущем файле трассировки по умолчанию:
DECLARE @filename nvarchar(1000);
-- Получить имя текущего стандартного трассировщика
SELECT @filename = cast(value as nvarchar(1000)) FROM ::fn_trace_getinfo(default) WHERE traceid = 1 and property = 2;
-- Просмотр текущего файла трассировки
SELECT * FROM ::fn_trace_gettable(@filename, default) AS ftg
INNER JOIN sys.trace_events AS te ON ftg.EventClass = te.trace_event_id
ORDER BY ftg.StartTime;Этот код отобразит все различные события трассировки, зафиксированные в текущем файле трассировки.
Анализ событий стандартного трассировщика
Стандартный трассировщик фиксирует широкий спектр событий, позволяя получить представление о различных аспектах вашего экземпляра SQL Server. Вот несколько примеров:
Изменения схемы
Стандартный трассировщик фиксирует события при создании или удалении объекта. Вы можете использовать event_id 46 и 47, чтобы идентифицировать эти события и определить, кто их выполнил. Следующий код демонстрирует, как выбрать события создания и удаления объектов:
DECLARE @filename nvarchar(1000);
-- Получить имя текущего стандартного трассировщика
SELECT @filename = cast(value as nvarchar(1000)) FROM ::fn_trace_getinfo(default) WHERE traceid = 1 and property = 2;
-- Просмотр текущего файла трассировки
SELECT * FROM ::fn_trace_gettable(@filename, default) AS ftg
INNER JOIN sys.trace_events AS te ON ftg.EventClass = te.trace_event_id
WHERE (ftg.EventClass = 46 or ftg.EventClass = 47)
AND DatabaseName <> 'tempdb'
AND EventSubClass = 0
ORDER BY ftg.StartTime;Этот код поможет вам определить создания и удаления объектов в любой базе данных, кроме “tempdb”.
События автоматического увеличения размера
Если ваши файлы базы данных настроены на автоматическое увеличение при нехватке места, стандартный трассировщик будет фиксировать события автоматического увеличения размера. Следующий код позволяет найти каждое событие автоматического увеличения размера базы данных:
DECLARE @filename nvarchar(1000);
-- Получить имя текущего стандартного трассировщика
SELECT @filename = cast(value as nvarchar(1000)) FROM ::fn_trace_getinfo(default) WHERE traceid = 1 and property = 2;
-- Найти события автоматического увеличения размера в текущем файле трассировки
SELECT
ftg.StartTime,
te.name as EventName,
DB_NAME(ftg.databaseid) AS DatabaseName,
ftg.Filename,
(ftg.IntegerData * 8) / 1024.0 AS GrowthMB,
(ftg.duration / 1000) as DurMS
FROM ::fn_trace_gettable(@filename, default) AS ftg
INNER JOIN sys.trace_events AS te ON ftg.EventClass = te.trace_event_id
WHERE (ftg.EventClass = 92 OR ftg.EventClass = 93)
ORDER BY ftg.StartTime;Этот код предостав