Ускорить обработку сложных запросов к базе данных

Продукты
Все продукты

Данная функциональность доступна в Creatio начиная с версии 7.18.4.

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

  • сложные фильтры на страницах и в динамических группах;
  • сложные аналитические выборки в аналитике разделов;
  • сложные пользовательские запросы, реализованные средствами разработки.

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

Настройка перенаправления тяжелых запросов состоит из следующих шагов:

  1. Создать реплику базы данных с доступом только для чтения.
  2. Настроить в Creatio доступ к созданной реплике базы данных.

Шаг 1. Создать реплику базы данных.  

Создание реплик базы данных отличается для различных СУБД. Подробно этот процесс описан в документации вендоров:

Шаг. 2. Настроить перенаправление тяжелых запросов  

  1. Настройте перенаправление тяжелых запросов на реплику базы данных. Эта настройка выполняется для Creatio .NET Core в файле Terrasoft.WebHost.dll.config; для Creatio NET Framework в файле web.config.

    1. Установите признак UseQueryKinds.

      <add key="UseQueryKinds" value="true" />
      
    2. Добавьте значение replicaConnectionStringName="db_Replica" в параметр db general.

      <general connectionStringName="db" replicaConnectionStringName="db_Replica" securityEngineType="Terrasoft.DB.MSSql.MSSqlSecurityEngine, Terrasoft.DB.MSSql" executorType="Terrasoft.DB.MSSql.MSSqlExecutor, Terrasoft.DB.MSSql" engineType="Terrasoft.DB.MSSql.MSSqlEngine, Terrasoft.DB.MSSql" metaEngineType="Terrasoft.DB.MSSql.MSSqlMetaEngine, Terrasoft.DB.MSSql" metaScriptType="Terrasoft.DB.MSSql.MSSqlMetaScript, Terrasoft.DB.MSSql" typeConverterType="Terrasoft.DB.MSSql.MSSqlTypeConverter, Terrasoft.DB.MSSql" enableRetryDBOperations="false" retryDBOperationFactoryType="Terrasoft.DB.MSSql.MSSqlRetryOperationFactory, Terrasoft.DB.MSSql" binaryPackageSize="1048576" currentSchemaName="dbo" enableSqlLog="false" sqlLogQueryTimeElapsedThreshold="5000" sqlLogRowsThreshold="100" useOrderNullsPosition="false" maxEntitySchemaNameLength="128" /> 
      		
      <general connectionStringName="db" replicaConnectionStringName="db_Replica" maxEntitySchemaNameLength="128" useOrderNullsPosition="false" sqlLogRowsThreshold="100" sqlLogQueryTimeElapsedThreshold="5000" enableSqlLog="false" currentSchemaName="public" binaryPackageSize="1048576" typeConverterType="Terrasoft.DB.PostgreSql.PostgreSqlTypeConverter, Terrasoft.DB.PostgreSql" metaScriptType="Terrasoft.DB.PostgreSql.PostgreSqlMetaScript, Terrasoft.DB.PostgreSql" metaEngineType="Terrasoft.DB.PostgreSql.PostgreSqlMetaEngine, Terrasoft.DB.PostgreSql" engineType="Terrasoft.DB.PostgreSql.PostgreSqlEngine, Terrasoft.DB.PostgreSql" maxAnsiJoinCount="0" isCaseInsensitive="true" executorType="Terrasoft.DB.PostgreSql.PostgreSqlExecutor, Terrasoft.DB.PostgreSql" securityEngineType="Terrasoft.DB.PostgreSql.PostgreSqlSecurityEngine, Terrasoft.DB.PostgreSql"/> 
      
  2. Настройте доступ Creatio к реплике базы данных. Для этого добавьте параметр db_Replica в файл ConnectionStrings.config:

    <add name="db_Replica" connectionString="Data Source=[ Имя сервера базы данных ]; Initial Catalog=[ Имя базы данных ]; Persist Security Info=True; MultipleActiveResultSets=True; Integrated Security=SSPI; Pooling = true; Max Pool Size = 100; Async = true" />
    		
    <add name="db_Replica" connectionString="Server=[ Имя сервера базы данных ];Port=[ Порт сервера базы данных ];Database=[ Имя базы данных ];User ID=[ Пользователь PostgreSQL для подключения к базе данных ];password=[ Пароль пользователя PostgreSQL ];Timeout=500; CommandTimeout=400;MaxPoolSiz>
    	
    <general connectionStringName="db" replicaConnectionStringName="db_Replica" currentSchemaName=" [SCHEMA NAME] " binaryPackageSize="1048576" typeConverterType="Terrasoft.DB.Oracle.OracleTypeConverter, Terrasoft.DB.Oracle" metaScriptType="Terrasoft.DB.Oracle.OracleMetaScript, Terrasoft.DB.Oracle" metaEngineType="Terrasoft.DB.Oracle.OracleMetaEngine, Terrasoft.DB.Oracle" engineType="Terrasoft.DB.Oracle.OracleEngine, Terrasoft.DB.Oracle" maxAnsiJoinCount="0" isCaseInsensitive="true" executorType="Terrasoft.DB.Oracle.OracleExecutor, Terrasoft.DB.Oracle" securityEngineType="Terrasoft.DB.Oracle.OracleSecurityEngine, Terrasoft.DB.Oracle"/>
    
    <add name="db_Replica" connectionString="Data Source=(DESCRIPTION = 
     (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = [ Database server name ])(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = [ Oracle service name ]) (SERVER = DEDICATED)));User Id=[ Schema name ];Password=[ Schema password ];Statement Cache Size = 300" />