Трасса по-умолчанию в SQL Server

Трасса по-умолчанию в SQL Server

Перевод и дополнение статьи: What is this default trace you speak of?

Иногда я вижу упоминание трассы по-умолчанию на форумах, блогах, статьях, даже на событиях. Мой опыт работы с SQL Server более 15 лет и, к сожалению, мои знания о трассе по-умолчанию минимальны. Я знаю что она создаётся автоматически и перезаписывается время от времени. Не так много, правда?

Давайте попробуем узнать немного больше. В BOL можно найти следующее:

Трасса по-умолчанию предоставляет информацию о важных событиях и изменениях конфигурации SQL Server

Так же:

Трасса по-умолчанию будет удалена в будущих версиях SQL Server. Избегайте её использования и планируйте модификацию вашего приложения, где она уже используется. Вместо трассы по-умолчанию используйте Extended Events.

Уже скоро будет доступен SQL Server 2017 и трасса по-умолчанию до сих пор собирается, так что её изучение будет не полезным.

Начнём

Вы можете прочитать файл трассы по-умолчанию с помощью системной функции fn_trace_gettable:

SELECT *
FROM fn_trace_gettable
('C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\LOG\log.trc', default);
GO

Обратите внимание, что я использовал дефолтное месторасположение трассы по-умолчанию в SQL Server 2014, в случае именованного экземпляра или установки SQL Server в другую папку, вам нужно будет узнать место хранения трассы с помощью системной функции sys.fn_trace_getinfo. Переданное в функцию значение (1) возвращает информацию о трассе по-умолчанию, если вы хотите получить информацию обо всех запущенных трассах, то необходимо передать значение 0:

SELECT *
FROM sys.fn_trace_getinfo(1); -- 0 or default to get the list of all traces
GO

Более удобным способом посмотреть все зарегистрированные на сервере трассы является системное представление sys.traces:

SELECT *
FROM sys.traces
GO

DefaultTrace

Обратите внимание, что я обрезал вывод sys.traces. Узнать трассу по-умолчанию вы можете по значению 1 в столбце is_default. Далее следует рассмотреть столбец is_rollover, который означает что после заполнения файла (в нашем случае 20 мб, столбец max_size), трасса начнёт писать в новый. Когда таких файлов будет создано 5 (столбец max_files), трасса начнёт перезаписывать первый файл. Из полученной информации мы можем сделать вывод, что трасса по-умолчанию будет расти не более чем до 100 мб, после чего будет регулярно перезаписываться.

Что же именно нам может сказать трасса по-умолчанию? Мы можем это проверить с помощью функции sys.fn_trace_geteventinfo, которая покажет нам id событий трассы (в нашем случае мы опять передаём id трассы по-умолчанию равное 1). Я не волнуюсь о колоночках, поэтому использую SELECT DISTINCT eventid:

SELECT DISTINCT eventid
FROM sys.fn_trace_geteventinfo(1);
GO

Сопоставить id событий можно с информацией из BOL.

Несколько событий, которые включены в трассу по-умолчанию SQL Server 2012:

Event Id
18 Audit Server Starts and Stops
20 Audit Login Failed
22 ErrorLog
46 Object:Created
47 Object:Deleted
55 Hash Warning

Обратите внимание, что при рестарте SQL Server, если уже было создано 5 файлов трассы по-умолчанию, будет удалён самый старый файл и начнётся новый.

Вывод

Трасса по-умолчанию может быть очень полезна при анализе аварии в SQL Server, но будьте внимательные и после обнаружения проблемы сразу же скопируйте все файлы трассы в отдельную папку, чтобы не потерять их, так как сервер легко может удалить/перезаписать их.

Запись опубликована в рубрике В помощь администратору с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: