Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7957611

Browse files
authored
loop execute() lock_timeout tuning; docs added
1 parent 0508d75 commit 7957611

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

‎procedures/loop_execute/loop_execute.sql‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,11 @@ create or replace procedure loop_execute(
5151
time_max numeric default 1, -- средняя длительность выполнения CTE запроса на каждой итерации цикла, в секундах, рекомендуется 1
5252
-- примерно столько времени CTE запрос может блокировать другие запросы на запись тех же ресурсов
5353
-- от значения этого параметра устанавливаются следующие ограничения:
54-
-- lock_timeout = time_max * 1000 / 10
54+
-- lock_timeout = time_max * 1000 / 3
5555
-- statement_timeout = time_max * 1000 * 3
5656
-- если происходит ошибка, связанная с этими ограничениями, batch_rows уменьшается и CTE запрос через некоторое время повторяется
57+
-- Without lock_timeout CTE migration could block other writes WHILE TRYING to grab a lock on the resource (table/record/index/etc.)
58+
-- Without statement_timeout CTE migration could block other writes AFTER grab a lock on the resource (table/record/index/etc.)
5759
is_rollback boolean default false, -- откатывать запрос после каждого выполнения в цикле (для целей тестирования)
5860
cycles_max integer default null, -- максимальное количество циклов (для целей тестирования)
5961
total_table_rows integer default null, -- сколько всего записей в таблице (для вычисления прогресса выполнения)
@@ -246,8 +248,8 @@ BEGIN
246248
EXIT WHEN cycles >= cycles_max;
247249
cycles := cycles + 1;
248250

249-
PERFORM set_config('lock_timeout', (time_max * 10^3 / 10)::text, true);
250-
PERFORM set_config('statement_timeout', (time_max * 10^3 * 3)::text, true);
251+
PERFORM set_config('lock_timeout', ceil(time_max * 10^3 / 3)::text, true);
252+
PERFORM set_config('statement_timeout', ceil(time_max * 10^3 * 3)::text, true);
251253

252254
IF is_disable_triggers THEN
253255
set local session_replication_role = 'replica';

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /