Эффективность PostgreSQL Autocommit для запросов SELECT - PullRequest
1 голос
/ 05 марта 2019

Я использую Psycopg2 для выдачи многих SELECT запросов к моей базе данных Postgres.Эти запросы имеют небольшой размер и отправляются с высокой частотой.

Чтобы самостоятельно управлять транзакциями (потому что я ленив), я установил autocommit = True в настройках сеанса.

Редактировать: между запросами нет длительной паузы, нет манипуляций с данными, и курсор закрывается сразу после того, как я прекращаю делать запросы.

Я хотел бы знать: при выдаче SELECT запросов навысокая частота, есть ли снижение производительности при использовании autocommit?

Использование Postgres 9.6 и Psycopg 2.7.7.И да , я использую подготовленные заявления.

1 Ответ

1 голос
/ 05 марта 2019

Автокоммит - это правильно, потому что:

  • Нет снижения производительности, потому что транзакция только для чтения не должна записывать в журнал транзакций (WAL).

  • Блокировки не удерживаются, как прокомментировал a_horse_with_no_name. Даже SELECT содержит блокировку n ACCESS SHARE на таблице, которая блокирует такие команды, как TRUNCATE, DROP TABLE и усечение в вакууме.

  • Драйвер не должен отправлять эти дополнительные операторы BEGIN и COMMIT, которые вызовут ненужные циклические переходы клиент-сервер.

...