Berikut ini, Anda dapat menemukan deskripsi pengoptimalan kinerja kueri paralel untuk Amazon Aurora Edisi Kompatibel MySQL. Fitur ini menggunakan jalur pemrosesan khusus untuk kueri tertentu yang sarat data, 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. Untuk informasi tentang versi Aurora MySQL yang mendukung kueri parallel diAWSWilayah, lihatKueri paralel Aurora. Show
Daftar Isi
Ikhtisar kueri paralel untuk Aurora MySQL Kueri paralel Aurora MySQL adalah pengoptimalan yang memaralelkan beberapa I/O dan komputasi yang termasuk dalam pemrosesan kueri sarat data. Pekerjaan yang diparalelkan mencakup mengambil baris dari penyimpanan, mengekstraksi nilai kolom, dan menentukan baris mana yang cocok dengan ketentuan dalam klausul Mesin database PostgreSQL juga memiliki fitur yang disebut "kueri paralel". Fitur tersebut tidak terkait dengan kueri paralel Aurora. Saat fitur kueri parallel 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. Pengoptimalan kueri paralel sangat menguntungkan bagi kueri yang berlangsung lama yang memerlukan waktu beberapa menit atau jam hingga selesai. 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 menemukan kueri paralel yang tidak digunakan seperti yang Anda perkirakan, lihat Memverifikasi pernyataan mana yang menggunakan kueri paralel. ManfaatITDengan kueri paralel, Anda dapat menjalankan kueri analitik sarat data pada tabel Aurora MySQL. Dalam banyak kasus, Anda bisa mendapatkan order-of-magnitude peningkatan kinerja melalui divisi kerja tradisional untuk pemrosesan kueri. Manfaat kueri paralel mencakup hal-hal berikut:
ArsitekturFitur 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 mengulangi pemrosesan log. Kueri paralel menerapkan prinsip yang sama untuk operasi membaca. Arsitektur kueri paralel Aurora MySQL berbeda dari arsitektur dengan nama yang mirip di sistem database lain. Kueri paralel Aurora MySQL tidak mencakup multipemrosesan simetris (SMP) sehingga tidak bergantung pada kapasitas CPU server database. 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 dalam klaster Aurora (simpul kepala). Aurora kemudian melakukan semua pemrosesan lebih lanjut untuk kueri tersebut dalam utas tunggal pada satu simpul itu. Dengan kueri paralel, sebagian besar pekerjaan yang sarat I/O dan CPU ini didelegasikan ke simpul dalam lapisan penyimpanan. Hanya baris ringkas set hasil yang dikirim kembali ke simpul kepala, dengan baris yang sudah difilter, dan nilai kolom sudah diekstraksi dan ditransformasikan. Kinerja yang baik berasal dari pengurangan lalu lintas jaringan, pengurangan penggunaan CPU di simpul kepala, dan paralelisasi I/O di seluruh simpul penyimpanan. Jumlah I/O paralel, pemfilteran, dan proyeksi tidak berhubungan dengan jumlah instans DB dalam klaster Aurora yang menjalankan kueri. PrasyaratUntuk menggunakan semua fitur kueri paralel memerlukan klaster DB Aurora MySQL yang menjalankan versi 1.23 atau 2.09 dan lebih tinggi. Jika sudah memiliki klaster yang ingin Anda gunakan dengan kueri parallel, Anda dapat meningkatkannya ke versi yang kompatibel dan mengaktifkan kueri parallel 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. Anda juga dapat menggunakan kueri paralel dengan Aurora MySQL lama versi tertentu yang kompatibel dengan MySQL 5.6: 1.22.2, 1.20.1, 1.19.6, dan 5.6.10a. Dukungan kueri paralel untuk versi yang lebih lama ini hanya tersedia di beberapa Wilayah AWS tertentu. Versi lama tersebut memiliki batasan tambahan, yang dijelaskan sebagai berikut. Menggunakan kueri paralel Aurora MySQL versi lama juga memerlukan pembuatan klaster DB khusus dengan parameter mode mesin khusus yang tidak dapat diubah nanti. Karena alasan tersebut, kami menyarankan penggunaan kueri paralel dengan Aurora MySQL 1.23 atau 2.09 dan versi lebih tinggi jika memungkinkan. Instans DB dalam klaster Anda harus menggunakan kelas instans Pastikan bahwa pengoptimalan hash join dinyalakan untuk klaster Anda. Prosedur untuk melakukannya berbeda-beda tergantung apakah klaster Anda menjalankan Aurora MySQL versi lebih tinggi atau lebih rendah dari 1.23 atau 2.09. Untuk mempelajari caranya, lihat Mengaktifkan hash join untuk klaster kueri parallel. Untuk menyesuaikan parameter seperti Keterbatasan:Batasan berikut berlaku untuk fitur kueri paralel:
Merencanakan klaster kueri paralelPerencanaan untuk klaster DB yang kueri parallel diaktifkan memerlukan beberapa pilihan. Hal ini termasuk melakukan langkah pengaturan (membuat atau memulihkan klaster Aurora MySQL penuh) dan memutuskan seberapa luas pengaktiran kueri parallel di seluruh klaster DB Anda. Pertimbangkan hal berikut sebagai bagian dari perencanaan:
Memeriksa kompatibilitas versi Aurora MySQL untuk kueri paralel Untuk memeriksa Aurora MySQL versi mana yang kompatibel dengan klaster kueri paralel, gunakan perintah
Perintah sebelumnya menghasilkan output yang serupa dengan yang berikut ini. Output dapat bervariasi tergantung pada Aurora MySQL versi mana yang tersedia di Wilayah AWS tertentu.
Setelah mulai menggunakan kueri paralel dengan suatu klaster, Anda dapat memantau kinerja dan menghilangkan kendala pada penggunaan kueri paralel. Untuk instruksi langkah demi langkah, lihat Penyempurnaan kinerja untuk kueri paralel. Membuat klaster DB yang bekerja dengan kueri paralelUntuk membuat klaster Aurora MySQL dengan kueri paralel, menambahkan instans baru ke dalamnya, atau melakukan operasi administratif lainnya, Anda menggunakan teknik AWS Management Console dan AWS CLI yang sama seperti yang Anda lakukan dengan klaster Aurora MySQL lainnya. Anda dapat membuat klaster baru untuk bekerja dengan kueri paralel. Anda juga dapat membuat klaster DB untuk bekerja dengan kueri paralel dengan memulihkan dari snapshot klaster DB Aurora yang kompatibel dengan MySQL. Jika Anda tidak memahami proses pembuatan klaster Aurora MySQL, Anda dapat menemukan informasi latar belakang dan prasyaratnya dalam Membuat klaster Amazon Aurora DB. Namun, terdapat beberapa opsi berbeda:
Dengan membuat klaster baru atau memulihkan dari snapshot, Anda menggunakan teknik yang sama untuk menambahkan instans DB baru yang Anda lakukan dengan klaster Aurora MySQL lainnya. Membuat klaster kueri paralel menggunakan konsolAnda dapat membuat klaster kueri paralel baru dengan konsol seperti dijelaskan berikut ini. Untuk membuat klaster kueri paralel dengan AWS Management Console
Untuk memverifikasi bahwa klaster baru dapat menggunakan kueri paralel
Membuat klaster kueri paralel menggunakan CLIAnda dapat membuat klaster kueri paralel baru dengan CLI seperti yang dijelaskan berikut ini. Untuk membuat klaster kueri paralel dengan AWS CLI
Untuk memulihkan snapshot ke klaster kueri paralel dengan AWS CLI
Menghidupkan dan mematikan kueri parallelAurora MySQL 1.23 dan 2.09 atau lebih tinggi Di Aurora MySQL 1.23 dan 2.09 atau lebih tinggi, Anda dapat mengaktifkan dan
menonaktifkan kueri parallel secara dinamis pada tingkat global dan sesi untuk instans DB menggunakanaurora_parallel_querypilihan. Anda dapat mengubah pengaturan
Untuk mengganti parameter Anda dapat secara permanen mengubah pengaturan untuk parameter
Anda dapat memodifikasi parameter query parallel dengan menggunakanModifyDBClusterParameterGroupatauModifyDBParameterGroupOperasi API API atau operasi API API atauAWS Management Console. Sebelum Aurora MySQL 1.23Untuk versi yang lebih lama ini, Anda dapat mengaktifkan dan menonaktifkan kueri parallel secara dinamis pada tingkat global dan sesi untuk instans DB menggunakanaurora_pqpilihan. Pada klaster yang fitur kueri parallel tersedia, parameter diaktifkan secara default.
Untuk mengganti parameter Untuk mengganti parameter
Anda dapat memodifikasi parameter query parallel dengan menggunakanModifyDBClusterParameterGroupatauModifyDBParameterGroupOperasi API API atau operasi API API atauAWS Management Console. Mengaktifkan hash join untuk klaster kueri parallelKueri paralel biasanya digunakan untuk jenis kueri sarat sumber daya yang diuntungkan dari pengoptimalan hash join. Oleh karena itu, sangatlah bermanfaat untuk memastikan apakah hash join diaktifkan untuk klaster yang Anda rencanakan akan menggunakan kueri parallel. Untuk informasi tentang cara menggunakan hash join secara efektif, lihatMengoptimalkan besar Aurora MySQL bergabung kueri dengan hash bergabung. Menghidupkan dan mematikan kueri parallel menggunakan konsolAnda dapat mengaktifkan atau menonaktifkan kueri parallel di tingkat instans DB atau tingkat klaster DB menggunakan grup parameter. Untuk mengaktifkan atau menonaktifkan permintaan parallel untuk klaster DB denganAWS Management Console
Menghidupkan dan mematikan kueri parallel menggunakan CLI Anda dapat memodifikasi
parameter kueri paralel dengan menggunakan perintah Mengaktifkan atau menonaktifkan kueri parallel untuk klaster DB dengan CLI
Anda juga dapat mengaktifkan atau mematikan kueri parallel di tingkat sesi, contohnya melalui kueri paralel, contohnya melalui kueri paralel. Anda juga dapat menambahkan parameter tingkat sesi ke konfigurasi JDBC atau dalam kode aplikasi Anda untuk mengaktifkan atau menonaktifkan kueri parallel secara dinamis. Pertimbangan peningkatan untuk kueri paralelBergantung pada versi asli dan tujuan saat Anda meningkatkan kluster kueri parallel, Anda mungkin menemukan penyempurnaan dalam jenis kueri yang dapat dioptimalkan oleh kueri parallel. Anda mungkin juga menemukan bahwa Anda tidak perlu menentukan parameter mode engine khusus untuk kueri parallel. Bagian berikut menjelaskan pertimbangan saat Anda meningkatkan klaster yang mengaktifkan kueri parallel. Upgrade cluster query parallel ke Aurora MySQL versi 3Beberapa pernyataan SQL, klausa, dan tipe data memiliki dukungan kueri parallel baru atau yang lebih baik mulai dari Aurora MySQL versi 3. Saat Anda memutakhirkan dari rilis yang lebih awal dari versi 3, periksa apakah kueri tambahan dapat memperoleh manfaat dari pengoptimalan kueri parallel. Untuk informasi tentang penyempurnaan kueri parallel ini, lihatJenis data kolom,Tabel yang dipartisi, danFungsi agregat, klausul GROUP BY, dan klausul HAVING. Jika Anda meningkatkan cluster kueri parallel dari Aurora MySQL 2.08 atau yang lebih rendah, pelajari juga tentang perubahan cara mengaktifkan kueri parallel. Untuk melakukannya, bacaMen-upgrade ke Aurora MySQL 1.23 atau 2.09 dan versi lebih tinggi. Pada Aurora MySQL versi 3, pengoptimalan hash join dinyalakan secara default. Klaster Men-upgrade ke Aurora MySQL 1.23 atau 2.09 dan versi lebih tinggi Di Aurora MySQL 1.23 atau 2.09 dan versi lebih tinggi, kueri paralel bekerja untuk klaster yang telah disediakan dan tidak memerlukan parameter mode mesin Setelah Anda meningkatkan klaster kueri parallel sebelumnya ke Aurora MySQL 1.23 atau 2.09 atau versi lebih tinggi, Anda mengaktifkan kueri parallel dalam klaster yang ditingkatkan. Kueri paralel dimatikan secara default dalam versi ini, dan prosedur untuk mengaktifkannya berbeda. Pengoptimalan hash join juga dimatikan secara default dan harus diaktifkan secara terpisah. Maka, pastikan Anda mengaktifkan pengaturan ini lagi setelah peningkatan. Untuk petunjuk tentang melakukannya, lihat Menghidupkan dan mematikan kueri parallel dan Mengaktifkan hash join untuk klaster kueri parallel. Secara khusus, Anda mengaktifkan query parallel dengan menggunakan parameter konfigurasi Dalam klaster yang ditingkatkan,
atribut Setelah meningkatkan ke Aurora MySQL 1.23 atau 2.09 dan versi lebih tinggi, Anda dapat memanfaatkan fitur-fitur berikut. Fitur ini tidak tersedia untuk klaster kueri paralel yang menjalankan Aurora MySQL versi lama.
Penyempurnaan kinerja untuk kueri paralelUntuk mengelola kinerja beban kerja dengan kueri paralel, pastikan kueri paralel digunakan untuk kueri di mana pengoptimalan ini paling membantu. Untuk melakukannya, Anda dapat melakukan hal berikut:
Membuat objek skema untuk memanfaatkan kueri paralelSebelum Anda membuat atau memodifikasi tabel yang akan Anda gunakan untuk kueri paralel, pastikan untuk memahami persyaratan yang dijelaskan dalam Prasyarat dan Keterbatasan:. Karena kueri paralel memerlukan tabel untuk menggunakan pengaturan Sebelum mengubah skema Anda untuk mengaktifkan kueri parallel agar dapat bekerja dengan lebih banyak tabel, pastikan untuk melakukan pengujian. Pengujian Anda harus mengonfirmasi apakah kueri paralel menghasilkan peningkatan kinerja bersih untuk tabel tersebut. Selain itu, pastikan bahwa persyaratan skema untuk kueri paralel kompatibel sesuai dengan sasaran Anda. Sebagai contoh, sebelum beralih dari Memverifikasi pernyataan mana yang menggunakan kueri paralelDalam operasi biasa, Anda tidak perlu melakukan tindakan khusus apa pun untuk memanfaatkan kueri paralel. Setelah kueri memenuhi persyaratan penting untuk kueri paralel, pengoptimal kueri secara otomatis memutuskan apakah akan menggunakan kueri paralel untuk setiap kueri tertentu. Jika menjalankan percobaan di lingkungan pengembangan atau pengujian, Anda mungkin menemukan bahwa kueri paralel tidak digunakan karena tabel Anda terlalu kecil dalam jumlah baris atau volume data keseluruhan. Data untuk tabel mungkin juga sepenuhnya berada di dalam buffer pool, terutama untuk tabel yang baru Anda buat untuk melakukan percobaan. Saat Anda memantau atau menyesuaikan kinerja klaster, pastikan untuk memutuskan apakah kueri paralel digunakan dalam konteks yang sesuai. Anda dapat menyesuaikan skema basis data, pengaturan, kueri SQL, atau bahkan klaster topologi dan pengaturan koneksi aplikasi untuk memanfaatkan fitur ini. Untuk memeriksa apakah suatu kueri menggunakan kueri paralel, periksa rencana kueri (juga dikenal sebagai "rencana menjelaskan") dengan menjalankan pernyataan
EXPLAIN. Sebagai contoh bagaimana pernyataan, klausul, dan ekspresi SQL memengaruhi output Contoh berikut menunjukkan perbedaan antara rencana kueri tradisional dan rencana kueri paralel. Rencana menjelaskan ini adalah dari Query 3 dari tolok ukur TPC-H. Banyak sampel kueri di seluruh bagian ini menggunakan tabel dari set data TPC-H. Anda dapat memperoleh definisi tabel, kueri, dan program
Secara default, kueri tersebut mungkin memiliki rencana seperti berikut. Jika Anda tidak melihat hash join digunakan dalam rencana kueri, pastikan pengoptimalan diaktifkan terlebih dahulu.
Anda dapat mengaktifkan hash join di tingkat sesi dengan mengeluarkan pernyataan berikut. Kemudian, coba pernyataan
Untuk informasi tentang cara menggunakan hash join secara efektif, lihatMengoptimalkan besar Aurora MySQL bergabung kueri dengan hash bergabung. Dengan hash join aktif tetapi kueri parallel dinonaktifkan, kueri mungkin memiliki rencana seperti berikut, yang menggunakan hash join tetapi bukan kueri parallel.
Setelah kueri parallel diaktifkan, dua langkah dalam rencana kueri ini dapat
menggunakan pengoptimalan kueri parallel, seperti ditunjukkan di bawah
Untuk informasi tentang cara menginterpretasi output Contoh output berikut menunjukkan hasil dari menjalankan kueri sebelumnya pada instans db.r4.2xlarge dengan IT buffer pool dingin. Kueri berjalan jauh lebih cepat saat menggunakan kueri paralel. Karena waktu tergantung pada banyak faktor lingkungan, hasil Anda mungkin berbeda. Selalu lakukan uji kinerja Anda sendiri untuk mengonfirmasi temuan dengan lingkungan dan beban kerja Anda sendiri, dan sebagainya.
Banyak kueri sampel di seluruh bagian ini menggunakan tabel dari set data TPC-H ini, khususnya tabel
Lakukan eksperimen dengan beban kerja Anda untuk mengetahui apakah pernyataan SQL individual dapat memanfaatkan kueri paralel. Lalu gunakan teknik pemantauan berikut untuk membantu memverifikasi frekuensi penggunaan kueri paralel dalam beban kerja nyata dari waktu ke waktu. Untuk beban kerja nyata, faktor tambahan seperti batas keserentakan berlaku. Memantau kueri paralel Jika klaster Aurora MySQL Anda menggunakan kueri parallel, Anda mungkin melihat peningkatan Selain Amazon CloudWatch metrik yang dijelaskan dalamMelihat metrik di konsol Amazon RDS, Aurora menyediakan variabel status global lainnya. Anda dapat menggunakan variabel status global ini untuk membantu memantau eksekusi kueri paralel. Variabel tersebut dapat memberi Anda wawasan tentang
alasan pengoptimal dapat menggunakan atau tidak menggunakan kueri paralel dalam situasi tertentu. Untuk mengakses variabel ini, Anda dapat menggunakan perintah Sesi kueri parallel belum tentu a one-to-one pemetaan dengan query yang dilakukan oleh database. Contohnya, anggaplah bahwa rencana kueri Anda memiliki dua langkah yang menggunakan kueri paralel. Dalam hal ini, kueri tersebut mencakup dua sesi paralel dan penghitung untuk permintaan yang telah diupayakan dan permintaan yang berhasil ditambah sebanyak dua. Saat Anda bereksperimen dengan kueri paralel dengan mengeluarkan pernyataan Penghitung ini dilacak di tingkat instans DB. Saat terhubung ke titik akhir yang berbeda, Anda mungkin melihat metrik yang berbeda karena setiap instans DB menjalankan serangkaian kueri paralelnya sendiri. Anda mungkin juga melihat metrik yang berbeda saat titik akhir pembaca terhubung ke instans DB yang berbeda untuk setiap sesi.
Cara kerja kueri paralel dengan konstruksi SQLPada bagian berikut, Anda dapat menemukan perincian lebih lanjut tentang alasan laporan SQL tertentu menggunakan atau tidak menggunakan kueri paralel. Bagian ini juga memperinci cara fitur Aurora MySQL berinteraksi dengan kueri paralel. Informasi ini dapat membantu Anda mendiagnosis masalah kinerja untuk klaster yang menggunakan kueri paralel atau memahami cara kueri paralel berlaku untuk beban kerja tertentu Anda. Keputusan untuk menggunakan kueri paralel bergantung pada banyak faktor yang terjadi pada saat pernyataan itu berjalan. Dengan demikian, kueri paralel dapat digunakan untuk kueri tertentu selalu, tidak pernah, atau hanya dalam kondisi tertentu. Saat melihat contoh ini di HTML, Anda dapat menggunakan Salin widget di sudut kanan atas setiap daftar kode guna menyalin kode SQL untuk mencoba sendiri. Menggunakan widget Salin
akan terhindar dari menyalin karakter tambahan di sekitar prompt Topik
Pernyataan EXPLAIN Seperti yang ditunjukkan dalam contoh di seluruh bagian ini, pernyataan
Contohnya, pertimbangkan output
Informasi dari kolom Dalam kasus di mana kueri paralel tidak dipilih,
Anda biasanya dapat menyimpulkan alasan dari output kolom lain
Output yang menunjukkan apakah kueri paralel akan digunakan telah mempertimbangkan semua faktor yang tersedia saat pernyataan Klausul WHERE Agar menggunakan pengoptimalan kueri paralel, suatu kueri harus termasuk klausul Pengoptimalan kueri paralel mempercepat berbagai jenis
ekspresi yang digunakan dalam klausul
Contohnya, kueri berikut ini melakukan pemindaian tabel lengkap dan memproses semua nilai untuk kolom
Sebaliknya, kueri berikut mencakup predikat
Jika pengoptimal memperkirakan bahwa jumlah baris yang dikembalikan untuk suatu blok kueri adalah kecil, kueri paralel tidak digunakan untuk blok kueri tersebut. Contoh berikut menunjukkan kasus di mana operator lebih-besar-dari pada kolom kunci utama berlaku untuk jutaan baris, yang menyebabkan kueri paralel digunakan. Uji kurang-dari yang berkebalikan diperkirakan berlaku hanya pada beberapa baris dan tidak menggunakan kueri paralel.
Bahasa definisi data (DDL)Sebelum Aurora MySQL versi 3, kueri parallel hanya tersedia untuk tabel di mana tidak ada operasi bahasa definisi data (DDL) yang tertunda. Dalam Aurora MySQL versi 3, Anda dapat menggunakan query parallel di atas meja pada saat yang sama sebagai operasi DDL instan. DDL instan di Aurora MySQL versi 3 menggantikan fitur DDL cepat di Aurora MySQL versi 1 dan 2. Untuk informasi tentang DDL, lihatInstan DDL (Aurora MySQL versi 3). Jenis data kolom Dalam Aurora MySQL versi 3, query parallel dapat bekerja dengan tabel yang berisi kolom dengan tipe data Sebelum Aurora MySQL versi 3, query parallel memiliki batasan ini untuk jenis objek besar: Dalam versi sebelumnya, Dalam versi sebelumnya, kolom variabel-panjang ( Tabel yang dipartisi Anda dapat menggunakan tabel yang dipartisi dengan kueri parallel di Aurora MySQL versi 3. Karena tabel dipartisi diwakili secara internal sebagai beberapa tabel yang lebih kecil, query yang menggunakan query parallel pada tabel nonpartisi mungkin tidak menggunakan query parallel pada tabel dipartisi identik. Aurora MySQL mempertimbangkan apakah setiap partisi cukup besar untuk memenuhi syarat untuk optimasi kueri parallel, alih-alih mengevaluasi ukuran seluruh tabel. Periksa
apakah Misalnya, pertimbangkan satu tabel yang dipartisi dengan
Fungsi agregat, klausul GROUP BY, dan klausul HAVINGKueri yang mencakup fungsi agregat sering kali merupakan kandidat yang baik untuk kueri paralel, karena kueri tersebut memindai baris dalam jumlah besar dalam tabel besar. Di Aurora MySQL 3, permintaan parallel dapat mengoptimalkan panggilan fungsi agregat dalam daftar pilih dan Sebelum Aurora MySQL 3, panggilan fungsi agregat dalam daftar pilihan atau Contoh sederhana berikut mengilustrasikan jenis kueri agregat yang dapat diuntungkan dari kueri paralel. Hal tersebut dilakukan dengan mengembalikan hasil menengah dalam bentuk ringkas ke simpul kepala, memfilter baris yang tidak cocok dari hasil menengah, atau keduanya.
Panggilan fungsi dalam klausul WHERE Aurora dapat menerapkan pengoptimalan kueri paralel pada panggilan ke sebagian besar fungsi bawaan dalam klausul Saat ini, paralelisasi tidak berlaku untuk panggilan fungsi dalam daftar pilihan. Fungsi-fungsi tersebut dievaluasi oleh simpul kepala, bahkan jika panggilan fungsi yang identik muncul dalam klausul Dalam contoh berikut, kueri paralel memaralelkan panggilan dengan
Pertimbangan yang sama berlaku untuk ekspresi lain, seperti ekspresi
Klausul LIMIT Saat ini, kueri paralel tidak digunakan untuk blok kueri yang mencakup klausul Operator perbandinganPengoptimal memperkirakan jumlah baris yang harus dipindai untuk mengevaluasi operator perbandingan, dan menentukan apakah akan menggunakan kueri paralel berdasarkan estimasi tersebut. Contoh pertama berikut ini menunjukkan bahwa perbandingan setara terhadap kolom kunci utama dapat dilakukan secara efisien tanpa kueri paralel. Contoh kedua berikut menunjukkan bahwa perbandingan yang serupa terhadap kolom yang tidak diindeks memerlukan pemindaian jutaan baris, sehingga dapat diuntungkan dari kueri paralel.
Pertimbangan yang sama berlaku untuk pengujian yang tidak sama dan
untuk perbandingan rentang seperti kurang dari, lebih besar dari atau sama dengan, atau Bergabung Kueri gabungan dengan tabel besar biasanya mencakup operasi sarat data yang diuntungkan dari pengoptimalan kueri paralel. Perbandingan nilai kolom di antara beberapa tabel (yaitu, predikat
gabungan itu sendiri) saat ini tidak diparalelkan. Namun, kueri paralel dapat menurunkan beberapa pemrosesan internal untuk fase penggabungan lainnya, seperti membangun filter Bloom selama hash join. Kueri paralel dapat diterapkan pada kueri gabungan tanpa klausul Setiap fase pemrosesan gabungan dievaluasi untuk memeriksa apakah fase tersebut memenuhi syarat untuk kueri paralel. Jika lebih dari satu fase dapat menggunakan kueri paralel, fase-fase ini dilakukan secara berurutan. Dengan demikian, setiap kueri gabungan dihitung sebagai satu sesi kueri paralel dalam hal batas keserentakan. Contohnya, saat kueri gabungan mencakup predikat
Untuk kueri gabungan yang menggunakan mekanisme nested loop, blok nested loop terluar mungkin menggunakan kueri paralel. Penggunaan kueri paralel bergantung pada faktor yang sama seperti biasanya, seperti adanya ketentuan filter tambahan dalam klausul
Subkueri Blok kueri luar dan blok subkueri dalam masing-masing dapat menggunakan kueri paralel atau tidak. Untuk setiap blok, menggunakan kueri paralel atau tidak, didasarkan pada karakteristik umum tabel, klausul
Saat ini, subkueri yang berkorelasi tidak dapat menggunakan pengoptimalan kueri paralel. UNION Setiap blok kueri dalam kueri
Setiap klausul TampilanPengoptimal menulis ulang kueri apa pun menggunakan tampilan sebagai kueri yang lebih panjang menggunakan tabel yang mendasarinya. Dengan demikian, kueri paralel bekerja dengan cara yang sama baik referensi tabelnya berupa tampilan atau tabel nyata. Semua pertimbangan yang sama tentang apakah akan menggunakan kueri paralel untuk suatu kueri, dan bagian mana yang diturunkan, berlaku untuk kueri terakhir yang ditulis ulang. Contohnya, rencana kueri berikut menunjukkan definisi tampilan yang biasanya tidak menggunakan kueri paralel. Saat tampilan dikueri dengan klausul
Pernyataan bahasa manipulasi data (DML) Pernyataan
Biasanya, setelah pernyataan Pernyataan Kueri paralel tidak pernah digunakan untuk pernyataan
Transaksi dan penguncianAnda dapat menggunakan semua tingkat isolasi pada instans utama Aurora. Pada instans pembaca Aurora DB, kueri paralel berlaku untuk pernyataan yang dilakukan dalam tingkat isolasi Untuk informasi lebih lanjut tentang tingkat isolasi Aurora, terutama perbedaan dalam Setelah transaksi besar selesai, statistik tabel mungkin menjadi usang. Statistik yang usang tersebut mungkin memerlukan pernyataan Jika sesi Anda berada dalam transaksi yang berlangsung lama (secara default, 10 menit), kueri lebih lanjut di dalam sesi tersebut tidak menggunakan kueri paralel. Waktu habis juga dapat terjadi dalam satu kueri yang berlangsung lama. Jenis waktu habis ini dapat terjadi jika kueri berjalan lebih lama dari interval maksimum (saat ini 10 menit) sebelum pemrosesan kueri paralel dimulai. Anda dapat mengurangi kemungkinan memulai transaksi yang berlangsung lama secara tidak sengaja dengan mengatur Contoh berikut ini menunjukkan bagaimana, dengan pengaturan
Untuk melihat berapa kali kueri tidak memenuhi syarat untuk kueri paralel karena kueri tersebut berada dalam transaksi yang berlangsung lama, periksa variabel status
Setiap pernyataan Kueri paralel
dapat berfungsi untuk tabel yang dikunci oleh pernyataan
Indeks pohon B Statistik yang dikumpulkan oleh pernyataan Jika pencarian indeks dapat melakukan kueri secara efisien tanpa pemindaian sarat data, Aurora mungkin menggunakan pencarian indeks. Melakukan hal ini akan menghindari pengeluaran tambahan dari pemrosesan kueri paralel. Terdapat juga batas keserentakan pada jumlah kueri paralel yang dapat berjalan secara bersamaan di klaster Aurora DB mana pun. Pastikan Anda menggunakan praktik terbaik untuk mengindeks tabel, sehingga kueri yang paling sering dan paling sering muncul bersamaan menggunakan pencarian indeks. Indeks pencarian teks penuh (FTS) Saat ini, kueri paralel tidak digunakan untuk tabel yang berisi indeks pencarian teks penuh, terlepas dari apakah kueri tersebut mengacu pada kolom yang diindeks tersebut atau menggunakan operator Kolom virtualSaat ini, kueri paralel tidak digunakan untuk tabel yang berisi kolom virtual, terlepas dari apakah kueri tersebut merujuk pada kolom virtual mana pun. Mekanisme caching bawaanAurora mencakup mekanisme caching bawaan, yaitu buffer pool dan cache kueri. Pengoptimal Aurora memilih antara mekanisme caching ini dan kueri paralel bergantung pada mana yang paling efektif untuk kueri tertentu. Saat kueri paralel memfilter baris dan mengubah serta mengekstraksi nilai kolom, data dikirim kembali ke simpul kepala sebagai urutan dan bukan sebagai halaman data. Oleh karena itu, menjalankan kueri paralel tidak akan menambahkan halaman apa pun ke dalam buffer pool, atau mengeluarkan halaman yang sudah ada di dalam bufer. Aurora memeriksa jumlah halaman data tabel yang ada dalam buffer pool, dan bagian mana dari data tabel tersebut yang direpresentasikan oleh angka tersebut. Aurora menggunakan informasi tersebut untuk menentukan apakah lebih efisien untuk menggunakan kueri paralel (dan mem-bypass data dalam buffer pool). Sebagai alternatif, Aurora mungkin menggunakan jalur pemrosesan kueri nonparalel, yang menggunakan cache data dalam buffer pool. Halaman mana yang dibuat cache dan bagaimana kueri sarat data dapat memengaruhi caching dan pengeluaran bergantung pada pengaturan konfigurasi yang terkait dengan buffer pool. Oleh karena itu, akan sulit untuk memprediksi apakah kueri tertentu menggunakan kueri paralel, karena pilihannya bergantung pada data yang selalu berubah dalam buffer pool. Selain itu, Aurora menerapkan batas keserentakan pada kueri paralel. Karena tidak setiap kueri menggunakan kueri paralel, tabel yang diakses oleh beberapa kueri secara serentak biasanya memiliki bagian yang substansial dari data mereka dalam buffer pool. Oleh karena itu, Aurora sering kali tidak memilih tabel ini untuk kueri paralel. Ketika Anda menjalankan urutan kueri nonparalel pada tabel yang sama, kueri pertama mungkin lambat karena data tidak ada dalam buffer pool. Lalu kueri kedua dan selanjutnya jauh lebih cepat karena buffer pool sekarang sudah "dipanaskan". Kueri paralel biasanya menunjukkan kinerja yang konsisten dari kueri pertama terhadap tabel. Saat melakukan uji kinerja, buat tolok ukur kueri nonparalel dengan buffer pool yang dingin dan hangat. Dalam beberapa kasus, hasil dari buffer pool hangat dapat menghasilkan perbandingan yang baik dengan waktu kueri paralel. Dalam kasus ini, pertimbangkan faktor seperti frekuensi kueri terhadap tabel tersebut. Pertimbangkan juga apakah bermanfaat untuk menyimpan data untuk tabel tersebut di dalam buffer pool. Cache kueri menghindari menjalankan ulang kueri saat kueri yang identik dikirimkan dan data tabel yang mendasarinya tidak berubah. Kueri yang dioptimalkan dengan fitur kueri paralel dapat masuk ke cache kueri, yang secara efektif menjadikannya instan saat dijalankan lagi. Saat melakukan perbandingan kinerja, cache kueri dapat menghasilkan jumlah pengaturan waktu yang rendah secara buatan.
Oleh karena itu, dalam situasi serupa tolok ukur, Anda dapat menggunakan petunjuk Pastikan Anda menghapus petunjuk ini dari sumber Anda saat beralih ke penggunaan kueri paralel untuk produksi. Tabel sementara MyISAMPengoptimalan kueri paralel hanya berlaku untuk tabel InnoDB. Karena Aurora MySQL menggunakan MyISAM di balik layar untuk tabel sementara, fase kueri internal yang mencakup tabel sementara tidak pernah menggunakan kueri paralel. Fase kueri ini ditunjukkan oleh |