Ограничение времени исполнения запроса

Содержание раздела
  1. Общий тайм-аут запроса
  2. Указание для СУБД
  3. Как определяется итоговое ограничение для СУБД

Система поддерживает следующие способы ограничения время исполнения:

Возможность доступна для запросов к СУБД ADP, ADB и ADQM.

Общий тайм-аут запроса

Общий тайм-аут запроса определяет максимальное время исполнения всего запроса с момента получения запроса системой и до возврата последней порции данных в ответе.

Тайм-аут учитывает все этапы обработки запроса, включая этап исполнения в СУБД. Если он истек в процессе обработки запроса, оставшиеся этапы обработки пропускаются и возвращается ошибка.

Общий тайм-аут задается:

  • [в HTTP-запросах] с помощью параметра fetchTimeoutMs;
  • [в JDBC-запросах] с помощью метода setQueryTimeout.

Указание для СУБД

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

Указание зависит от типа СУБД:

  • [ADP, ADB] Set(statement_timeout <значение>) — значение задается в миллисекундах; при наличии расширения pg_hint_plan в СУБД также может быть задано в секундах (s), минутах (min), часах (h) или днях (d);
  • [ADQM] Set(max_execution_time <значение>) — значение задается в секундах.

Примеры указаний:

-- ADP: значение задано в миллисекундах
/*+ Set(statement_timeout 30000) */
SELECT * FROM marketing.sales
DATASOURCE_TYPE = 'adp2';

-- ADP: значение задано в секундах — формат поддерживается только при наличии pg_hint_plan
/*+ Set(statement_timeout 30s) */
SELECT * FROM marketing.sales
DATASOURCE_TYPE = 'adp2';

-- ADB: значение задано в миллисекундах
/*+ Set(statement_timeout 30000) */
SELECT * FROM marketing.sales
DATASOURCE_TYPE = 'adb2';

-- ADB: значение задано в минутах — формат поддерживается только при наличии pg_hint_plan
/*+ Set(statement_timeout 0.5min) */
SELECT * FROM marketing.sales
DATASOURCE_TYPE = 'adb2';

-- ADQM: значение задано в секундах
/*+ Set(max_execution_time 30) */
SELECT * FROM marketing.sales
DATASOURCE_TYPE = 'adqm2';

Подробнее о синтаксисе и обработке указаний в разделе Указания для планировщика запросов СУБД (hints).

Как определяется итоговое ограничение для СУБД

Итоговое ограничение на время исполнения запроса, передаваемое системой в СУБД, зависит от следующих факторов, как показано в таблице ниже:

  • типа СУБД;
  • способа задания ограничения: указание или общий тайм-аут запроса;
  • [для ADP, ADB] значения параметра конфигурации [ADP\|ADB]_PG_HINT_PLAN_EXTENSION_ENABLED.
Тип СУБД Указание Общий тайм-аут запроса [ADP\|ADB]_
PG_HINT_PLAN_
EXTENSION_ENABLED*
Итоговое ограничение, передаваемое в СУБД
ADP, ADB, ADQM – – false/true/отсутствует Отсутствует
ADP, ADB, ADQM – + false/true/отсутствует Общий тайм-аут минус время предобработки** запроса
ADP, ADB, ADQM + – false/true/отсутствует Значение указания
ADP, ADB + + false Оба значения передаются в СУБД последовательно как SET LOCAL statement_timeout:
  1. значение указания;
  2. общий тайм-аут минус время предобработки запроса (переопределяет значение указания)
ADP, ADB + + true Два независимых ограничения:
  • общий тайм-аут минус время предобработки запроса (передается как SET LOCAL statement_timeout);
  • значение указания (передается «как есть» в составе блока указаний для pg_hint_plan).
Порядок их разрешения зависит от СУБД
ADQM + + false/true/отсутствует Оба значения передаются в СУБД последовательно как часть конструкции SETTINGS:
  1. значение указания;
  2. общий тайм-аут в секундах минус время предобработки запроса (переопределяет значение указания)

* Параметры игнорируются для ADQM.

** Под временем предобработки запроса понимается время, уже потраченное системой к моменту передачи запроса в СУБД.