Readyset Mencapai Peningkatan Prestasi 450x dengan Index Condition Pushdown untuk Database Joins

Pasukan Komuniti BigGo
Readyset Mencapai Peningkatan Prestasi 450x dengan Index Condition Pushdown untuk Database Joins

Pengoptimuman prestasi pangkalan data terus menjadi cabaran kritikal bagi aplikasi moden, terutamanya apabila berurusan dengan operasi join yang kompleks. Readyset , lapisan caching yang direka untuk latensi pertanyaan sub-milisaat, baru-baru ini menangani halangan besar dalam sistem mereka: straddled joins semasa cache misses. Joins ini melibatkan predikat penapisan pada kedua-dua belah operasi join, mewujudkan cabaran prestasi yang sukar diselesaikan secara berkesan oleh pendekatan pengoptimuman tradisional.

Mengoptimumkan prestasi pangkalan data dalam  Readyset , menangani cabaran dengan cantuman bersilang
Mengoptimumkan prestasi pangkalan data dalam Readyset , menangani cabaran dengan cantuman bersilang

Punca Akar: Pembacaan Data Berlebihan

Penyiasatan prestasi mendedahkan dalang yang mengejutkan. Pada mulanya, jurutera mengesyaki mampatan data adalah halangan, kerana profiling menunjukkan 30% masa pelaksanaan dihabiskan untuk dekompresi. Walau bagaimanapun, menukar algoritma mampatan hanya mengalihkan masalah kepada ketepuan I/O cakera. Isu sebenar adalah jumlah data yang tidak perlu dibaca dari storan.

Dalam straddled joins dengan selektiviti yang tidak sekata, pendekatan hash join lama akan menilai kedua-dua belah join secara berasingan. Ini bermakna membaca hampir keseluruhan jadual walaupun satu pihak mempunyai syarat yang sangat selektif. Sebagai contoh, mencari seorang pengguna melalui e-mel sambil juga menapis 90% pesanan mengikut status menghasilkan materialisasi berjuta-juta baris yang tidak perlu yang akan dibuang selepas operasi join.

Pengurangan I/O: Pendekatan sebelumnya memerlukan ~10K IOPS dengan 80% penggunaan peranti untuk pertanyaan tunggal

Index Condition Pushdown: Pendekatan Yang Lebih Bijak

Penyelesaian datang melalui pelaksanaan Index Condition Pushdown (ICP), yang secara asasnya mengubah cara joins ini dilaksanakan. Daripada menapis kedua-dua belah secara berasingan, pendekatan baharu mula-mula menilai pihak yang lebih selektif, kemudian menggunakan keputusan tersebut untuk membina carian yang disasarkan untuk pihak yang lain.

Strategi ini memanfaatkan indeks kompaun dengan berkesan. Apabila mencari pesanan dengan status tertentu yang dimiliki oleh pengguna tertentu, sistem kini boleh menggunakan indeks pada kedua-dua lajur user_id dan status untuk mengambil hanya baris yang berkaitan. Ini menghapuskan keperluan untuk mengimbas bahagian besar jadual dan mengurangkan penggunaan memori secara dramatik.

Pengoptimuman Memori: Menghapuskan keperluan untuk merealisasikan berjuta-juta baris yang akan dibuang selepas penggabungan

Pengiktirafan Komuniti dan Pelaksanaan Serupa

Komuniti pangkalan data telah mengiktiraf corak pengoptimuman ini merentasi sistem yang berbeza. Enjin pangkalan data lain telah melaksanakan pendekatan serupa, dengan beberapa melaporkan peningkatan prestasi yang setanding - dari pertanyaan 6 saat turun kepada 50 milisaat. Teknik ini telah diterima pakai dengan pelbagai nama, termasuk pushdown joins dalam sesetengah sistem, walaupun konsep teras kekal konsisten merentasi pelaksanaan.

Kami juga berubah dari 6 saat kepada 50ms. Peningkatan yang besar.

Sesetengah pembangun telah menyatakan bahawa walaupun terminologi mungkin berbeza antara sistem, prinsip pengoptimuman asas untuk mengurangkan pergerakan data yang tidak perlu dan memanfaatkan indeks dengan lebih berkesan sedang menjadi pendekatan standard untuk mengendalikan senario join yang kompleks.

Peningkatan Prestasi: Sehingga 450x kelajuan untuk pertanyaan gabungan bersilang

Impak Dunia Sebenar

Pengoptimuman ini menangani senario pengeluaran biasa di mana aplikasi perlu menapis data merentasi beberapa jadual berkaitan. Platform e-dagang, sebagai contoh, kerap perlu mencari pengguna dengan atribut tertentu dan pesanan mereka yang memenuhi kriteria tertentu. Pendekatan sebelumnya akan membaca jumlah data yang tidak berkaitan yang besar, manakala kaedah baharu menyasarkan dengan tepat hanya rekod yang diperlukan.

Peningkatan ini amat berharga untuk sistem yang mengendalikan beban kerja volum tinggi di mana walaupun ketidakcekapan kecil boleh bertambah menjadi masalah prestasi yang ketara. Dengan mengurangkan operasi I/O dan penggunaan memori, pengoptimuman ini bukan sahaja meningkatkan kelajuan pertanyaan tetapi juga mengurangkan penggunaan sumber sistem secara keseluruhan.

Rujukan: Optimizing Straddled Joins in Readyset: From Hash Joins to Index Condition Pushdown