Максимальный размер транзакции в PostgreSQL - PullRequest
25 голосов
/ 02 апреля 2009

У меня есть утилита в моем приложении, где мне нужно выполнить массовую загрузку операций INSERT, UPDATE & DELETE. Я пытаюсь создать транзакцию вокруг этого, чтобы после того, как эта система была вызвана и данные были переданы ей, было гарантировано, что она полностью или вообще не добавлена ​​в базу данных.

Проблема в том, какие здесь граничные условия? Сколько INSERT, UPDATE & DELETE я могу иметь в одной транзакции? Настраивается ли размер транзакции?

Любая помощь будет оценена.

-Спасибо

Ответы [ 4 ]

21 голосов
/ 28 августа 2009

В одной транзакции может быть выполнено около двух миллиардов команд (2 ^ 31, минус IIRC - незначительные накладные расходы. На самом деле, если подумать, это может быть 2 ^ 32 - думаю, командный счетчик не подписан).

Конечно, каждая из этих команд может изменять несколько строк.

21 голосов
/ 02 апреля 2009

Я не думаю, что есть максимальный объем работы, который может быть выполнен в транзакции. Данные продолжают добавляться в файлы таблиц, и в итоге транзакция либо фиксируется, либо откатывается: AIUI этот результат сохраняется в pg_clog; если он откатится назад, пространство будет в конечном итоге восстановлено вакуумом. Так что, например, текущая работа с транзакциями не сохраняется в памяти и сбрасывается во время фиксации, например.

18 голосов
/ 04 апреля 2009

Для проекта, над которым я работаю, я выполняю 20 миллионов INSERT. Я пробовал с одной большой транзакцией и с одной транзакцией на каждый миллион INSERT, и производительность выглядела точно так же.

PostgreSQL 8,3

0 голосов
/ 28 августа 2009

Я считаю, что максимальный объем работы ограничен размером вашего файла журнала. База данных никогда не позволит себе откатить, поэтому, если вы будете использовать все пространство журнала во время транзакции, она остановится, пока вы не выделите ей больше места или отката. Это в целом верно для всех баз данных.

Я бы порекомендовал разбивать ваши обновления на управляемые куски, которые занимают не более пары минут времени, чтобы вы знали, если есть проблема раньше (например, то, что обычно занимает 1 минуту, все еще работает через 10 минут ... хммм) , кто-то уронил индекс?)

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