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

Содержание раздела
  1. Указание для СУБД

Ограничить время исполнения запроса на выгрузку данных можно только на этапе его исполнения в СУБД — с помощью специального указания. Возможность доступна для запросов к СУБД 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).