Ограничить использование базы данных сайта - PullRequest
1 голос
/ 13 января 2012

Для начала - у меня есть 2 отдельных веб-сайта и база данных (IIS 7.5, ASP.NET и SQL Server 2008, использующие Linq-To-SQL для доступа к базе данных).

У меня есть отдельный административный веб-сайт, который иногда во время использования должен запускать длительные операции (более 10 секунд) с базой данных. Проблема заключается в том, что эти операции приводят к тому, что процесс sqlserver достигает 100% ЦП, а затем другой основной веб-сайт клиента не может получить быстрый доступ к базе данных - существуют некоторые задержки в доступе к базе данных.

Я в порядке с этими административными операциями, которые длятся в 2, 4 или более раз, поскольку они имеют более низкий приоритет.

Я пытался использовать параметр CPU Limit на AppPool в IIS, но это не помогает, поскольку процесс w3wp.exe никогда не использует большую часть CPU ... скорее это sqlservr.exe. Заранее спасибо за ваши предложения!

Ответы [ 2 ]

2 голосов
/ 14 января 2012

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

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

OPTION (MAXDOP 1);

Да, это может заставить вас чувствовать себя немного грязно, но остальные ваши процессоры будут освобождены для работы над вашими более важными запросами.

Реальный ответ - настроить ваши запросы администратора. То, что они работают долго, не означает, что это хорошо для вашего сервера или опыта ваших пользователей. Вы никогда не сможете полностью изолировать их от влияния других запросов, выполняемых на коробке, особенно если у вас высокая загрузка ЦП, которая компенсирует медленный ввод-вывод. Ввод-вывод не имеет никаких регуляторов в регуляторе ресурсов - вы можете управлять только процессором и памятью, но не 100%.

1 голос
/ 14 января 2012

Звучит так, будто вы хотите взглянуть на Resource Governor, который встроен в SQL-сервер начиная с SQL 2008. Ссылка BOL должна помочь вам начать работу.

http://msdn.microsoft.com/en-us/library/bb933866(v=SQL.100).aspx

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

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

/* Classifier function */
CREATE FUNCTION dbo.rgov_classifier_db ()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @rgWorkloadGrp sysname
    IF SUSER_SNAME() = 'adminWebsiteDB'
        SET @rgWorkloadGrp = 'workloadGroupName'
    ELSE
        SET @rgWorkloadGrp = 'defaultWorkloadGroupName'
    RETURN @rgWorkloadGrp
END;
GO
/* Register the function with Resource Governor and then start Resource Governor. */
ALTER RESOURCE GOVERNOR
    WITH (CLASSIFIER_FUNCTION = dbo.rgov_classifier_db);
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...