Perbedaan antara fillfactor tabel dan indeks fillfactor

16

Di Postgres, seseorang dapat mengatur fillfactor untuk indeks dan juga tabel. Apa bedanya? Cara menentukan nilai untuk keduanya. Apa saja usecasesnya?

Saya mencoba mengelompokkan relasi spasial pada indeks spasial. Ia memiliki beberapa juta catatan. Catatan diperbarui setiap saat meskipun sangat sedikit yang baru dibuat setiap hari.

Kasus penggunaan adalah kueri rentang spasial. Apa yang akan menjadi nilai yang baik untuk fillfactor tabel dan / atau indeks fillfactor?

S Shah
sumber

Jawaban:

12

Dari halaman manual CREATE TABLE (penekanan ditambahkan):

Fillfactor untuk tabel adalah persentase antara 10 dan 100. 100 (kemasan lengkap) adalah default. Ketika fillfactor yang lebih kecil ditentukan, operasi INSERT mengemas halaman hanya untuk persentase yang ditunjukkan; ruang yang tersisa di setiap halaman dicadangkan untuk memperbarui baris pada halaman itu. Ini memberi UPDATE kesempatan untuk menempatkan salinan baris yang diperbarui pada halaman yang sama dengan aslinya, yang lebih efisien daripada menempatkannya di halaman yang berbeda. Untuk tabel yang isinya tidak pernah diperbarui, pengemasan lengkap adalah pilihan terbaik, tetapi dalam tabel yang banyak diperbarui, pengisi daya yang lebih kecil sesuai.

Dari halaman manual CREATE INDEX (penekanan ditambahkan):

Fillfactor untuk indeks adalah persentase yang menentukan seberapa penuh metode indeks akan mencoba mengemas halaman indeks. Untuk pohon-B, halaman daun diisi ke persentase ini selama pembuatan indeks awal, dan juga ketika memperpanjang indeks di sebelah kanan (nilai kunci terbesar). Jika halaman-halaman selanjutnya menjadi penuh sepenuhnya, halaman-halaman itu akan terpecah, yang mengarah ke penurunan bertahap dalam efisiensi indeks.B-tree menggunakan fillfactor default 90, tetapi nilai apa pun dari 10 hingga 100 dapat dipilih. Jika tabel statis maka fillfactor 100 adalah yang terbaik untuk meminimalkan ukuran fisik indeks, tetapi untuk tabel yang banyak diperbarui, fillfactor yang lebih kecil lebih baik untuk meminimalkan kebutuhan pemisahan halaman. Metode indeks lainnya menggunakan fillfactor dengan cara yang berbeda tetapi kira-kira analog; fillfactor default bervariasi antara metode.

rangsangan
sumber
1
Biasanya menyebutkan sumber kutipan. Bahkan jika itu mudah diketahui.
Erwin Brandstetter
ya, tentu) kadang-kadang lupa ...
Maaf mengganggu lagi. Harap tautkan ke versi manual saat ini (kecuali jika Anda perlu membahas yang khusus). Saya diedit. Lebih lanjut tentang itu di sini .
Erwin Brandstetter
Tautan mundur.
Dave Johansen
2
Re: "Jika tabelnya statis, maka fillfactor 100 adalah yang terbaik untuk meminimalkan ukuran fisik indeks, tetapi untuk tabel yang banyak diperbarui, fillfactor yang lebih kecil lebih baik untuk meminimalkan kebutuhan pemisahan halaman." Mencoba memahami konteks "tabel yang banyak diperbarui" - apakah itu berarti tabel dengan nilai baris yang banyak diperbarui, atau mungkin dapat juga menyertakan tabel dengan baris yang sering disisipkan dan / atau dihapus? Saya ingin tahu apakah meja saya, dengan sedikit perubahan pada nilai baris tetapi sisipan dan penghapusan yang luas, mungkin mendapat manfaat dari fillfactor yang lebih rendah pada indeks utama (kunci) itu.
Reinsbrain