SQL-сервер ограничивает ресурсы для хранимой процедуры

У меня есть хранимая процедура, которая занимает слишком много ресурсов сервера. Я хочу ограничить этот запрос, чтобы он использовал не более, скажем, 10% ресурсов. Я слышал о регуляторе ресурсов, но он доступен только для предприятий. и версии для разработчиков. У меня стандартное издание. Есть ли другие альтернативы этому, кроме покупки лучшей версии сервера sql?


person user194076    schedule 02.04.2012    source источник
comment
Как насчет оптимизации запроса? Разбить на составные части? Проверка индексации?   -  person Andrew Barber    schedule 03.04.2012
comment
@AndrewBarber, К сожалению, это невозможно сделать, так как этот запрос должен выполняться медленно (это манипуляция с большими объемами данных в течение длительного периода времени, например, десятки тысяч вставок обновлений по всей базе данных). Может быть, можно как-то подтянуть ресурсы с другого сервера?   -  person user194076    schedule 03.04.2012
comment
Я не вижу, как оптимизация не поможет. На самом деле кажется, что разбить его на части именно здесь и нужно, в то время как другие могут быть полезны. Тот факт, что что-то должно быть «долгоиграющим», не означает, что оно не может быть эффективным. Это просто делает гораздо более важным то, что он работает эффективно.   -  person Andrew Barber    schedule 03.04.2012


Ответы (2)


Дайте определение «ресурсам». ИО? ПРОЦЕССОР? Память? Сеть? Раздор? Размер журнала? временная база данных? И вы не можете ответить «все». Вам необходимо указать, какие ресурсы сейчас потребляются процедурой.

Ваш вопрос слишком общий, чтобы на него можно было ответить. Не существует универсального механизма для ограничения «ресурсов» для запроса или процедуры, даже регулятор ресурсов ограничивает только некоторые ресурсы. Вы описываете свою проблему как манипулирование большими объемами данных в течение длительного периода времени, например, десятки тысяч вставок обновлений по всей базе данных, что указывает на необходимость пакетной обработки. Если процедура действительно делает то, что вы описываете, то регулирование ее выполнения, вероятно, не то, что вам нужно, потому что вы хотите уменьшить продолжительность транзакций (пакетов), а не увеличить ее.

И прежде всего: анализировали ли вы процедуру как потребление ресурсов процедурой как проблему производительности, используя такую ​​методологию, как Ожидание и очереди? Только после того, как вы это сделаете и процедура будет работать оптимально (т. е. она будет потреблять наименьшее количество ресурсов, необходимых для выполнения своей работы), вы можете рассмотреть вопрос о регулировании процедуры (и, скорее всего, к тому времени необходимость< /em> дроссель волшебным образом исчез).

person Remus Rusanu    schedule 02.04.2012
comment
Спасибо. Мне нужно разобраться во всем этом. - person user194076; 03.04.2012

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

person Philip Kelley    schedule 02.04.2012