Postgresql: ¿Qué significa realmente el valor default_statistics_target?


11

Aumentar el valor default_statistics_target puede hacer que su base de datos sea más rápida, especialmente después de analizar ...

Al leer este artículo, veo que https://discuss.pivotal.io/hc/en-us/articles/201581033-default-statistics-target-Explained

(...) a corto y en términos básicos, este parámetro controla la forma en que se recopilan las estadísticas, siendo el valor 1 las estadísticas menos estimadas / precisas y el valor 1000 son las estadísticas más precisas, obviamente con el gasto de tiempo / recursos (CPU, memoria, etc.) / espacio. Normalmente, el valor predeterminado es suficiente para obtener un plan preciso, pero si tiene una distribución de datos compleja / o se hace referencia a una columna en la consulta con bastante frecuencia, establecer un valor más alto podría ayudar a obtener mejores estadísticas en la tabla y, por lo tanto, un mejor plan para que se ejecute el optimizador.

Es una buena explicación, pero, por ejemplo, si configuro default_statistics_target = 1000, ¿qué significa realmente 1000? ¿Se están generando 1000 kilobytes de estadísticas? o tal vez se analizan 1000 filas de las tablas? Tal vez son 1000 columnas? o quizás 1000 segundos por cada análisis ...

Entonces, mi pregunta es cómo este número realmente está afectando el análisis o el planificador de consultas. Obviamente, entiendo que default_statistics_target = 1000 obtendrá más tiempo que 100, para ejecutar el análisis, y que 1000 generará mejores estadísticas ...

Respuestas:


16

Tomará muestras de las 300 * default_statistics_targetfilas de cada tabla. Utilizará esa muestra para determinar hasta default_statistics_targetlos valores más comunes para almacenar en esa matriz, y hasta los default_statistics_targetlímites del histograma para almacenar en esa matriz. Además de algunas otras estadísticas escalares, como el número de valores distintos.

Se eligió el multiplicador 300 porque alguna teoría estadística dice que es la cantidad que necesita muestrear por cada límite de histograma que desea calcular, para que sus límites de histograma muestreados tengan un nivel aceptable de incertidumbre.

La lista de valores más común se usa para ayudar al planificador a predecir la selectividad de las expresiones de igualdad, como where state='CA'. Los límites del histograma se usan para ayudar al planificador a predecir la selectividad de las expresiones de desigualdad o rango, comowhere income between 55000 and 64000


66
Para aquellos que estén interesados, este número 300 de magia se explica en el código fuente de Postgres aquí y el trabajo de investigación que se hace referencia en el que hay aquí
maahl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.