Postgresql: cosa significa veramente il valore default_statistics_target?


11

Aumentare il valore default_statistics_target può rendere più veloce il tuo database, specialmente dopo l'analisi ....

Leggendo questo articolo vedo che https://discuss.pivotal.io/hc/en-us/articles/201581033-default-statistics-target-Explained

(...) in breve e in termini di base, questo parametro controlla il modo in cui le statistiche sono raccolte, con il valore 1 che è la statistica meno stimata / accurata e il valore 1000 è la statistica più accurata, ovviamente con il dispendio di tempo / risorse (CPU, memoria ecc.) / Spazio. Normalmente il valore predefinito è sufficiente per ottenere un piano accurato, ma se si dispone di una distribuzione dei dati complessa / o una colonna viene citata nella query abbastanza spesso, l'impostazione di un valore più elevato potrebbe aiutare a ottenere statistiche migliori sulla tabella e quindi un pianificare meglio l'esecuzione dell'ottimizzatore.

È una buona spiegazione, ma per esempio se imposto default_statistics_target = 1000 cosa significa veramente 1000? Sono generati 1000 kilobyte di statistiche? o forse sono 1000 righe delle tabelle analizzate? Forse sono 1000 colonne? o forse 1000 secondi per ogni analisi ...

Quindi la mia domanda è: come questo numero sta davvero influenzando l'analisi o il planner delle query? Ovviamente capisco che default_statistics_target = 1000 otterrà più tempo di 100, per l'esecuzione dell'analisi, e che 1000 genererà statistiche migliori ...

Risposte:


16

Campionerà le 300 * default_statistics_targetrighe da ogni tabella. Utilizzerà quel campione per determinare default_statistics_targeti valori più comuni da archiviare in quell'array e fino default_statistics_targetai limiti dell'istogramma da memorizzare in quell'array. Più alcune altre statistiche scalari, come il numero di valori distinti.

Il moltiplicatore 300 è stato scelto perché una teoria statistica afferma che è il numero di quanti campioni è necessario campionare per ciascun limite di istogramma che si desidera calcolare, in modo che i limiti di istogramma campionati abbiano un livello accettabile di incertezza.

L'elenco di valori più comuni viene utilizzato per aiutare il pianificatore a prevedere la selettività delle espressioni di uguaglianza, come where state='CA'. I limiti dell'istogramma vengono utilizzati per aiutare il pianificatore a prevedere la selettività della disuguaglianza o le espressioni di intervallo, comewhere income between 55000 and 64000


6
Per coloro che sono interessati, questo numero 300 magia è spiegato nel codice sorgente di Postgres qui e il documento di ricerca fa riferimento c'è qui
maahl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.