Postgresql: que signifie réellement la valeur default_statistics_target?

11

L'augmentation de la valeur default_statistics_target peut rendre votre base de données plus rapide, spécialement après l'analyse ....

En lisant cet article, je constate que https://discuss.pivotal.io/hc/en-us/articles/201581033-default-statistics-target-Explained

(...) en bref et en terme de base, ce paramètre contrôle la façon dont les statistiques sont collectées, la valeur 1 étant les statistiques les moins estimées / précises et la valeur 1000 étant les statistiques les plus précises, évidemment au détriment du temps / des ressources (CPU, mémoire, etc.) / espace. Normalement, la valeur par défaut est suffisante pour obtenir un plan précis, mais si vous avez une distribution de données complexe / ou qu'une colonne est référencée assez souvent dans la requête, la définition d'une valeur plus élevée peut aider à obtenir de meilleures statistiques sur la table et donc un mieux planifier l'exécution de l'optimiseur.

C'est une bonne explication, mais par exemple si je mets default_statistics_target = 1000 ce que 1000 signifie vraiment? Est-ce que 1000 kilo-octets de statistiques sont générés? ou peut-être qu'il s'agit de 1000 lignes des tableaux analysés? C'est peut-être 1000 colonnes? ou peut-être 1000 secondes pour chaque analyse ...

Ma question est donc de savoir comment ce nombre affecte réellement l'analyse ou le planificateur de requêtes? Évidemment, je comprends que default_statistics_target = 1000 obtiendra plus de temps que 100, pour exécuter l'analyse, et que 1000 générera de meilleures statistiques ...

Luciano Andress Martini
la source

Réponses:

16

Il échantillonnera les 300 * default_statistics_targetlignes de chaque table. Il utilisera cet échantillon pour déterminer default_statistics_targetles valeurs les plus courantes à stocker dans ce tableau et les default_statistics_targetlimites de l'histogramme à stocker dans ce tableau. Plus quelques autres statistiques scalaires, comme le nombre de valeurs distinctes.

Le multiplicateur 300 a été choisi parce que certaines théories statistiques disent que c'est le nombre d'échantillons que vous souhaitez calculer pour chaque borne d'histogramme que vous souhaitez calculer, afin que les limites de votre histogramme échantillonné aient un niveau d'incertitude acceptable.

La liste de valeurs la plus courante est utilisée pour aider le planificateur à prédire la sélectivité des expressions d'égalité, comme where state='CA'. Les limites de l'histogramme sont utilisées pour aider le planificateur à prédire la sélectivité des expressions d'inégalité ou de plage, commewhere income between 55000 and 64000

jjanes
la source
6
Pour ceux qui sont intéressés, ce nombre magique de 300 est expliqué dans le code source de postgres ici et le document de recherche référencé ici
maahl