0Pricing
SQL Academy · Pelajaran

Mengidentifikasi dan Memperbaiki Kueri Lambat

Gunakan pg_stat_statements, log_min_duration_statement, dan EXPLAIN untuk menemukan kueri lambat serta menerapkan perbaikan yang tepat sasaran

Mengidentifikasi dan Memperbaiki Kueri Lambat adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Langkah 1: Temukan yang Lambat

Jangan mengoptimalkan secara membabi buta. Gunakan:

  • pg_stat_statements — kueri teratas berdasarkan waktu total
  • log_min_duration_statement — mencatat kueri yang melampaui ambang batas
  • pgBadger — laporan rapi dari catatan

Penyiapan pg_stat_statements

Aktifkan ekstensi dan konfigurasikan shared_preload_libraries:

-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'

-- After restart:
CREATE EXTENSION pg_stat_statements;

10 Kueri Paling Berat

Kueri yang paling berguna bagi DBA mana pun:

SELECT query,
       calls,
       total_exec_time,
       mean_exec_time,
       rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;

Catat Kueri Lambat

Tetapkan ambang batas dan baca catatan:

-- postgresql.conf
log_min_duration_statement = '500ms'
-- All queries running > 500ms are logged.

Langkah 2: Reproduksi dengan EXPLAIN ANALYZE

Untuk setiap kueri yang lambat, jalankan EXPLAIN ANALYZE di lingkungan yang representatif (data yang mirip produksi). Perhatikan:

  • Simpul terbesar berdasarkan waktu aktual
  • Kesenjangan terbesar antara baris yang diperkirakan dan baris aktual
  • Apakah indeks yang tepat digunakan

Perbaikan Umum

  • Indeks tidak ada pada kolom yang digunakan dalam WHERE / JOIN
  • Predikat yang tidak ramah indeks (fungsi pada kolom)—tambahkan indeks ekspresi atau tulis ulang
  • Statistik usang—jalankan ANALYZE
  • Tipe data yang salah (menyebabkan konversi implisit)—perbaiki tipe kolom
  • Kondisi OR—tulis ulang sebagai UNION dari kueri berkondisi tunggal
  • SELECT * mengambil terlalu banyak data—persempit proyeksi

Statistik Usang

Jika jumlah baris yang diperkirakan sangat berbeda dari jumlah baris aktual, jalankan ANALYZE terlebih dahulu:

ANALYZE orders;
-- Or rely on autovacuum to do it periodically.

Pemeriksaan Kewajaran Indeks

Daftar indeks pada tabel dan ukurannya:

SELECT indexrelname, pg_size_pretty(pg_relation_size(indexrelid))
FROM pg_stat_user_indexes
WHERE relname = 'orders'
ORDER BY pg_relation_size(indexrelid) DESC;

Indeks yang Tidak Digunakan

Temukan indeks yang tidak pernah digunakan:

SELECT schemaname, relname, indexrelname, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0
ORDER BY pg_relation_size(indexrelid) DESC;
-- Consider dropping them — they slow writes for no read benefit.

Kontensi Kunci

Kadang-kadang kueri dianggap "lambat" karena sedang menunggu kunci. Periksa pg_stat_activity untuk melihat wait_event:

SELECT pid, state, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE state <> 'idle';

Pola Penulisan Ulang Kueri

  • Pindahkan filter ke WHERE
  • Ganti subkueri berkorelasi dalam SELECT dengan JOIN + GROUP BY
  • Ganti OR dengan UNION ALL yang terdiri dari kueri terindeks
  • Gunakan fungsi jendela sebagai ganti penggabungan mandiri
  • Materialisasikan subkueri berulang dengan CTE (saat perencana keliru)

Ulangi

Penyesuaian kinerja adalah sebuah siklus: ukur → buat hipotesis → ubah → ukur. Jangan menebak.

Rangkuman

Temukan kueri lambat dengan pg_stat_statements, diagnosis dengan EXPLAIN ANALYZE, perbaiki dengan indeks / ANALYZE / penulisan ulang, lalu ulangi.

Pemeriksaan Singkat

Ekstensi PostgreSQL mana yang menampilkan kueri paling menghabiskan waktu berdasarkan durasi total?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengidentifikasi dan Memperbaiki Kueri Lambat” gratis?

Ya — teks lengkap “Mengidentifikasi dan Memperbaiki Kueri Lambat” 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 “Mengidentifikasi dan Memperbaiki Kueri Lambat”?

Gunakan pg_stat_statements, log_min_duration_statement, dan EXPLAIN untuk menemukan kueri lambat serta menerapkan perbaikan yang tepat sasaran 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 4 dari 4.

Berapa lama pelajaran “Mengidentifikasi dan Memperbaiki Kueri Lambat” 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. Membaca EXPLAIN dan EXPLAIN ANALYZE
  2. Pemindaian Berurutan vs Pemindaian Indeks
  3. Hash Join vs Merge Join vs Nested Loop
  4. Mengidentifikasi dan Memperbaiki Kueri Lambat
← Kembali ke SQL Academy