Я сталкиваюсь с проблемой, когда SQL Server 2008 не удается из-за высокой нагрузки. Мне нужно найти этот случай загрузки и оптимизировать код, чтобы он мог справиться с нагрузкой. В интернете я обнаружил, что средство профилирования SQL можно использовать для отслеживания взаимодействий с базой данных, которые впоследствии можно проанализировать, чтобы найти точную точку возникновения проблемы. Я также нашел, как мы можем запустить SQL Server Profiler. Но теперь мой вопрос заключается в том, что, запустив SQL Server Profiler, я собираюсь повлиять на производительность сервера?
sql-server
sql-server-2008
performance
profiler
Джон Сайгель
источник
источник
Ответы:
SQL Server Profiler - это графический интерфейс, который использует трассировку SQL Server через клиентскую часть. Из-за этой природы, да, вы можете потенциально увидеть слабое или сильное влияние на производительность в зависимости от окружающей среды.
SQL Server Profiler предназначен главным образом для быстрого наблюдения за тем, что происходит на сервере (при условии, что сервер базы данных может справиться с дополнительной задержкой). Он не предназначен для работы в течение длительного времени. Для более длинных трассировок используйте трассировку на стороне сервера или расширенные события.
источник
Если вы используете трассировку на стороне сервера , влияние на производительность можно минимизировать.
источник
textdata LIKE '%foo%'
) может иметь противоположный эффект. Слишком много переменных, чтобы обеспечить какое-то волшебное ожидание, вам просто придётся попробовать. Вы действительно должны использовать трассировку на стороне сервера.Все, что сказано в предыдущих постерах, правильно. Profiler - это приложение, которое когда-то использовало DMO и теперь использует SMO для захвата событий трассировки. Это добавляет огромное количество накладных расходов по сравнению с простым использованием трассировки на стороне сервера.
SMO - это API, который добавляет дополнительный «уровень» в процесс трассировки вместе с клиентским приложением Profiler. Трассировка на стороне сервера будет считывать события трассировки непосредственно из очереди транзакций, в результате чего служебные данные незначительны.
Мне удалось запустить трассировку на стороне сервера в средах SQL Server, которые обрабатывают более 10000 транзакций в секунду. Использование Profiler в тех же средах поставит экземпляр базы данных на колени. В любой производственной среде, если вам нужно отслеживать активность базы данных, всегда используйте трассировку на стороне сервера. Профилировщик убьет экземпляр базы данных.
источник
Да, SQL Server Profiler влияет на производительность.
Когда вы отслеживаете с помощью графического интерфейса пользователя, все события синхронно обрабатываются и фильтруются, поэтому такие факторы, как нагрузка на сервер, задержка в сети, какие события вы собираете и даже где хранятся собранные события, вносят вклад в издержки.
Как предлагали другие ответы, предпочтительнее использовать трассировку на стороне сервера вместо графического интерфейса. Однако этот метод устарел , и вместо него следует использовать расширенные события . (Примечание: даже при использовании расширенных событий, которые являются более легкими, чем трассировка, все равно возможно добавить нежелательную нагрузку на сервер - см. Список во втором моем абзаце, чтобы подумать о том, как минимизировать накладные расходы при настройке события сессия.)
В случае сильно загруженного сервера вы должны быть очень осторожны с собираемой информацией, так как сам процесс измерения может повлиять на исследуемую проблему.
источник
SQL Server Profiler работает в два этапа: сначала вы указываете ему регистрировать все запросы. Затем вы запускаете некоторые типичные транзакции (или просто позволяете им регистрироваться против производства). Это создает «тестовую нагрузку». Затем вы выполняете фактическое профилирование (анализ) с использованием тестовой нагрузки.
Ведение журнала не очень дорого, особенно по сравнению со стоимостью самих запросов.
источник