SQL Academy · Pelajaran

ANALYZE dan pg_statistic

Pastikan statistik perancang sentiasa terkini dengan ANALYZE, periksa pg_statistic, dan gunakan statistik lanjutan untuk lajur berkorelasi.

Pelajaran 3 daripada 413 langkah

ANALYZE dan pg_statistic ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Mengapa ANALYZE?

Perancang pertanyaan perlu menganggarkan bilangan baris dan kepekaan pemilihan untuk memilih pelan yang baik. Anggaran tersebut datang daripada statistik setiap lajur yang dikumpulkan oleh ANALYZE.

Bila ANALYZE Perlu Dijalankan

VACUUM automatik menjalankan ANALYZE secara automatik berdasarkan ambang perubahan baris. Selepas pemuatan pukal atau DELETE yang besar, jalankannya secara manual supaya pelan tidak merosot:

ANALYZE orders;
ANALYZE (VERBOSE) orders;

Pensampelan

ANALYZE mengambil sampel beberapa ratus baris bagi setiap lajur. Laraskan sasaran statistik jika nilai lalai menghasilkan anggaran 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 paparan pg_stats untuk keterbacaan):

SELECT attname, n_distinct, most_common_vals, most_common_freqs, histogram_bounds
FROM pg_stats
WHERE schemaname = 'public' AND tablename = 'orders';

Perkara yang Dilihat oleh Perancang

  • n_distinct — bilangan nilai yang berbeza
  • most_common_vals — nilai teratas + kekerapan nilainya
  • histogram_bounds — bak untuk pertanyaan julat
  • correlation — susunan fizikal berbanding logik (mempengaruhi kos imbasan)

Statistik Lanjutan

Statistik setiap lajur tidak menangkap korelasi antara lajur. CREATE STATISTICS menangkap korelasi tersebut:

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 Berbilang Pemboleh Ubah

  • dependencies — kebergantungan fungsi (satu lajur meramalkan lajur lain)
  • ndistinct — gabungan nilai yang berbeza
  • mcv — nilai gabungan yang paling biasa (PG 12+)

Anggaran Buruk → Pelan Buruk

Sebab paling biasa bagi soalan "mengapa pertanyaan saya perlahan" ialah anggaran baris yang buruk. Perancang memilih Gelung Bersarang kerana menjangkakan 1 baris; realitinya ialah 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

Selepas pemuatan pukal yang besar:

COPY users FROM ... ;
ANALYZE users;
-- Without ANALYZE, the planner has no idea the table just grew.

Statistik Tidak Dikemas Kini Secara Automatik Apabila Data Menyimpang

Jika data hari ini berbeza dengan ketara daripada data semalam, statistik mungkin masih lapuk sehingga autoanalyze dijalankan. Jalankan ANALYZE secara manual selepas bentuk data berubah.

pg_class.reltuples

Perancang turut menggunakan anggaran bilangan baris daripada pg_class. Nilai ini dikemas kini oleh VACUUM/ANALYZE. Semakan pantas:

SELECT relname, reltuples FROM pg_class WHERE relname = 'orders';

Ringkasan

ANALYZE membekalkan maklumat kepada perancang.

  • Jalankan selepas perubahan data yang besar
  • Tingkatkan sasaran STATISTICS untuk lajur yang mempunyai taburan tidak sekata
  • Gunakan CREATE STATISTICS untuk korelasi lajur
  • Jurang besar antara anggaran dan nilai sebenar = perkara pertama yang perlu dibaiki

Semakan Pantas

EXPLAIN ANALYZE menunjukkan estimated rows=1 tetapi actual rows=500,000 pada WHERE satu lajur. Apakah pembaikan pertama?

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
46
Pelajaran
183

Soalan Lazim

Adakah pelajaran “ANALYZE dan pg_statistic” percuma?

Ya — teks penuh “ANALYZE dan pg_statistic” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “ANALYZE dan pg_statistic”?

Pastikan statistik perancang sentiasa terkini dengan ANALYZE, periksa pg_statistic, dan gunakan statistik lanjutan untuk lajur berkorelasi. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “ANALYZE dan pg_statistic” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. MVCC dan Punca Pengembungan
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE dan pg_statistic
  4. Imbasan Hanya Indeks dan Peta Keterlihatan
← Kembali ke SQL Academy