Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Kueri paralel untuk Amazon Aurora MySQL
Topik ini menjelaskan pengoptimalan performa kueri paralel untuk Edisi yang Kompatibel dengan Amazon Aurora MySQL. Fitur ini menggunakan jalur pemrosesan khusus untuk kueri tertentu yang sarat data, dengan memanfaatkan arsitektur penyimpanan bersama Aurora. Kueri paralel sangat cocok digunakan dengan klaster DB Aurora MySQL yang memiliki tabel dengan jutaan baris dan kueri analitik yang memerlukan waktu beberapa menit atau jam untuk diselesaikan.
Topik
Ikhtisar kueri paralel untuk Aurora MySQL
Aurora MySQL parallel query adalah optimasi yang memparalelkan beberapa dan komputasi yang terlibat dalam pemrosesan kueri data-intensif I/O . Pekerjaan yang diparalelkan mencakup pengambilan baris dari penyimpanan, ekstraksi nilai kolom, dan penentuan baris yang cocok dengan ketentuan dalam klausa WHERE dan klausa sambungan. Pekerjaan sarat data ini didelegasikan (dalam istilah pengoptimalan basis data, ditekan) ke beberapa simpul di lapisan penyimpanan terdistribusi Aurora. Tanpa kueri paralel, setiap kueri membawa semua data yang dipindai ke simpul tunggal dalam klaster Aurora MySQL (simpul kepala) dan melakukan semua pemrosesan kueri di sana.
Tip
Mesin basis data PostgreSQL juga memiliki fitur yang disebut “kueri paralel.” Fitur tersebut tidak terkait dengan kueri paralel Aurora.
Saat fitur kueri paralel diaktifkan, mesin Aurora MySQL secara otomatis menentukan kapan kueri dapat menguntungkan, tanpa memerlukan perubahan SQL seperti petunjuk atau atribut tabel. Pada bagian berikut, Anda dapat menemukan penjelasan tentang kapan kueri paralel diterapkan pada kueri. Anda juga dapat menemukan cara memastikan bahwa kueri paralel diterapkan di tempat yang memberi banyak keuntungan.
catatan
Pengoptimalan kueri paralel sangat menguntungkan bagi kueri yang berlangsung lama yang memerlukan waktu beberapa menit atau jam untuk diselesaikan. Aurora MySQL umumnya tidak melakukan pengoptimalan kueri paralel untuk kueri yang murah. Aurora juga umumnya tidak melakukan pengoptimalan kueri paralel jika teknik pengoptimalan lain lebih masuk akal, seperti query caching, buffer pool caching, atau pencarian indeks. Jika Anda mendapati kueri paralel tidak digunakan seperti yang Anda harapkan, lihat Memverifikasi pernyataan mana yang menggunakan query paralel untuk Aurora MySQL.
Manfaat
Dengan kueri paralel, Anda dapat menjalankan kueri analitik sarat data pada tabel Aurora MySQL. Dalam banyak kasus, Anda bisa mendapatkan peningkatan order-of-magnitude kinerja atas pembagian kerja tradisional untuk pemrosesan kueri.
Manfaat kueri paralel antara lain:
-
Peningkatan I/O kinerja, karena memparalelkan permintaan baca fisik di beberapa node penyimpanan.
-
Mengurangi lalu lintas jaringan. Aurora tidak mengirim keseluruhan halaman data dari simpul penyimpanan ke simpul kepala lalu memfilter baris dan kolom yang tidak diperlukan sesudahnya. Sebaliknya, Aurora mengirim urutan ringkas yang hanya berisi nilai kolom yang diperlukan untuk set hasil.
-
Mengurangi penggunaan CPU pada simpul kepala, karena menekan pemrosesan fungsi, penyaringan baris, dan proyeksi kolom untuk klausa
WHERE. -
Menurunkan tekanan memori pada pool buffer. Halaman yang diproses oleh kueri paralel tidak ditambahkan ke dalam pool buffer. Pendekatan ini mengurangi peluang pemindaian sarat data mengosongkan data yang sering digunakan dari pool buffer.
-
Berpotensi mengurangi duplikasi data dalam alur ekstrak, transformasi, muat (ETL) Anda, dengan memudahkan pelaksanaan kueri analitik yang berlangsung lama pada data yang sudah ada.
Arsitektur
Fitur kueri paralel menggunakan prinsip arsitektur utama Aurora MySQL: memisahkan mesin basis data dari subsistem penyimpanan, dan mengurangi lalu lintas jaringan dengan menyederhanakan protokol komunikasi. Aurora MySQL menggunakan teknik ini untuk mempercepat operasi sarat penulisan seperti pemrosesan log redo. Kueri paralel menerapkan prinsip yang sama untuk operasi baca.
catatan
Arsitektur kueri paralel Aurora MySQL berbeda dari arsitektur dengan nama fitur yang mirip di sistem basis data lain. Kueri paralel Aurora MySQL tidak mencakup multipemrosesan simetris (SMP) sehingga tidak bergantung pada kapasitas CPU server basis data. Pemrosesan paralel terjadi di lapisan penyimpanan, terpisah dari server Aurora MySQL yang berfungsi sebagai koordinator kueri.
Secara default, tanpa kueri paralel, pemrosesan untuk kueri Aurora mencakup pengiriman data mentah ke satu simpul di dalam klaster Aurora (simpul kepala). Aurora kemudian melakukan semua pemrosesan lebih lanjut untuk kueri tersebut di dalam thread tunggal pada simpul tunggal tersebut. Dengan query paralel, sebagian besar iniI/O-intensive and CPU-intensive work is delegated to nodes in the storage layer. Only the compact rows of the result set are transmitted back to the head node, with rows already filtered, and column values already extracted and transformed. The performance benefit comes from the reduction in network traffic, reduction in CPU usage on the head node, and parallelizing the I/O across the storage nodes. The amount of parallel I/O, pemfilteran, dan proyeksi tidak tergantung pada jumlah instance DB di cluster Aurora yang menjalankan kueri.
Prasyarat
Menggunakan semua fitur query paralel memerlukan cluster Aurora MySQL DB yang menjalankan versi 2.09 atau lebih tinggi. Jika Anda sudah memiliki klaster yang ingin Anda gunakan dengan kueri paralel, Anda dapat meningkatkannya ke versi yang kompatibel dan mengaktifkan kueri paralel sesudahnya. Dalam hal ini, pastikan untuk mengikuti prosedur peningkatan dalam Pertimbangan peningkatan untuk kueri paralel karena nama pengaturan konfigurasi dan nilai default berbeda di versi yang lebih baru ini.
Instans DB dalam klaster Anda harus menggunakan kelas instans db.r*.
Pastikan bahwa pengoptimalan hash join diaktifkan untuk klaster Anda. Untuk mempelajari caranya, lihat Mengaktifkan hash join untuk klaster kueri paralel.
Untuk menyesuaikan parameter seperti aurora_parallel_query dan aurora_disable_hash_join, Anda harus memiliki grup parameter kustom yang Anda gunakan untuk klaster Anda. Anda dapat menentukan parameter ini secara terpisah untuk setiap instans DB menggunakan grup parameter DB. Namun, kami menyarankan Anda untuk menetapkannya dalam grup parameter klaster DB. Dengan demikian, semua instans DB di klaster Anda menerima pengaturan yang sama untuk parameter ini.
Pembatasan
Batasan berikut berlaku untuk fitur kueri paralel:
-
Kueri paralel tidak didukung dengan konfigurasi penyimpanan klaster DB Aurora I/O-Optimized.
-
Anda tidak dapat menggunakan kueri paralel dengan kelas instans db.t2 atau db.t3. Batasan ini berlaku bahkan jika Anda meminta kueri paralel menggunakan variabel session
aurora_pq_force. -
Kueri paralel tidak berlaku pada tabel yang menggunakan format baris
COMPRESSEDatauREDUNDANT. Gunakan format barisCOMPACTatauDYNAMICuntuk tabel yang akan Anda gunakan dengan kueri paralel. -
Aurora menggunakan algoritma berbasis biaya untuk menentukan apakah akan menggunakan mekanisme kueri paralel untuk setiap pernyataan SQL. Menggunakan konsep SQL tertentu dalam pernyataan dapat mencegah kueri paralel atau menjadikan kueri paralel tidak memungkinkan untuk pernyataan tersebut. Untuk informasi tentang kompatibilitas konsep SQL dengan kueri paralel, lihat Konstruksi SQL untuk query paralel di Aurora MySQL.
-
Setiap instans DB Aurora dapat menjalankan sesi kueri paralel hanya dalam jumlah tertentu pada satu waktu. Jika kueri memiliki beberapa bagian yang menggunakan kueri paralel, seperti subkueri, sambungan, atau operator
UNION, fase-fase tersebut berjalan secara berurutan. Pernyataan ini hanya dihitung sebagai satu sesi kueri paralel pada satu waktu. Anda dapat memantau jumlah sesi aktif menggunakan variabel status kueri paralel. Anda dapat memeriksa batas sesi serentak untuk instans DB tertentu dengan melakukan kueri variabel statusAurora_pq_max_concurrent_requests. -
Kueri paralel tersedia di semua Wilayah AWS yang didukung Aurora. Untuk sebagian besar Wilayah AWS, versi Aurora MySQL minimum yang diperlukan untuk menggunakan query paralel adalah 2,09.
-
Kueri paralel dirancang untuk meningkatkan performa kueri sarat data. Ini tidak dirancang untuk kueri ringan.
-
Kami menyarankan Anda menggunakan simpul pembaca untuk pernyataan SELECT, terutama yang sarat data.
Biaya I/O dengan kueri paralel
Jika klaster Aurora MySQL Anda menggunakan kueri paralel, Anda mungkin melihat peningkatan nilai VolumeReadIOPS. Kueri paralel tidak menggunakan kumpulan buffer. Jadi, meskipun kuerinya cepat, pemrosesan yang dioptimalkan ini dapat menghasilkan peningkatan operasi baca dan biaya terkait.
I/O Biaya kueri paralel untuk kueri Anda diukur pada lapisan penyimpanan, dan akan sama atau lebih besar dengan query paralel diaktifkan. Anda akan mendapat manfaat berupa peningkatan performa kueri. Ada dua alasan untuk biaya I/O yang berpotensi lebih tinggi dengan kueri paralel:
-
Bahkan jika beberapa data dalam tabel berada di kolam buffer, query paralel mengharuskan semua data dipindai pada lapisan penyimpanan, menimbulkan I/O biaya.
-
Menjalankan kueri paralel tidak menyiapkan pool buffer. Akibatnya, menjalankan kueri paralel yang sama secara berurutan menimbulkan biaya penuh. I/O