0Pricing
SQL Academy · Pelajaran

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 berbeda
  • mcv — 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

  1. MVCC dan Penyebab Bloat
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE dan pg_statistic
  4. Pemindaian Hanya-Indeks dan Peta Visibilitas
← Kembali ke SQL Academy