Postgresql: Что на самом деле означает значение default_statistics_target?

11

Увеличение значения default_statistics_target может сделать вашу базу данных быстрее, особенно после анализа ....

Читая эту статью, я вижу, что https://discuss.pivotal.io/hc/en-us/articles/201581033-default-statistics-target-Explained

(...) вкратце и в основном термине, этот параметр управляет способом сбора статистики, при этом значение 1 является наименьшей оценочной / точной статистикой, а значение 1000 является наиболее точной статистикой, очевидно, за счет затрат времени / ресурсов. (Процессор, память и т. Д.) / Пробел. Обычно значение по умолчанию является достаточным для получения точного плана, но если у вас сложное распределение данных / или на запрос часто ссылаются на столбец, то установка более высокого значения может помочь получить лучшую статистику по таблице и, следовательно, лучше планировать выполнение оптимизатора.

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

Итак, мой вопрос, как это число действительно влияет на анализ или планировщик запросов? Очевидно, я понимаю, что default_statistics_target = 1000 получит больше времени, чем 100, для выполнения анализа, и что 1000 будет генерировать лучшую статистику ...

Лучано Андресс Мартини
источник

Ответы:

16

Это будет образец 300 * default_statistics_targetстрок из каждой таблицы. Он будет использовать этот пример для определения default_statistics_targetнаиболее распространенных значений для хранения в этом массиве и до default_statistics_targetграниц гистограммы для хранения в этом массиве. Плюс несколько других скалярных статистических данных, например, количество различных значений.

Множитель 300 был выбран, потому что некоторая статистическая теория говорит, что это то, сколько вам нужно сделать выборку для каждой границы гистограммы, которую вы хотите вычислить, чтобы границы выбранной гистограммы имели приемлемый уровень неопределенности.

Наиболее распространенный список значений используется, чтобы помочь планировщику предсказать избирательность выражений равенства, например where state='CA'. Границы гистограммы используются, чтобы помочь планировщику предсказать избирательность выражений неравенства или диапазона, напримерwhere income between 55000 and 64000

jjanes
источник
6
Для тех, кто интересуется, это магическое число 300 объясняется в исходном коде
Postgres