PostgreSQL versi 9.4 yang baru (belum dirilis pada saat penulisan ini) akan menambah waktu perencanaan ke dalam EXPLAIN
dan EXPLAIN ANALYZE
, sehingga Anda dapat menggunakannya.
Untuk versi yang lebih lama, asumsi Anda benar, cara yang lebih baik untuk menentukan waktu perencanaan adalah dengan menjalankan EXPLAIN
sederhana (tidak ada ANALYZE
) dan memeriksa waktu yang diperlukan, di psql
Anda dapat melakukannya dengan mengaktifkan \timing
(Saya biasanya melakukannya di ~/.psqlrc
).
Tim peretas PostgreSQL telah membahas tentang meningkatkannya ke nilai yang lebih besar . Tapi sepertinya mereka tidak bisa menjamin bahwa itu akan baik untuk semua kasus.
Masalahnya adalah perencanaan untuk menemukan urutan bergabung terbaik untuk N
tabel membutuhkan O(N!)
pendekatan (faktorial). Jadi, angka kenaikannya sangat tinggi, Anda bisa melihatnya dengan sederhana dengan query berikut:
$ SELECT i, (i)! AS num_comparisons FROM generate_series(8, 20) i;
i | num_comparisons
----+---------------------
8 | 40320
9 | 362880
10 | 3628800
11 | 39916800
12 | 479001600
13 | 6227020800
14 | 87178291200
15 | 1307674368000
16 | 20922789888000
17 | 355687428096000
18 | 6402373705728000
19 | 121645100408832000
20 | 2432902008176640000
(13 rows)
Seperti yang Anda lihat, pada default 8 kami melakukan paling banyak sekitar 40 ribu perbandingan, 10 yang Anda usulkan membuatnya menjadi 3M, yang masih tidak terlalu banyak untuk komputer modern, tetapi nilai berikutnya mulai menjadi terlalu besar, itu hanya meningkat terlalu cepat, 20 hanya gila (21! bahkan tidak cocok dengan bilangan bulat 64 bit).
Tentu saja, terkadang Anda dapat mengaturnya ke nilai yang lebih besar seperti 16, yang (secara teori) dapat menghasilkan sekitar 20 triliun perbandingan, dan masih memiliki waktu perencanaan yang sangat baik, itu karena PostgreSQL memotong beberapa jalur saat merencanakan dan tidak perlu untuk selalu periksa semua pesanan, tetapi dengan asumsi bahwa itu akan selalu terjadi dan menjadikan nilai tinggi sebagai default, tidak terlihat seperti pendekatan yang baik untuk saya. Mungkin ada beberapa kueri tak terduga di masa mendatang yang membuatnya memeriksa semua pesanan dan kemudian Anda hanya memiliki satu kueri yang membuat server Anda down.
Dalam pengalaman saya, saya menganggap 10 sebagai nilai default pada setiap instalasi di server yang baik, beberapa di antaranya bahkan saya gunakan 12. Saya sarankan Anda untuk mengaturnya ke 10, jika Anda suka, dan pada beberapa waktu, coba setel lebih tinggi ( Saya tidak akan melampaui 12) dan terus memantau (dengan cermat) untuk melihat bagaimana perilakunya.