Postgresql: Was bedeutet der Wert default_statistics_target wirklich?

11

Durch Erhöhen des Werts default_statistics_target kann Ihre Datenbank schneller werden, insbesondere nach der Analyse ....

Beim Lesen dieses Artikels sehe ich, dass https://discuss.pivotal.io/hc/en-us/articles/201581033-default-statistics-target-Explained

(...) Kurz und kurz gesagt, dieser Parameter steuert die Art und Weise, wie die Statistiken erfasst werden, wobei Wert 1 die am wenigsten geschätzte / genaue Statistik und der Wert 1000 die genaueste Statistik ist, offensichtlich auf Kosten von Zeit / Ressourcen (CPU, Speicher usw.) / Speicherplatz. Normalerweise reicht der Standardwert aus, um einen genauen Plan zu erhalten. Wenn Sie jedoch häufig über eine komplexe Datenverteilung verfügen oder auf eine Spalte in der Abfrage verwiesen wird, kann das Festlegen eines höheren Werts dazu beitragen, eine bessere Statistik für die Tabelle und damit für a zu erhalten Besserer Plan für die Ausführung des Optimierers.

Es ist eine gute Erklärung, aber wenn ich zum Beispiel default_statistics_target = 1000 setze, was bedeutet 1000 dann wirklich? Es werden 1000 Kilobyte Statistiken generiert? oder sind es vielleicht 1000 Zeilen der analysierten Tabellen? Vielleicht sind es 1000 Spalten? oder vielleicht 1000 Sekunden für jede Analyse ...

Meine Frage ist also, wie sich diese Zahl wirklich auf die Analyse oder den Abfrageplaner auswirkt. Offensichtlich verstehe ich, dass default_statistics_target = 1000 mehr Zeit als 100 für das Ausführen von analyse erhält und dass 1000 bessere Statistiken generiert ...

Luciano Andress Martini
quelle

Antworten:

16

Es werden 300 * default_statistics_targetZeilen aus jeder Tabelle abgetastet. Mit diesem Beispiel werden bis zu default_statistics_targetden häufigsten Werten ermittelt, die in diesem Array gespeichert werden sollen, und bis zu default_statistics_targetHistogrammgrenzen, die in diesem Array gespeichert werden sollen. Plus ein paar andere skalare Statistiken, wie die Anzahl der unterschiedlichen Werte.

Der Multiplikator 300 wurde gewählt, weil einige statistische Theorien besagen, wie viele pro pro Histogrammgrenze, die Sie berechnen möchten, abgetastet werden müssen, damit Ihre abgetasteten Histogrammgrenzen ein akzeptables Maß an Unsicherheit aufweisen.

Die häufigste Werteliste wird verwendet, um dem Planer zu helfen, die Selektivität von Gleichheitsausdrücken wie vorherzusagen where state='CA'. Die Histogrammgrenzen werden verwendet, um dem Planer zu helfen, die Selektivität von Ungleichungs- oder Bereichsausdrücken wie vorherzusagenwhere income between 55000 and 64000

jjanes
quelle
6
Für diejenigen , die daran interessiert sind, diese 300 magische Zahl ist in Postgres Quellcode erklärt hier und die wissenschaftliche Arbeit da drin ist verwiesen hier
maahl