postgreSQL - вопрос pg_class - PullRequest
1 голос
/ 17 апреля 2010

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

Почему postgres всегда полагается на pg_class?

1 Ответ

2 голосов
/ 09 мая 2010

pg_class не содержит всю статистику, необходимую планировщику, он содержит только информацию о структуре таблицы. Статистика, генерируемая командой анализ, содержит информацию о значениях, существующих в каждом столбце, поэтому при выполнении такой команды, как:

SELECT * FROM tab WHERE cname = "pg";

планировщик знает, сколько строк в таблице и сколько строк имеют значение "pg" в столбце cname. Эта информация не существует в pg_class.

Еще одна приятная особенность PostgreSQL - это автоочистка, в 99,9999% случаев она должна быть включена, поэтому база данных актуализирует статистику, как только изменяется некоторое (может быть определено в файле конфигурации) количество строк. Это сводит к минимуму вероятность неправильного плана выполнения из-за неверной статистики таблиц.

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