2015-11-04 4 views
1

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

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

+0

", которые позволяют пользователям определять свои собственные запросы для извлечения данных для отчетов и списков в приложении" - есть ваша первая ошибка! Зачем? потому что «... иногда эти запросы они написали очень тяжелый (а иногда и ошибочный)». Помимо того факта, что вы должны быть осторожны с SQL-инъекцией, и ваши пользователи могут свободно писать плохие запросы (и, возможно, неверные), искать " ресурсный губернатор ». –

+0

Похоже, вы хотите посмотреть на Resource Governor https://msdn.microsoft.com/en-us/library/bb933866(v=sql.120).aspx –

ответ

0

Указатель ресурсов упоминается уже в комментариях. Еще одно решение, о котором я могу думать, - это использование групп высокой готовности SQL Server.

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

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

Любая функциональность, которую мы знали, что для этого нужен только доступ только для чтения, мы могли подключиться к группе доступности и добавить в строку подключения ApplicationIntent=READONLY, что означает, что мы используем реплику только для чтения, а не первичную, оставляя основной для регулярных транзакций. (IIRC, по умолчанию основной принимает любое соединение для чтения/записи, так что вы должны настроить первичный, чтобы не принимать соединения только для чтения)

Во всяком случае, пиная точку для чтения до об этом здесь: https://msdn.microsoft.com/en-us/library/ms190202.aspx

Смежные вопросы