Profiler – очень мощный инструмент трассировки, упрощающий отладку новых процедур, решение проблем с доступом к данным, оптимизацию быстродействия и т.д.
Термины, связанные с трассировкой:
- Events/События – набор действий, происходящих на сервере, например, запуск хранимой процедуры, сходные события объединены в категории событий
- Data columns/Поля – каждое конкретное событие имеет набор свойств
- Filters/Фильтры – позволяют выбирать только нужные события
Пользоваться трассировщиком по умолчанию может пользователь SA и члены роли SYSADMINS. Начиная с версии SQL Server 2005 можно делегировать эти права любому пользователю:
1: -- разрешаем трассировку для LoginID
2: USE master3: GRANT ALTER TRACE TO LoginID4: GO5:6: -- запрещаем трассировку для LoginID
7: USE master8: REVOKE ALTER TRACE TO LoginID9: GO10:
Для установки профайлера на рабочую станцию нужно воспользоваться дистрибутивом MS SQL, выбрав соответствующую опцию. Никаких дополнительных лицензий для этого не требуется.
Profiler после запуска начинает собирать информацию в соответствии с выбранными событиями, полями и фильтрами. Все это делается в памяти компьютера, на котором он запущен. Поэтому запускать длительную трассировку на основном сервере не лучшая идея, лучше сделать это с рабочей станции.
Запускаем трассировку:
- Запускаем Profiler
- File –> New Trace
- Connect to server – стандартное окно выбора сервера (трассировать можно базу данных или аналитические сервисы)
- Trace Properties – окно настройки трассировки. Позволяет выбрать события, поля событий и фильтры. Стоит обратить внимание на поле “Use the template”. Шаблон в данном случае – это набор предопределенных для характерных ситуаций настроек трассировки. Можно добавить свои шаблоны.
- Жмем кнопку Run
Стандартный набор команд позволяет поставить на паузу, остановить, запустить трассировку. Результаты трассировки можно сохранить (File –> Save).
Трассировка реально помогает в понимании как работает сервер баз данных, облегчает поиск проблем. Для эффективного использования, конечно, нужно понимать значение событий и полей, в связи с этим хочу обратить внимание, что если в окне Trace Properties навести курсор на поле либо на событие, то внизу окна появится краткое описание события и поля.
В завершении несколько фактов о Profiler:
- Начиная с версии MS SQL 2005 появилось новое событие Deadlock Graph. Оно значительно упрощает поиск взаимных блокировок, т.к. в графическом виде показывает суть конфликта.
- Профайлер позволяет не только захватывать события, но и воспроизводить их обратно на сервере. Так что его можно использовать как простейшее средство стрессового тестирования.
- Трассировку можно запускать программным способом. Причем в профайлере есть команда, облегчающая создания скрипта запуска трассировки. Для этого нужно просто запустить профайлер, создать новую трассировку, выставив все необходимы параметры. После этого запустите команду File –> Export –> Script Trace Definition –> For SQL Server… Вот для примера скрипт, созданный на основе стандартного шаблона:
1: /****************************************************/
2: /* Created by: SQL Server 2008 Profiler */
3: /* Date: 17/07/2009 16:36:59 */
4: /****************************************************/
5:6:7: -- Create a Queue
8: declare @rc int9: declare @TraceID int10: declare @maxfilesize bigint11: declare @DateTime datetime12:13: set @DateTime = '2009-07-20 18:00:00.000'14: set @maxfilesize = 515:16: -- Please replace the text InsertFileNameHere, with an appropriate
17: -- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension
18: -- will be appended to the filename automatically. If you are writing from
19: -- remote server to local drive, please use UNC path and make sure server has
20: -- write access to your network share
21:22: exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, @Datetime23: if (@rc != 0) goto error24:25: -- Client side File and Table cannot be scripted
26:27: -- Set the events
28: declare @on bit29: set @on = 130: exec sp_trace_setevent @TraceID, 14, 1, @on31: exec sp_trace_setevent @TraceID, 14, 9, @on32: exec sp_trace_setevent @TraceID, 14, 6, @on33: exec sp_trace_setevent @TraceID, 14, 10, @on34: exec sp_trace_setevent @TraceID, 14, 14, @on35: exec sp_trace_setevent @TraceID, 14, 11, @on36: exec sp_trace_setevent @TraceID, 14, 12, @on37: exec sp_trace_setevent @TraceID, 15, 15, @on38: exec sp_trace_setevent @TraceID, 15, 16, @on39: exec sp_trace_setevent @TraceID, 15, 9, @on40: exec sp_trace_setevent @TraceID, 15, 17, @on41: exec sp_trace_setevent @TraceID, 15, 6, @on42: exec sp_trace_setevent @TraceID, 15, 10, @on43: exec sp_trace_setevent @TraceID, 15, 14, @on44: exec sp_trace_setevent @TraceID, 15, 18, @on45: exec sp_trace_setevent @TraceID, 15, 11, @on46: exec sp_trace_setevent @TraceID, 15, 12, @on47: exec sp_trace_setevent @TraceID, 15, 13, @on48: exec sp_trace_setevent @TraceID, 17, 1, @on49: exec sp_trace_setevent @TraceID, 17, 9, @on50: exec sp_trace_setevent @TraceID, 17, 6, @on51: exec sp_trace_setevent @TraceID, 17, 10, @on52: exec sp_trace_setevent @TraceID, 17, 14, @on53: exec sp_trace_setevent @TraceID, 17, 11, @on54: exec sp_trace_setevent @TraceID, 17, 12, @on55: exec sp_trace_setevent @TraceID, 10, 15, @on56: exec sp_trace_setevent @TraceID, 10, 16, @on57: exec sp_trace_setevent @TraceID, 10, 9, @on58: exec sp_trace_setevent @TraceID, 10, 17, @on59: exec sp_trace_setevent @TraceID, 10, 2, @on60: exec sp_trace_setevent @TraceID, 10, 10, @on61: exec sp_trace_setevent @TraceID, 10, 18, @on62: exec sp_trace_setevent @TraceID, 10, 11, @on63: exec sp_trace_setevent @TraceID, 10, 12, @on64: exec sp_trace_setevent @TraceID, 10, 13, @on65: exec sp_trace_setevent @TraceID, 10, 6, @on66: exec sp_trace_setevent @TraceID, 10, 14, @on67: exec sp_trace_setevent @TraceID, 12, 15, @on68: exec sp_trace_setevent @TraceID, 12, 16, @on69: exec sp_trace_setevent @TraceID, 12, 1, @on70: exec sp_trace_setevent @TraceID, 12, 9, @on71: exec sp_trace_setevent @TraceID, 12, 17, @on72: exec sp_trace_setevent @TraceID, 12, 6, @on73: exec sp_trace_setevent @TraceID, 12, 10, @on74: exec sp_trace_setevent @TraceID, 12, 14, @on75: exec sp_trace_setevent @TraceID, 12, 18, @on76: exec sp_trace_setevent @TraceID, 12, 11, @on77: exec sp_trace_setevent @TraceID, 12, 12, @on78: exec sp_trace_setevent @TraceID, 12, 13, @on79: exec sp_trace_setevent @TraceID, 13, 1, @on80: exec sp_trace_setevent @TraceID, 13, 9, @on81: exec sp_trace_setevent @TraceID, 13, 6, @on82: exec sp_trace_setevent @TraceID, 13, 10, @on83: exec sp_trace_setevent @TraceID, 13, 14, @on84: exec sp_trace_setevent @TraceID, 13, 11, @on85: exec sp_trace_setevent @TraceID, 13, 12, @on86:87:88: -- Set the Filters
89: declare @intfilter int90: declare @bigintfilter bigint91:92: exec sp_trace_setfilter @TraceID, 6, 0, 6, N'User1'93: exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - b384f0b7-6852-4661-86de-2da85ca97fdf'94: -- Set the trace status to start
95: exec sp_trace_setstatus @TraceID, 196:97: -- display trace id for future references
98: select TraceID=@TraceID99: goto finish100:101: error:102: select ErrorCode=@rc103:104: finish:105: go106:
Комментариев нет:
Отправить комментарий