Postgresql: Apa nilai default_statistics_target sebenarnya?

11

Meningkatkan nilai default_statistics_target dapat membuat database Anda lebih cepat, khususnya setelah menganalisis ....

Membaca artikel ini saya melihat bahwa https://discuss.pivotal.io/hc/en-us/articles/201581033-default-statistics-target-Explained

(...) dalam jangka pendek dan dasar, parameter ini mengontrol cara statistik dikumpulkan, dengan nilai 1 adalah statistik yang paling tidak diperkirakan / akurat dan nilai 1000 adalah statistik paling akurat, jelas dengan mengorbankan waktu / sumber daya (CPU, memori, dll) / ruang. Biasanya nilai default cukup untuk mendapatkan rencana yang akurat, tetapi jika Anda memiliki distribusi data yang kompleks / atau kolom sering direferensikan dalam kueri, maka menetapkan nilai yang lebih tinggi mungkin membantu dalam mendapatkan statistik yang lebih baik di atas meja dan karenanya rencana yang lebih baik untuk dijalankan oleh pengoptimal.

Ini adalah penjelasan yang baik, tetapi sebagai contoh jika saya menetapkan default_statistics_target = 1000 apa arti 1000 sebenarnya? Apakah 1000 kilobyte statistik yang dihasilkan? atau mungkin 1.000 baris tabel dianalisis? Mungkin 1000 kolom? atau mungkin 1000 detik untuk setiap analisis ...

Jadi pertanyaan saya adalah bagaimana angka ini benar-benar memengaruhi analisis atau perencana kueri? Jelas saya mengerti bahwa default_statistics_target = 1000 akan mendapatkan lebih banyak waktu dari 100, untuk menjalankan analisis, dan bahwa 1000 akan menghasilkan statistik yang lebih baik ...

Luciano Andress Martini
sumber

Jawaban:

16

Ini akan mencicipi 300 * default_statistics_targetbaris dari setiap tabel. Ini akan menggunakan sampel itu untuk menentukan default_statistics_targetnilai-nilai paling umum hingga untuk menyimpan dalam array itu, dan hingga default_statistics_targethistogram terikat untuk menyimpan dalam array itu. Ditambah beberapa statistik skalar lainnya, seperti jumlah nilai yang berbeda.

Pengganda 300 dipilih karena beberapa teori statistik mengatakan itu adalah berapa banyak yang Anda butuhkan untuk sampel per setiap ikatan histogram yang ingin Anda hitung, agar batas histogram sampel Anda memiliki tingkat ketidakpastian yang dapat diterima.

Daftar nilai yang paling umum digunakan untuk membantu perencana memprediksi selektivitas ekspresi kesetaraan, seperti where state='CA'. Batas histogram digunakan untuk membantu perencana memprediksi selektivitas ekspresi ketidaksetaraan atau rentang, sepertiwhere income between 55000 and 64000

jjanes
sumber
6
Bagi mereka yang tertarik, 300 angka ajaib ini dijelaskan dalam kode sumber postgres di sini dan makalah penelitian yang direferensikan ada di sini
maahl