Исчерпание OID в pg_class при частом создании временных таблиц - PullRequest
0 голосов
/ 02 марта 2020

Имеет ли PostgreSQL механизм работы с быстро растущим счетчиком OID в таблице pg_catalog.pg_class, особенно когда этот счетчик перебирает максимальное количество уникальных целочисленных значений.

У меня очень занятая база данных с многие параллельные процессы, которые основаны на частом создании временных таблиц через CREATE TEMP TABLE ... ON COMMIT DROP. Большинство транзакций очень короткие, и временные таблицы автоматически удаляются в конце, но счетчик на pg_catalog.pg_class.oid быстро движется вперед.

Что произойдет, когда этот счетчик сделает полный "круг вокруг целого числа" ? Будет ли он разумно избегать коллизий, и если да, то будет ли это стоить производительности или других негативных побочных эффектов?

Я просмотрел PostgreSQL документацию и нашел информацию о OID обходе транзакции, но нет ссылок на то, что происходит, когда pg_catalog таблицы исчерпывают все IOD.

1 Ответ

1 голос
/ 03 марта 2020

OID - не ваше беспокойство. PostgreSQL позволит избежать коллизий при назначении и OID для таблицы.

Возможно, проблема в раздутии таблицы. Всякий раз, когда временная таблица создается и удаляется, это приводит к мертвым кортежам в таблицах pg_attributes. Таким образом, вы должны убедиться, что эта таблица каталога пылесосится агрессивно (низкий autovacuum_vacuum_cost_delay), чтобы она не раздувалась.

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