ApsaraDB for SelectDB mendukung Mesin eksekusi Alur kerja dalam mode dorong. Mesin ini mengurangi overhead eksekusi akibat pergantian thread dan pemblokiran thread, meningkatkan Penggunaan CPU, serta mengurangi kemacetan Sumber daya pada kueri besar terhadap kueri kecil. Dengan demikian, efisiensi eksekusi CPU pada kueri SQL dengan beban campuran dan performa kueri SQL menjadi lebih baik.
Ikhtisar
Mesin eksekusi Alur kerja merupakan fitur inti baru dari versi terbaru ApsaraDB for SelectDB. Mesin ini dirancang untuk menggantikan mesin eksekusi lama, memanfaatkan sepenuhnya daya komputasi CPU multi-core, serta membatasi jumlah thread kueri di ApsaraDB for SelectDB guna menyelesaikan masalah pembengkakan thread eksekusi. Untuk informasi lebih lanjut tentang desain, implementasi, dan dampak dari Mesin eksekusi Alur kerja, lihat Dukungan Mesin Eksekusi Alur Kerja.
Cara kerjanya
Mesin eksekusi SQL lama dari ApsaraDB for SelectDB didesain berdasarkan model gunung berapi tradisional dan memiliki masalah berikut dalam skenario multi-core tunggal:
Kinerja kueri tidak dapat ditingkatkan secara optimal dengan memanfaatkan daya komputasi CPU multi-core. Dalam banyak kasus, pengguna perlu menyetel tingkat paralelisme secara manual untuk mengoptimalkan kinerja kueri, namun hal ini sulit dilakukan dalam lingkungan produksi.
Setiap instans kueri mandiri sesuai dengan satu thread dari kolam thread, yang menyebabkan masalah berikut:
Jika kolam thread mencapai kapasitas maksimum, mesin kueri SelectDB memasuki pseudo-deadlock dan tidak dapat merespons kueri berikutnya. Selain itu, deadlock logis mungkin terjadi, misalnya ketika semua thread sedang menjalankan tugas probe pada suatu instans.
Operator pemblokiran menggunakan sumber daya thread, sehingga sumber daya tersebut tidak dapat dialokasikan ke instans yang dapat dijadwalkan, mengakibatkan pemanfaatan sumber daya keseluruhan menjadi rendah.
Operator pemblokiran bergantung pada mekanisme penjadwalan thread sistem operasi, yang menyebabkan overhead tinggi akibat pergantian thread, terutama dalam skenario pencampuran sistem.
Untuk menyelesaikan masalah tersebut, ApsaraDB for SelectDB menyediakan mesin eksekusi yang kompatibel dengan arsitektur CPU multi-core modern.
Berdasarkan fitur CPU multi-core, Mesin eksekusi Alur kerja didesain ulang menjadi mesin eksekusi yang digerakkan oleh data, meningkatkan efisiensi eksekusi CPU pada kueri SQL dengan beban campuran serta performa kueri SQL. Gambar berikut mengilustrasikan prinsip Mesin eksekusi Alur kerja.

Mesin eksekusi tarik tradisional diubah menjadi mesin eksekusi dorong.
Operasi pemblokiran diubah menjadi operasi asinkron, yang mengurangi overhead eksekusi akibat pergantian thread dan pemblokiran thread serta meningkatkan Penggunaan CPU.
Jumlah maksimum thread yang dieksekusi dibatasi. Kemacetan Sumber daya kueri besar terhadap kueri kecil dikurangi dalam skenario kueri beban campuran melalui pengontrolan pergantian time slice.
Cara menggunakan Mesin eksekusi Alur kerja
Konfigurasikan variabel sesi
enable_pipeline_engine
Jika Anda menyetel variabel sesi
enable_pipeline_engineketrue, node backend (BE) kluster akan menggunakan Mesin eksekusi Alur kerja selama eksekusi kueri. Secara default, variabel sesi ini disetel ke true.set enable_pipeline_engine = true;parallel_pipeline_task_num
Variabel sesi
parallel_pipeline_task_nummenentukan jumlah Tugas Alur kerja yang dieksekusi secara bersamaan untuk kueri SQL. Secara default, variabel ini disetel ke0, sehingga ApsaraDB for SelectDB akan menyetel jumlah Tugas Alur kerja menjadi setengah dari jumlah core CPU secara otomatis. Anda dapat memodifikasi variabel sesi ini sesuai dengan kebutuhan bisnis Anda.set parallel_pipeline_task_num = 0;Anda dapat menyetel variabel sesi
max_instance_numuntuk menentukan konkurensi maksimum yang diatur secara otomatis. Secara default, variabel sesi ini disetel ke 64.