全部产品
Search
文档中心

AnalyticDB:Optimasi Kueri Pengelompokan dan Agregasi

更新时间:Jul 02, 2025

Topik ini menjelaskan cara mengoptimalkan kueri pengelompokan dan agregasi di AnalyticDB for MySQL.

Proses Pengelompokan dan Agregasi

AnalyticDB for MySQL adalah layanan gudang data terdistribusi. Secara default, AnalyticDB for MySQL mengeksekusi kueri pengelompokan dan agregasi melalui langkah-langkah berikut:

  1. Melakukan agregasi parsial pada data.

    Node agregasi parsial hanya menggunakan sejumlah kecil memori. Proses agregasi bersifat berbasis aliran, mencegah penumpukan data pada node agregasi parsial.

  2. Setelah agregasi parsial selesai, mendistribusikan ulang data di antara node berdasarkan bidang GROUP BY, kemudian melakukan agregasi akhir.

    Hasil agregasi parsial ditransmisikan melalui jaringan ke node tahap hilir. Untuk informasi lebih lanjut, lihat Faktor-faktor yang memengaruhi kinerja kueri. Agregasi parsial mengurangi jumlah data yang perlu ditransmisikan melalui jaringan, sehingga mengurangi tekanan jaringan. Setelah data didistribusikan ulang, agregasi akhir dilakukan. Pada node agregasi akhir, nilai dan status agregasi dari suatu grup dipertahankan dalam memori hingga semua data diproses. Ini memastikan bahwa tidak ada data baru yang perlu diproses untuk nilai grup tertentu. Dalam kasus ini, node agregasi akhir dapat menempati sejumlah besar memori.

Sebagai contoh, jalankan pernyataan SQL berikut untuk melakukan pengelompokan dan agregasi:

SELECT sum(A), max(B) FROM tb1 GROUP BY C,D;

Saat pernyataan di atas dieksekusi untuk melakukan pengelompokan dan agregasi, agregasi parsial pertama kali dilakukan pada Node 1 dan Node 2 tahap hulu. Hasil agregasi parsial adalah partial sum(A), partial max(B), C, dan D. Hasil agregasi parsial ditransmisikan melalui jaringan ke Node 3 dan Node 4 tahap hilir untuk agregasi akhir, seperti yang ditunjukkan pada gambar berikut.

两步聚合过程图

Gunakan petunjuk untuk mengoptimalkan pengelompokan dan agregasi

  • Skenario

    Dalam sebagian besar skenario, agregasi dua langkah mencapai keseimbangan yang baik antara sumber daya memori dan jaringan. Namun, dalam skenario khusus yang melibatkan sejumlah besar nilai unik dalam bidang GROUP BY, agregasi dua langkah mungkin bukan pilihan terbaik.

    Sebagai contoh, Anda ingin mengelompokkan data berdasarkan nomor ponsel atau ID pengguna. Jika Anda menggunakan metode agregasi dua langkah, hanya sejumlah kecil data yang dapat diagregasi, tetapi langkah agregasi parsial dilakukan dengan beberapa operasi, seperti menghitung nilai hash grup, deduplikasi, dan menjalankan fungsi agregasi. Dalam contoh ini, sejumlah besar grup terlibat. Akibatnya, langkah agregasi parsial tidak mengurangi jumlah data yang perlu ditransmisikan melalui jaringan tetapi mengonsumsi sejumlah besar sumber daya komputasi.

  • Solusi

    Untuk menyelesaikan masalah laju agregasi rendah tersebut, Anda dapat menambahkan petunjuk /*+ aggregation_path_type=single_agg*/ untuk melewati agregasi parsial dan langsung melakukan agregasi akhir saat mengeksekusi kueri. Ini mengurangi overhead komputasi yang tidak perlu.

    Catatan

    Jika petunjuk /*+ aggregation_path_type=single_agg*/ digunakan dalam pernyataan SQL, semua kueri pengelompokan dan agregasi dalam pernyataan SQL tersebut menggunakan proses optimasi yang ditentukan. Kami merekomendasikan agar Anda menganalisis karakteristik operator agregasi dalam rencana eksekusi asli, mengevaluasi manfaat dari petunjuk, dan kemudian menentukan apakah akan menggunakan skema optimasi ini.

  • Deskripsi Optimasi

    Jika laju agregasi rendah, agregasi parsial yang dilakukan pada Node 1 dan Node 2 tahap hulu tidak mengurangi jumlah data yang perlu ditransmisikan melalui jaringan tetapi mengonsumsi sejumlah besar sumber daya komputasi.

    Setelah optimasi, agregasi parsial tidak dilakukan pada Node 1 dan Node 2. Semua data (A, B, C, dan D) langsung diagregasi pada Node 3 dan Node 4 tahap hilir, yang mengurangi jumlah sumber daya komputasi yang diperlukan, seperti yang ditunjukkan pada gambar berikut.

    分组聚合查询-分组数多

    Catatan

    Optimasi ini mungkin tidak mengoptimalkan penggunaan memori. Jika laju agregasi rendah, sejumlah besar data terakumulasi dalam memori untuk deduplikasi dan agregasi guna memastikan bahwa semua data untuk nilai grup tertentu diproses.