PostgreSQL - возможно ли распараллелить ОБНОВЛЕНИЕ? - PullRequest
0 голосов
/ 26 сентября 2018

Я выполняю ОБНОВЛЕНИЕ, которое затрагивает миллионы строк, и это довольно много времени.Есть ли способ распараллелить это в PostgreSQL?

Я исследовал это и ничего не нашел, но у меня есть пара идей, к которым я обращаюсь.

1) Будет ли PostgreSQL делать это автоматически?Если да, то отлично.

2) Если PostgreSQL не поддерживает это, можно открыть несколько одновременных подключений и выполнить ОБНОВЛЕНИЕ параллельно, но убедитесь, что ОБНОВЛЕНИЯ не влияют на те же строки(нет перекрывающихся данных, разделяемых между запросами)?Меня беспокоит то, что PostgreSQL заставляет каждое UPDATE быть атомарной транзакцией и не допускает одновременных обновлений, даже если они влияют на разные строки.Правильно ли мое беспокойство?

Заранее спасибо, Джеймс.

1 Ответ

0 голосов
/ 26 сентября 2018

Меня беспокоит то, что PostgreSQL заставляет каждое ОБНОВЛЕНИЕ быть атомарной транзакцией и не допускает одновременных обновлений, даже если они влияют на разные строки.

Давайте проверим

create table test(
id int,
name text
);

insert into test
values
(1, 'a'),
(2, 'b');

Затем запустите эту транзакцию:

do $$
begin
    update test set
    name  = 'aa'
    where id = 1;

    perform pg_sleep(15);
end;
$$ language plpgsql

, а затем запустите эту транзакцию как другую транзакцию

do $$
begin
    update test set
    name  = 'bb'
    where id = 2;
end;
$$ language plpgsql

Вторая транзакция выполняется немедленно, а первая еще выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...