@beduin01

Как выполняются UPDATE запросы?

Потребовалось заапдейтить большую таблицу. Такие вопросы.
1. Есть ли разница разбит ли UPDATE запрос на части? Типа вместо одного большого 10 более мелких. К примеру с разграничением по датам. Если есть, то какая причина?
2. Если запросы разбиты через точку с запятой выполняются ли они в рамках одной транзакции или точка с запятой ограничивает транзакцию? Речь про SQL менеджер.

Второй вопрос возник потому что:
select * from pg_stat_activity

Показывает (столбец query), что у выполняется одновременно сразу 10 запросов:
update table1 set a='1' where ... ;
update table2 set a='1' where ... ;
update table3 set a='1' where ... ;

Получается что они не поочередно, а в рамках одной большой транзакции и если я прерву на последнем, то все откатится и будет считаться что update не сработал?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
@galaxy
1. Есть ли разница разбит ли UPDATE запрос на части? Типа вместо одного большого 10 более мелких. К примеру с разграничением по датам. Если есть, то какая причина?

Смотря, разница в чем вас интересует. Разумеется, одни большой запрос - это одна большая транзакция, а маленькие можно выполнять в нескольких. Думаю, разницу тут не надо объяснять?
Одна большая транзакция может создавать нагрузку на сервер, в частности, блокировать строки таблицы и параллельные запросы, с ними работающие. Также будет непрерывно расти WAL в течение всего времени работы транзакции. Для очень больших апдейтов это критично.

2. Если запросы разбиты через точку с запятой выполняются ли они в рамках одной транзакции или точка с запятой ограничивает транзакцию? Речь про SQL менеджер.

Это зависит от клиента. Если клиент отправляет их в одном сообщении протокола (за один вызов PQexec, например), то в одной транзакции.
Клиент, в теории, может и сам пытаться разбивать запрос на части и отправлять по одному.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы