@beduin01

Как устроена обработка больших INSERT запросов?

Есть большой INSERT размером 10MB который по 5 таблицам раскидывает около десяти тысяч значений.

Подозреваю, что выполняется он не мгновенно. Что происходит с PostgreSQL если в момент его вставки прилетает еще несколько запросов?

Есть ли по умолчанию в PostgeSQL какие-то очереди?

Просто периодически мое приложение выполняющее вставку в БД возвращает мне 504 ошибку и очень похоже что случается именно такая ситуация.

Есть какие-то параметры влияющие на это? К примеру количество процессов PostgreSQL, чтобы пока один занят работал второй?
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 1
@galaxy
Подозреваю, что выполняется он не мгновенно. Что происходит с PostgreSQL если в момент его вставки прилетает еще несколько запросов?

Он их выполняет, по возможности параллельно (в PG по умолчанию на каждое соединение создается новый процесс на сервере). Блокировать друг друга они могут, но при определенных условиях. Надо очень сильно постараться, чтобы INSERT вызвал какую-нибудь блокировку.

Просто периодически мое приложение выполняющее вставку в БД возвращает мне 504 ошибку и очень похоже что случается именно такая ситуация.

Скорее всего, вы просто сильно загружаете машину, все начинает тормозить, возрастает потребление памяти, запросы начинают выполняться долго, накапливаются. Почему именно у вас ошибка, смотрите в логах. Может быть, таймауты, может быть, не хватает памяти или исчерпывается лимит соединений.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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