Некоторые сложные запросы к базе данных могут нагружать ресурсы сервера базы данных на 100% в течение продолжительного времени. Это приводит к затруднению или невозможности работы других пользователей.
Виды сложных запросов:
- Неоптимально составленные запросы в динамических группах, блоках итогов.
- Сложные аналитические выборки в блоках итогов.
Назначение отдельного пула запросов — обработка сложных Select-запросов, которые не являются частью транзакции и вынесены в отдельный пул.
Использование отдельного пула запросов позволяет:
- Ограничить ресурсы, которые выделяются сервером базы данных, на обработку сложных Select-запросов.
- Уменьшить влияние обработки сложных Select-запросов на работу других пользователей и частей системы.
1. Настроить соединение отдельного пула запросов
MS SQL Server позволяет ограничивать выделяемые ресурсы с помощью встроенного инструмента — Resource Governor. Ранжирование соединений в Resource Governor базируется на информации о подключении, а не о конкретном запросе. Работу инструмента сложно увидеть на незагруженном сервере и на "коротких" запросах. Эффект от использования Resource Governor наблюдается, когда сервер баз данных загружен на 100%, а сложный запрос выполняется продолжительное время.
Чтобы настроить соединение отдельного пула запросов, откройте конфигурационный файл ConnectionStrings.config и для свойства App или Application Name допишите суффикс _Limited. Эта настройка позволяет использовать специальное соединение, которое разделит запросы на простые и потенциально сложные.
Виды соединений:
- Если в строке соединения конфигурационного файла ConnectionStrings.config для свойства App не указано значение, то для соединений будут использованы значения по умолчанию. Значение по умолчанию для общего соединения — ".Net SqlClient DataProvider", значение по умолчанию для соединения отдельного пула запросов — ".Net SqlClient DataProvider_Limited".
-
Если в строке соединения конфигурационного файла ConnectionStrings.config для свойства App указано значение "сreatio", то значение свойства для соединения отдельного пула запросов будет заменено значением "сreatio_Limited".
Таким образом, при загрузке дашбордов или фильтрации разделов с помощью динамических групп приложение создает дополнительные соединения с базой данных. В отличие от основных соединений, эти соединения в названиях содержат суффикс _Limited.
2. Включить функциональность отдельного пула запросов
Чтобы включить функциональность отдельного пула запросов, в файле ..\Terrasoft.WebApp\
3. Настроить инструмент Resource Governor
Настройка инструмента Resource Governor подразумевает настройку групп и пула.
Чтобы настроить инструмент Resource Governor, выполните SQL-скрипт.
Настройка инструмента подробно описана в официальной документации Resource Governor.
Для каждого нового соединения выполняется функция-классификатор, которая возвращает название группы.
4. Выполнить запрос в отдельном пуле запросов
Чтобы выполнить запрос в отдельном пуле запросов, получите специальный DBExecutor, передав в качестве дополнительного параметра значение Limited из перечисления QueryKind.
В приведенном ниже примере QueryKind — это аргумент метода EnsureDBConnection(). Значение аргумента приходит в клиентском ESQ-запросе, устанавливается в серверный ESQ-запрос и в Select-запрос.
Вызов EnsureDBConnection(QueryKind.General) эквивалентен вызову EnsureDBConnection() без указания QueryKind.
Таким образом, если при создании экземпляра класса Terrasoft.