All Products
Search
Document Center

Database Autonomy Service:Optimasi SQL

Last Updated:Jun 21, 2026

Database Autonomy Service (DAS) menyediakan fitur optimasi SQL yang secara otomatis menghasilkan diagnosis, saran optimasi, dan perkiraan peningkatan performa. Anda dapat meninjau hasil tersebut untuk memutuskan apakah akan menerapkan saran tersebut. Topik ini menjelaskan cara menggunakan fitur optimasi SQL.

Prasyarat

  • Mesin database adalah salah satu dari berikut:

    • RDS for MySQL

      Catatan

      Edisi Basic dan Cluster RDS for MySQL tidak didukung.

    • MyBase MySQL

    • PolarDB for MySQL

      Catatan

      Kluster single-node (standalone instances sebelumnya) dari PolarDB for MySQL tidak didukung.

    • PolarDB-X 2.0

      Catatan

      Instans PolarDB-X 2.0 dengan versi utama 5.4.13 dan versi minor dalam rentang [16415631,16504348] tidak didukung. Untuk melihat versi instans PolarDB-X 2.0 Anda, lihat Lihat dan tingkatkan versi instans.

    • MongoDB

  • Instans target telah disambungkan ke DAS. Untuk informasi selengkapnya, lihat Sambungkan instans ke DAS.

  • Status akses instans target adalah Normal Access.

Batasan

  • Anda tidak dapat mendiagnosis atau mengoptimalkan pernyataan SQL untuk tabel yang menggunakan X-Engine.

  • Pada PolarDB-X, jika Anda mengeksekusi pernyataan SQL menggunakan prepared statement, log kueri lambat mencatat templat pernyataan (misalnya, select * from test where a = ? and b = ?) dan parameter yang diikat (misalnya, params: [1, 2]) secara terpisah. Karena format ini tidak dapat langsung dieksekusi sebagai pernyataan SQL yang valid, fitur yang bergantung pada pernyataan asli untuk analisis atau optimasi mungkin terbatas.

Buat analisis SQL visual dari log lambat

Fitur ini menyajikan alur eksekusi SQL yang kompleks dalam format visual yang intuitif. Antarmuka grafisnya menampilkan jalur eksekusi kueri, efisiensi node, dan potensi bottleneck secara jelas, membantu Anda mengidentifikasi dan memperbaiki masalah dengan cepat selama optimasi SQL, tinjauan kode, dan pemeriksaan kesehatan.

Penting

Optimasi SQL pada halaman Analisis Log Lambat hanya didukung untuk instans RDS for MySQL 5.6, 5.7, dan 8.0 dan PolarDB for MySQL 5.6, 5.7, dan 8.0.

  1. Masuk ke Konsol DAS.

  2. Di panel navigasi kiri, klik Intelligent O&M Center > Instance Monitoring.

  3. Temukan instans target dan klik ID instans untuk membuka halaman detail instans.

  4. Di panel navigasi kiri, klik Request Analysis > Slow Logs.

  5. Pada halaman Slow Log Analysis:

    • Di tab Slow Log Statistics, temukan templat SQL target dan klik Optimize di kolom Actions.

    • Di tab Slow Log Details, temukan pernyataan SQL target dan klik Optimize di kolom Actions.

  6. Pada kotak dialog yang muncul, klik Create Plan.

  7. Pilih tipe node eksekusi.

    • Standby node (Default): Node standby dari instans saat ini. Node ini terutama digunakan untuk analisis kueri rutin.

    • Event node: Node bisnis tempat pernyataan SQL benar-benar dieksekusi. Node ini cocok untuk troubleshooting dan optimasi.

  8. Klik Confirm Creation untuk membuat Visual Execution Plan.

Rencana eksekusi visual

Penting
  • Rencana eksekusi visual mencerminkan status eksekusi saat ini, bukan catatan historis.

  • Matriks visual menyesuaikan diri dengan kompleksitas pernyataan SQL. Jika grafik berisi banyak konten, gunakan alat zoom untuk menyesuaikan skala tampilan atau klik tombol reset untuk kembali ke tampilan awal.

Dalam rencana eksekusi visual, alur eksekusi mengalir dari bawah ke atas dan dari kiri ke kanan. Node di bagian bawah merupakan titik awal kueri. Data mengalir ke atas lapis demi lapis hingga hasil akhir dikembalikan. Contoh:

Warna node

  • Node efisien (hijau): Menunjukkan metode akses yang efisien, termasuk: system, const, eq_ref, ref, ref_or_null, dan index_merge.

  • Node cukup efisien (kuning): Menunjukkan metode akses suboptimal, termasuk: fulltext, unique_subquery, index_subquery, dan range.

  • Node tidak efisien (merah): Menunjukkan metode akses yang tidak efisien yang harus diprioritaskan untuk dioptimalkan, termasuk: all dan index.

Detail node

  • Atas: Menampilkan tipe node, seperti TABLE_SCAN atau INDEX_SCAN.

  • Kiri: Biaya (cost), metrik relatif yang diperkirakan oleh pengoptimal berdasarkan faktor seperti CPU, memori, dan I/O disk.

  • Right: Estimasi jumlah baris yang dikembalikan, yang menunjukkan volume pemrosesan data.

Saran optimasi

Prioritaskan optimasi node tidak efisien yang ditandai merah untuk meningkatkan performa kueri secara signifikan.

Glosarium

Istilah

Nama umum

Deskripsi

QUERY_BLOCK

query block

Unit semantik dari pernyataan SQL. Setiap kueri atau subkueri independen membentuk query block, yang diidentifikasi oleh select_id dalam output EXPLAIN.

ATTACHED_SUBQUERIES

attached subquery

Subkueri yang dilampirkan ke klausa WHERE, HAVING, atau ON menggunakan predikat seperti EXISTS, IN, atau ANY. Subkueri jenis ini memiliki ketergantungan logis pada kueri utama.

CORRELATED_SUBQUERY

correlated subquery

Kueri bersarang yang mereferensikan kolom dari query luar. Eksekusinya memerlukan pengikatan nilai konteks eksternal dan dapat menyebabkan kompleksitas O(n²).

NON_CORRELATED_SUBQUERY

non-correlated subquery

Subkueri mandiri yang dapat dieksekusi secara independen dari query luar. Pengoptimal biasanya menghitung dan mematerialkannya sebagai konstanta terlebih dahulu.

MATERIALIZED_FROM_SUBQUERY

materialized subquery

Strategi optimasi yang diperkenalkan di MySQL 5.6+. Hasil subkueri dipertahankan dalam tabel temporary di memori dan sering dikaitkan dengan tabel turunan dalam format subqueryN.

OPTIMIZED_AWAY_SUBQUERIES

optimized-away subquery

Subkueri yang sepenuhnya dihapus setelah optimasi penulisan ulang kueri, seperti pushdown subkueri konstan. Subkueri ini tidak muncul dalam rencana eksekusi akhir.

QUERY_SPECIFICATIONS

query specification structure

Unit semantik lengkap yang menggambarkan elemen sintaksis suatu kueri, termasuk daftar SELECT, klausa FROM, dan kondisi filter.

SELECT_LIST_SUBQUERIES

select list subquery

Subkueri skalar yang muncul di kolom proyeksi (daftar bidang SELECT). Subkueri ini harus mengembalikan satu nilai skalar untuk setiap iterasi.

INDEX_SCAN

index scan

Pola akses data yang menggunakan indeks B+ tree. Pemindaian bisa maju atau mundur dan mungkin melibatkan table lookups.

TABLE_SCAN

full table scan

Metode akses di mana pengoptimal memindai semua halaman dari indeks terkluster. Ini terjadi ketika tidak tersedia indeks yang sesuai atau proporsi data yang diakses melebihi ambang batas. Performa menurun seiring peningkatan volume data.

ORDERING_OPERATION

result set sorting

Operasi ORDER BY yang mengurutkan set hasil menggunakan algoritma pengurutan eksplisit, seperti filesort. Operasi ini dapat menggunakan memori atau file disk sementara.

NESTED_LOOP

nested loop join

Implementasi paling dasar dari algoritma penggabungan tabel. Untuk setiap baris di tabel luar, algoritma ini melakukan iterasi melalui baris yang cocok di tabel dalam. Algoritma ini efisien ketika predikat join memberikan filter yang efektif.

DUPLICATES_REMOVAL

result deduplication

Operasi yang menerapkan semantik DISTINCT. Implementasi dasarnya dapat menggunakan indeks unik pada tabel temporary atau mengurutkan lalu memfilter hasilnya. Biaya operasi ini bergantung pada karakteristik distribusi data.

WINDOWING_OPERATION

window function calculation

Perhitungan fungsi analitik (seperti ROW_NUMBER atau RANK) yang dilakukan pada jendela data yang didefinisikan oleh klausa OVER(). Operasi ini mungkin memerlukan pengurutan seluruh dataset.

TABLE

base table reference

Objek penyimpanan fisik yang diakses langsung dalam rencana eksekusi. Berisi informasi seperti nama tabel, alias, dan metode akses (misalnya, const, system, atau range).

Optimalkan SQL dari halaman Instance Sessions

Penting

Instans MySQL yang dikelola sendiri, MongoDB, dan RDS for PostgreSQL tidak mendukung optimasi SQL pada halaman Instance Sessions.

  1. Masuk ke Konsol DAS.

  2. Di panel navigasi kiri, klik Intelligent O&M Center > Instance Monitoring.

  3. Temukan instans target dan klik ID instans untuk membuka halaman detail instans.

  4. Di panel navigasi kiri, klik Instance Sessions.

  5. Di area Instance Sessions, pilih sesi yang ingin dioptimalkan dan klik Optimize.

  6. Pada kotak dialog SQL Diagnostic Optimization yang muncul, lihat hasil diagnosis SQL.

    Jika Anda menerima saran tersebut, klik Copy di pojok kanan atas dan tempelkan SQL yang dioptimalkan ke client database atau DMS Anda untuk dieksekusi. Jika Anda tidak menerima saran tersebut, klik Cancel untuk menutup kotak dialog.

    Catatan

    DAS mendiagnosis pernyataan SQL berdasarkan kompleksitasnya, volume data tabel, dan beban database. Diagnosis dapat memakan waktu lebih dari 20 detik. Setelah itu, engine menyediakan hasil diagnosis, saran optimasi, dan perkiraan peningkatan performa untuk Anda tinjau dan terapkan.

    Setelah diagnosis selesai, halaman menampilkan SQL asli, rencana eksekusi (termasuk kolom seperti select_type, type, dan rows), hasil diagnosis (termasuk pernyataan DDL untuk saran indeks row-store dan detail indeks), manfaat optimasi (misalnya, "Perkiraan peningkatan performa: 0,55x" dan "Keuntungan optimasi rendah"), serta saran optimasi pernyataan.

Lihat riwayat diagnosis SQL

  1. Masuk ke Konsol DAS.

  2. Di panel navigasi kiri, klik Intelligent O&M Center > Instance Monitoring.

  3. Temukan instans target dan klik ID instans untuk membuka halaman detail instans.

  4. Di panel navigasi kiri, klik Request Diagnostic History. Di sini, Anda dapat melihat riwayat diagnosis SQL instans, termasuk detail seperti konten SQL, status diagnosis, waktu, dan hasilnya.