Влияет ли SQL-профилировщик на производительность сервера?

11

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

Джон Сайгель
источник
5
да. Это зависит от того, как и где вы его запустите. Правильно выполненный способ может составить всего несколько процентов дополнительной нагрузки.
Митч Пшеничный
3
Расширенные события могут быть более легким вариантом.
Мартин Смит

Ответы:

10

SQL Server Profiler - это графический интерфейс, который использует трассировку SQL Server через клиентскую часть. Из-за этой природы, да, вы можете потенциально увидеть слабое или сильное влияние на производительность в зависимости от окружающей среды.

SQL Server Profiler предназначен главным образом для быстрого наблюдения за тем, что происходит на сервере (при условии, что сервер базы данных может справиться с дополнительной задержкой). Он не предназначен для работы в течение длительного времени. Для более длинных трассировок используйте трассировку на стороне сервера или расширенные события.

Томас Стрингер
источник
+1 даже очень короткая трассировка профилировщика, в зависимости от многих факторов, может нанести вред серверу.
Аарон Бертран
3

Если вы используете трассировку на стороне сервера , влияние на производительность можно минимизировать.

Дэвид Брабант
источник
Мой сервер и база данных установлены на одном компьютере. Теперь, если я запускаю sql profiler через "Microsoft SQL studio studio -> Tools-> SQL profiler", то какого снижения производительности я могу ожидать, и это зависит от каких факторов?
Он основан на том, насколько занят ваш сервер, сколько событий и сколько столбцов состоит из вашей трассировки, и ваша фильтрация. Фильтрация может влиять в обоих направлениях - с одной стороны, она может уменьшить количество строк, возвращаемых в пользовательский интерфейс (часть, которая действительно причиняет вред профилировщику больше, чем трассировка на стороне сервера), но с другой стороны, если вы выбрали плохо Фильтр (например textdata LIKE '%foo%') может иметь противоположный эффект. Слишком много переменных, чтобы обеспечить какое-то волшебное ожидание, вам просто придётся попробовать. Вы действительно должны использовать трассировку на стороне сервера.
Аарон Бертран
Попробуйте эту ссылку, если вы не можете получить доступ к оригиналу.
Марк Лопес
3

Все, что сказано в предыдущих постерах, правильно. Profiler - это приложение, которое когда-то использовало DMO и теперь использует SMO для захвата событий трассировки. Это добавляет огромное количество накладных расходов по сравнению с простым использованием трассировки на стороне сервера.

SMO - это API, который добавляет дополнительный «уровень» в процесс трассировки вместе с клиентским приложением Profiler. Трассировка на стороне сервера будет считывать события трассировки непосредственно из очереди транзакций, в результате чего служебные данные незначительны.

Мне удалось запустить трассировку на стороне сервера в средах SQL Server, которые обрабатывают более 10000 транзакций в секунду. Использование Profiler в тех же средах поставит экземпляр базы данных на колени. В любой производственной среде, если вам нужно отслеживать активность базы данных, всегда используйте трассировку на стороне сервера. Профилировщик убьет экземпляр базы данных.

Кристофер В. Сабо
источник
2

Да, SQL Server Profiler влияет на производительность.

Когда вы отслеживаете с помощью графического интерфейса пользователя, все события синхронно обрабатываются и фильтруются, поэтому такие факторы, как нагрузка на сервер, задержка в сети, какие события вы собираете и даже где хранятся собранные события, вносят вклад в издержки.

Как предлагали другие ответы, предпочтительнее использовать трассировку на стороне сервера вместо графического интерфейса. Однако этот метод устарел , и вместо него следует использовать расширенные события . (Примечание: даже при использовании расширенных событий, которые являются более легкими, чем трассировка, все равно возможно добавить нежелательную нагрузку на сервер - см. Список во втором моем абзаце, чтобы подумать о том, как минимизировать накладные расходы при настройке события сессия.)

В случае сильно загруженного сервера вы должны быть очень осторожны с собираемой информацией, так как сам процесс измерения может повлиять на исследуемую проблему.

Джон Сайгель
источник
0

SQL Server Profiler работает в два этапа: сначала вы указываете ему регистрировать все запросы. Затем вы запускаете некоторые типичные транзакции (или просто позволяете им регистрироваться против производства). Это создает «тестовую нагрузку». Затем вы выполняете фактическое профилирование (анализ) с использованием тестовой нагрузки.

Ведение журнала не очень дорого, особенно по сравнению со стоимостью самих запросов.

egrunin
источник
Мой сервер и база данных установлены на одном компьютере. Теперь, если я запускаю sql profiler через "Microsoft SQL studio studio -> Tools-> SQL profiler", то какого снижения производительности я могу ожидать, и это зависит от каких факторов?