ANALYZE dan pg_statistic
Jaga statistik perencana tetap mutakhir dengan ANALYZE, periksa pg_statistic, dan gunakan statistik tambahan untuk kolom berkorelasi
ANALYZE dan pg_statistic adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Mengapa ANALYZE?
Perencana kueri perlu memperkirakan jumlah baris dan selektivitas untuk memilih rencana yang baik. Perkiraan tersebut berasal dari statistik per kolom yang dikumpulkan oleh ANALYZE.
Kapan Menjalankan ANALYZE
Pembersihan otomatis menjalankan ANALYZE secara otomatis berdasarkan ambang perubahan baris. Setelah pemuatan massal atau DELETE besar, jalankan secara manual agar rencana tidak memburuk:
ANALYZE orders;
ANALYZE (VERBOSE) orders;Pengambilan Sampel
ANALYZE mengambil sampel beberapa ratus baris untuk setiap kolom. Sesuaikan target statistik jika nilai bawaan menghasilkan perkiraan yang buruk:
ALTER TABLE orders ALTER COLUMN customer_id SET STATISTICS 1000;
-- Up from default 100. ANALYZE will sample more rows.pg_statistic
Katalog sistem tempat statistik disimpan (gunakan tampilan pg_stats agar lebih mudah dibaca):
SELECT attname, n_distinct, most_common_vals, most_common_freqs, histogram_bounds
FROM pg_stats
WHERE schemaname = 'public' AND tablename = 'orders';Hal yang Dilihat Perencana
- n_distinct — jumlah nilai yang berbeda
- most_common_vals — nilai teratas beserta frekuensinya
- histogram_bounds — keranjang untuk kueri rentang
- correlation — urutan fisik dibandingkan urutan logis (memengaruhi biaya pemindaian)
Statistik Tambahan
Statistik per kolom tidak menangkap korelasi antarkolom. CREATE STATISTICS menangkapnya:
CREATE STATISTICS orders_country_status (dependencies)
ON country, status FROM orders;
ANALYZE orders;
-- Now the planner knows that country='US' AND status='paid' is correlated
-- (e.g. most US orders happen to be 'paid').Jenis Statistik Multivariat
dependencies— dependensi fungsional (satu kolom memprediksi kolom lainnya)ndistinct— kombinasi nilai yang berbedamcv— kombinasi nilai yang paling umum (PG 12+)
Perkiraan Buruk → Rencana Buruk
Alasan paling umum untuk pertanyaan "mengapa kueri saya lambat" adalah perkiraan jumlah baris yang buruk. Perencana memilih Nested Loop karena memperkirakan 1 baris; kenyataannya ada 1.000.000 baris.
EXPLAIN ANALYZE SELECT * FROM ... ;
-- Look at Plan rows vs actual rows. Big gap = run ANALYZE or add extended stats.Memaksa ANALYZE dalam Migrasi
Setelah pemuatan massal yang besar:
COPY users FROM ... ;
ANALYZE users;
-- Without ANALYZE, the planner has no idea the table just grew.Statistik Tidak Diperbarui Otomatis Saat Data Miring
Jika data hari ini sangat berbeda dari data kemarin, statistik mungkin masih kedaluwarsa sampai autoanalyze berjalan. Jalankan ANALYZE secara manual setelah bentuk data berubah.
pg_class.reltuples
Perencana juga menggunakan perkiraan jumlah baris dari pg_class. Nilai ini diperbarui oleh VACUUM/ANALYZE. Pemeriksaannya cepat:
SELECT relname, reltuples FROM pg_class WHERE relname = 'orders';Ringkasan
ANALYZE memasok data untuk perencana.
- Jalankan setelah perubahan data besar
- Tingkatkan target STATISTICS untuk kolom yang miring
- Gunakan CREATE STATISTICS untuk korelasi antarkolom
- Selisih besar antara perkiraan dan kenyataan = hal pertama yang harus diperbaiki
Pemeriksaan Singkat
EXPLAIN ANALYZE menunjukkan estimated rows=1, tetapi actual rows=500,000 pada WHERE satu kolom. Apa perbaikan pertama?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “ANALYZE dan pg_statistic” gratis?
Ya — teks lengkap “ANALYZE dan pg_statistic” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “ANALYZE dan pg_statistic”?
Jaga statistik perencana tetap mutakhir dengan ANALYZE, periksa pg_statistic, dan gunakan statistik tambahan untuk kolom berkorelasi Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “ANALYZE dan pg_statistic” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- MVCC dan Penyebab Bloat
- VACUUM, autovacuum, vacuum_cost_delay
- ANALYZE dan pg_statistic
- Pemindaian Hanya-Indeks dan Peta Visibilitas