Оптимизация трассировки SQL
Область применения: SQL Server
Выполнение трассировки SQL негативно сказывается на производительности, поскольку этот процесс использует системные ресурсы для сбора данных, однако существует несколько способов минимизировать потери производительности. Чтобы минимизировать потери производительности, вызванные трассировкой:
Рассмотрите возможность использования командной строки для запуска трассировок. Использование графического пользовательского интерфейса уменьшает производительность. Дополнительные сведения см. в разделе sp_trace_create (Transact-SQL).
Избегайте включения часто возникающих событий. По возможности сократите трассировку посредством особых классов событий и фильтров. Чем меньше собирается событий трассировки, тем меньше требуется ресурсов для ее поддержания.
Настройте трассировку на сбор только тех событий, которые содержат нужные данные. Например, если трассировка должна определить взаимоблокировки, включите в нее класс событий Lock:Deadlock , а не Lock:Acquired . Если включить в трассировку оба класса событий, она будет отвечать на каждую полученную блокировку и производительность снизится в два раза.
Старайтесь не собирать дублирующиеся данные. Например, собирая SQL:BatchStarted и SQL:BatchCompleted, можно минимизировать размер результирующего набора, выбрав только текстовые данные для класса событий SQL:BatchStarted .
Используйте фильтры в определении трассировки. Например, если известно, что определенный пользователь страдает от низкой производительности во время нерегламентированных запросов, создайте фильтр для LoginName. Настройте фильтр так, чтобы включались только события, в которых LoginName совпадает с именем пользователя.
Если необходимо запустить трассировку для событий, которая повлечет за собой серьезное снижение производительности, попробуйте следующие способы ограничения влияния на производительность сервера:
Запускайте трассировки на более короткие промежутки времени. Время выполнения трассировки можно контролировать, включив время остановки. Это особенно важно, если нет возможности ограничить классы событий или установить фильтры. Время остановки гарантирует, что потери производительности не будут бесконечными.
Ограничьте размер результатов трассировки. Можно ограничить размер результатов трассировки до максимального размера файла. Такая стратегия гарантирует, что потери производительности прекратятся, когда будет достигнуто ограничение по размеру файла (если не включена операция переключения на файл продолжения).
Ограничьте число возвращаемых событий. С помощью SQL Server Profiler можно ограничить количество событий, возвращаемых, сохранив трассировку в таблицу и задав максимальное количество строк. Результаты трассировки по-прежнему возвращаются на экран профилировщика SQL Server после достижения максимального количества строк, но стоимость записи результатов в таблицу устранена.