1. Glosar/

default_statistics_target

default_statistics_target (PostgreSQL)

default_statistics_target este parametrul PostgreSQL care defineste numarul de esantioane colectate de comanda ANALYZE pentru a construi statisticile fiecarei coloane. Valoarea implicita este 100.

Cum functioneaza #

PostgreSQL esantioneaza un anumit numar de valori pentru fiecare coloana si le foloseste pentru a construi doua structuri:

  • Most common values (MCV): lista valorilor celor mai frecvente, cu frecventele respective
  • Histograma: distributia valorilor ramase, impartita in bucket-uri de populatie egala

Parametrul default_statistics_target determina cate elemente vor avea aceste structuri. Cu valoarea implicita de 100, histograma va avea 100 de bucket-uri si lista MCV va contine pana la 100 de valori.

Cand trebuie crescut #

Pentru tabele mici sau cu distributie uniforma, 100 de esantioane sunt suficiente. Pentru tabele mari cu distributie asimetrica (skewed) — unde putine valori domina majoritatea randurilor — 100 de esantioane pot da o reprezentare distorsionata, ducand optimizatorul la estimari de cardinalitate gresite.

Se poate creste target-ul la nivel de coloana individuala:

ALTER TABLE orders ALTER COLUMN status SET STATISTICS 500;
ANALYZE orders;

Valori intre 500 si 1000 imbunatatesc semnificativ calitatea estimarilor pe coloane cu distributie neuniforma.

Limite practice #

Peste 1000 beneficiul este marginal si ANALYZE-ul insusi devine mai lent, pentru ca trebuie sa esantioneze mai multe randuri si sa construiasca structuri mai mari. Este o reglare fina: trebuie aplicata doar coloanelor care cauzeaza efectiv estimari gresite, nu tuturor coloanelor din toate tabelele.