Как ограничить загрузку ЦП SQL-запросов? - PullRequest
1 голос
/ 07 января 2009

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

 Event Class            TextData                                           ApplicationName             CPU    Reads   Writes
    SQL:BatchCompleted     Select N'Testing Connection...'               SQLAgent - Alert Engine     1609     0 0
    SQL:BatchCompleted     EXECUTE msdb.sbo.sp_sqlagent_get_perf_counters SQLAgent - Alert Engine     1609     96    0

Эти ЦП такие же, как запрос, так что этот запрос на самом деле принимает 1609 * 3 = 4827?

То же самое происходит с делом:

Audit Logout

Могу ли я ограничить это? Я использую SQL Server 2005.

Ответы [ 4 ]

3 голосов
/ 07 января 2009

Прежде всего, то, что вы видите в SQL Profiler, является кумулятивным, поэтому вы не всегда можете просто сложить числа. Например, событие SPCompleted будет показывать общее время всех событий SPStatementCompleted, которые его составляют. Не уверен, что это ваша проблема здесь.

Единственный способ улучшить процессор - на самом деле улучшить ваш запрос . Убедитесь, что используются индексы, сведите к минимуму количество прочитанных строк и т. Д. Поработайте с опытным администратором базы данных по некоторым из этих методов или прочитайте книгу .

Единственное другое смягчение, которое я могу придумать, - это ограничить количество процессоров , на котором выполняется запрос (это называется Степень параллелизма или DOP ) , Вы можете установить это на уровне сервера или указать его на уровне запроса. Если у вас есть многопроцессорный сервер, это может гарантировать, что один длительный запрос не займет все процессоры в блоке - он оставит один или несколько процессоров свободными для выполнения других запросов.

2 голосов
/ 07 января 2009

Нет, это занимает 1609 миллисекунд процессора. Какова продолжительность? Бьюсь об заклад, то же самое или чуть-чуть больше, потому что сомневаюсь, что запросы агента SQL используют параллелизм.

Вы пытаетесь уменьшить фоновые процессы, используя процессор? Если это так, то вы уменьшаете функциональность, отключая агент SQL (например, без резервного копирования) и перезапуская SQL Server с помощью switch -x

Вы также не можете остановить события «Аудит выхода» ... это то, что происходит, когда вы отключаете или закрываете соединение.

Тем не менее, вы загружаете процессоры? Если это так, вам нужно будет различать «пользовательскую» память для запросов и «системную» память, используемую для подкачки или (не дай бог) генерации вашей четности на дисках RAID 5.

Высокая загрузка ЦП часто может быть решена за счет увеличения объема ОЗУ и лучшей конфигурации диска.

2 голосов
/ 07 января 2009

В SQL Server 2008 появился новый «регулятор ресурсов», который может помочь. Я не знаю, используете ли вы SQL Server 2008 или нет, но вы можете посмотреть здесь

1 голос
/ 24 октября 2010

Это проблема строки подключения. Если выход из системы аудита занимает слишком много ресурсов процессора, попробуйте поиграть с другой строкой подключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...