Перевод и дополнение статьи: 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
Обратите внимание, что я обрезал вывод 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, но будьте внимательные и после обнаружения проблемы сразу же скопируйте все файлы трассы в отдельную папку, чтобы не потерять их, так как сервер легко может удалить/перезаписать их.