AnalyticDB for MySQL menyediakan fitur diagnostik SQL untuk mengumpulkan statistik terpisah pada tingkat kueri, tahap, dan operator. Statistik ini digunakan untuk mendiagnosis masalah dan memberikan saran optimasi. Topik ini menjelaskan cara melihat serta menganalisis hasil diagnosis tingkat operator.
Jenis hasil diagnosis
Untuk informasi lebih lanjut tentang cara melihat hasil diagnosis tingkat operator, lihat Lihat Hasil Diagnosis.
Tingkat agregasi operator agregasi rendah
Masalah
Tingkat agregasi operator agregasi adalah rasio ukuran data input terhadap ukuran data output setelah pengelompokan berdasarkan kolom GROUP BY dan agregasi per grup. Rasio rendah menunjukkan efek agregasi yang buruk. Di AnalyticDB for MySQL, operasi GROUP BY terdiri dari dua langkah: agregasi parsial dan akhir. Sejumlah besar kelompok operator agregasi dapat menyebabkan tingkat agregasi rendah, meningkatkan transfer data jaringan, dan konsumsi sumber daya komputasi.
Saran
Anda dapat melewati langkah agregasi parsial, mendistribusikan ulang data di antara node, lalu melakukan agregasi akhir. Untuk informasi lebih lanjut, lihat Optimasi Kueri Pengelompokan dan Agregasi.
Kondisi filter tidak didorong ke bawah
Masalah
Secara default, AnalyticDB for MySQL membuat indeks untuk semua kolom dalam tabel selama penyimpanan data. Indeks ini dapat digunakan untuk mempercepat penyaringan data saat melakukan kueri. Namun, AnalyticDB for MySQL tidak menerapkan kondisi filter ke bawah dalam skenario berikut:
Hint
no_index_columnsataufilter_not_pushdown_columnsdigunakan dalam pernyataan kueri, atau kluster menggunakan konfigurasi adb_config filter_not_pushdown_columns.Fungsi seperti
CASTdigunakan dalam kondisi filter.Kolom terkait dalam kondisi filter tidak memiliki indeks. Misalnya, kata kunci
no_indexdigunakan saat pembuatan tabel, atau pernyataanno_indexdieksekusi untuk menghapus indeks setelah tabel dibuat.
Saran
Jika penurunan kondisi filter dinonaktifkan karena hint atau konfigurasi, periksa alasan penggunaannya dan tentukan apakah dapat dibatalkan. Untuk informasi lebih lanjut, lihat Kondisi Filter Tanpa Penurunan.
Jika Anda menggunakan fungsi, pertimbangkan untuk menulis ulang data tanpa fungsi atau menghapus fungsi selama kueri.
Jika kondisi filter tidak didorong ke bawah karena kolom terkait tidak memiliki indeks, periksa alasan ketiadaan indeks tersebut.
Ekspansi data terjadi dalam join
Masalah
Tingkat ekspansi data join adalah rasio jumlah baris output terhadap jumlah baris input. Jika jumlah baris output lebih besar daripada jumlah baris input, ekspansi data terjadi. Hal ini meningkatkan konsumsi sumber daya komputasi dan memori, sehingga memperlambat kueri.
Saran
Jika ekspansi data disebabkan oleh karakteristik data seperti nilai duplikat di kedua tabel, saring nilai duplikat sebelum join.
Jika ekspansi data disebabkan oleh urutan join yang tidak tepat, sesuaikan urutan join secara manual. Untuk informasi lebih lanjut, lihat Sesuaikan Urutan Join Secara Manual.
Ukuran tabel kanan dalam join besar
Masalah
Di AnalyticDB for MySQL, tabel kanan dalam join digunakan untuk membangun struktur hash atau set di memori. Ukuran tabel kanan yang besar dapat memengaruhi stabilitas kluster. Penyebab umum termasuk:
Pernyataan SQL berisi klausa LEFT JOIN. Tabel kanan dalam left join harus digunakan sebagai tabel pembangun, yang dapat meningkatkan konsumsi memori jika ukurannya besar.
Saat AnalyticDB for MySQL memperkirakan ukuran data tabel kiri dan kanan, estimasi tersebut mungkin tidak akurat karena faktor seperti kedaluwarsa statistik.
Saran
Tulis ulang left join menjadi right join. Untuk informasi lebih lanjut, lihat Tulis Ulang Left Join Menjadi Right Join.
Join silang ada
Masalah
Join silang adalah operasi JOIN tanpa kondisi join yang mengembalikan Produk Kartesius dari baris-baris tabel kiri dan kanan. Jika kedua tabel besar, stabilitas kluster AnalyticDB for MySQL sangat terpengaruh.
Saran
Tambahkan kondisi join untuk menghilangkan join silang.
Operator scan membaca sejumlah besar kolom
Masalah
Operator scan menyaring dan membaca data detail di lapisan penyimpanan AnalyticDB for MySQL. Jika pernyataan SELECT mencakup banyak kolom dan melibatkan pembacaan sejumlah besar data detail, penggunaan sumber daya disk I/O akan meningkat secara signifikan, sehingga memengaruhi stabilitas keseluruhan kluster AnalyticDB for MySQL.
Saran
Optimalkan pernyataan SQL untuk mengurangi kolom yang tidak perlu dalam pernyataan SELECT.
Kemiringan data terjadi dalam jumlah data yang dipindai
Masalah
AnalyticDB for MySQL menggunakan arsitektur eksekusi terdistribusi. Jika nilai kolom distribusi tidak tersebar merata, data disimpan secara tidak merata di setiap node, memengaruhi waktu eksekusi dan hasil kueri.
Saran
Pilih kolom distribusi yang sesuai untuk mengurangi kemiringan data. Untuk informasi lebih lanjut, lihat Diagnostik Penyimpanan.
Indeks tidak efisien
Masalah
Jika AnalyticDB for MySQL menggunakan indeks tetapi rasio ukuran data input terhadap output operator filter rendah, data mungkin tidak difilter dengan efektif oleh indeks.
Saran
Gunakan operasi filter pada node komputasi alih-alih mendorong kondisi filter ke bawah. Untuk informasi lebih lanjut, lihat Kondisi Filter Tanpa Penurunan.