AnalyticDB for MySQL menyediakan fitur paging cache. Anda dapat menggunakan fitur ini untuk meningkatkan efisiensi query halaman yang melibatkan sejumlah besar data di dalam klausa LIMIT, OFFSET, dan ORDER BY. Fitur ini membantu menyelesaikan masalah kinerja dan hambatan sumber daya dari query halaman dalam yang mendalam. Topik ini menjelaskan cara menggunakan fitur paging cache untuk mengoptimalkan kinerja query halaman.
Prasyarat
Sebuah kluster AnalyticDB for MySQL versi V3.2.3 atau lebih baru telah dibuat.
Untuk melihat dan memperbarui versi minor dari sebuah kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL dan pergi ke bagian Configuration Information pada halaman Cluster Information.
Ikhtisar
Untuk menyelesaikan masalah kinerja yang disebabkan oleh query halaman dalam yang mendalam, AnalyticDB for MySQL menyediakan fitur paging cache. Saat pertama kali Anda memulai query halaman, sistem menanyakan data dari database dan menyimpan hasil query di tabel cache sementara. Saat Anda memulai query halaman berikutnya dengan pola SQL yang sama, sistem membaca data dari tabel cache sementara untuk mencegah operasi pengurutan berulang. Ini secara efektif menyelesaikan masalah kinerja yang disebabkan oleh query halaman dalam yang mendalam dan mencegah kesalahan OOM yang disebabkan oleh klausa ORDER BY. AnalyticDB for MySQL secara otomatis membersihkan data cache yang tidak lagi diperlukan berdasarkan kebijakan eviksi untuk memastikan bahwa sumber daya digunakan dengan baik.
Fitur paging cache cocok untuk skenario berikut:
Penggunaan
Konfigurasikan database cache
Sebelum menggunakan fitur paging cache untuk menyimpan hasil query, kami sarankan Anda menentukan database untuk menyimpan tabel cache sementara untuk query halaman. Jika Anda tidak menentukan database, tabel cache sementara akan disimpan di database internal yang terhubung. Saat Anda mengaktifkan fitur paging cache, tabel cache sementara akan dibuat secara otomatis.
Anda tidak dapat menentukan database eksternal sebagai database cache.
Sebagai contoh, Anda dapat menentukan database paging_cache sebagai database cache. Anda juga dapat menentukan database lainnya.
SET ADB_CONFIG PAGING_CACHE_SCHEMA=paging_cache;Aktifkan fitur paging cache untuk query halaman
Jika beberapa query halaman memiliki pola SQL yang sama, Anda dapat menambahkan petunjuk ke pernyataan SQL untuk meningkatkan kinerja. Saat pertama kali Anda memulai query halaman yang berisi petunjuk, sistem membuat tabel cache sementara untuk menyimpan hasil query halaman. Saat Anda memulai query halaman berikutnya dengan pola SQL yang sama, Anda dapat menambahkan petunjuk yang sama ke pernyataan SQL. Dengan cara ini, sistem membaca data dari tabel cache sementara tanpa perlu akses database berulang.
Batasan
Setelah Anda menghilangkan klausa LIMIT dan OFFSET, jumlah entri data yang ingin Anda lakukan query halaman harus kurang dari 100 juta.
Jika jumlah entri data yang akan diquery melebihi 100 juta, Submit a ticket untuk menyesuaikan batas atas jumlah entri data.
Metode untuk mengaktifkan fitur paging cache
Anda dapat menggunakan salah satu petunjuk berikut untuk mengaktifkan fitur paging cache:
paging_id=<paging_id>Parameter
paging_idmenentukan tabel cache yang dibuat untuk sekumpulan query halaman dengan pola SQL yang sama tetapi melibatkan nilai yang berbeda dalam klausaLIMITdanOFFSET. Klien harus menghasilkan ID unik untuk mengidentifikasi secara unik tabel cache untuk sekumpulan query halaman.Jika parameter
paging_idyang ditentukan tidak ada, tabel cache dibuat.Jika parameter
paging_idyang diquery ada dan pola SQL yang terlibat dalam query sesuai dengan pola SQL yang sesuai dengan parameterpaging_id, query mengenai cache.Jika parameter
paging_idyang diquery ada tetapi pola SQL yang terlibat dalam query tidak sesuai dengan pola SQL yang sesuai dengan parameterpaging_id, terjadi kesalahan. Anda dapat memeriksa apakah parameterpaging_idsudah digunakan. Untuk informasi lebih lanjut, lihat bagian "Tanyakan Informasi tentang Tabel Cache" dari topik ini.
CatatanParameter
paging_idharus memenuhi konvensi penamaan berikut: Nama parameter harus 1 hingga 127 karakter panjangnya dan dapat berisi huruf, angka, dan garis bawah (_). Nama parameter harus dimulai dengan huruf atau garis bawah (_). Nama parameter tidak boleh berisi tanda kutip tunggal ('), tanda kutip ganda ("), tanda seru (!), atau spasi. Nama parameter tidak boleh menjadi kata cadangan SQL reserved word.Sebagai contoh, Anda dapat mengatur ID paging ke
paging123untuk hasil dari sekumpulan query halaman yang menggunakan fitur paging cache./*paging_id=paging123*/ SELECT * FROM t_order ORDER BY id LIMIT 0, 100;paging_cache_enabled=trueMetode ini tidak memerlukan modifikasi petunjuk yang sering. Server menggunakan pola SQL yang menghilangkan klausa
LIMITdanOFFSETuntuk menghasilkan ID paging guna mengidentifikasi sekumpulan query halaman.Ketergantungan pada pencocokan pola SQL membatasi fleksibilitas metode ini. Jika tidak ada tabel cache untuk query halaman dengan pola SQL yang sama tanpa klausa LIMIT dan OFFSET, tabel cache dibuat. Jika ada tabel cache untuk query halaman dengan pola SQL yang sama tanpa klausa LIMIT dan OFFSET, tabel cache digunakan untuk menanyakan data.
Pernyataan contoh:
/*paging_cache_enabled=true*/ SELECT * FROM t_order ORDER BY id LIMIT 0, 100;
Jika tabel cache gagal dibuat, Anda harus membersihkan data cache dari query halaman dan memulai ulang query halaman untuk membuat tabel cache.
Tanyakan informasi tentang tabel cache
Anda dapat menanyakan informasi tentang semua tabel cache dari query halaman dalam kluster saat ini, seperti ID paging, ukuran cache, dan status cache.
SELECT * FROM INFORMATION_SCHEMA.KEPLER_PAGING_CACHE_STATUS_MERGED;Tentukan jumlah maksimum tabel cache
Anda dapat menentukan jumlah maksimum tabel cache dalam kluster saat ini. Nilai default: 100.
SET ADB_CONFIG PAGING_CACHE_MAX_TABLE_COUNT=100;Jika Anda mencoba membuat tabel cache saat total jumlah tabel cache melebihi batas, terjadi kesalahan. Pesan kesalahan contoh:
Jumlah paging cache melebihi batas. Harap bersihkan cache yang tidak digunakan atau tingkatkan parameter terkait menggunakan SET ADB_CONFIG PAGING_CACHE_MAX_TABLE_COUNT=xxx.Bersihkan data cache yang tidak lagi diperlukan atau tingkatkan jumlah maksimum tabel cache berdasarkan pesan kesalahan.
Tentukan periode validitas untuk tabel cache
Anda dapat menentukan periode validitas untuk tabel cache. Unit: detik. Setelah periode validitas berakhir, tabel cache menjadi tidak valid. Saat Anda memulai query halaman berikutnya dengan pola SQL yang sama, sistem melakukan akses database dan memperbarui tabel cache. Dalam banyak kasus, Anda dapat menentukan periode validitas untuk tabel cache dalam skenario kontrol konkurensi laporan.
Sebagai contoh, Anda dapat menggunakan petunjuk /*paging_cache_enabled=true, paging_cache_validity_interval=300*/ untuk memungkinkan tabel cache tetap valid selama 300 detik setelah pembuatan. Pernyataan contoh:
/*paging_cache_enabled=true, paging_cache_validity_interval=300*/ SELECT * FROM t_order ORDER BY id LIMIT 0, 100;Bersihkan data cache dari query halaman
Saat menggunakan fitur paging cache untuk menyimpan hasil query halaman, data cache disimpan di ruang penyimpanan panas AnalyticDB for MySQL. Jika data cache tertentu tidak lagi diperlukan, Anda dapat membersihkan data cache untuk meningkatkan penyimpanan yang tersedia.
Pembersihan manual
Data Cache dari Query Halaman yang Ditentukan oleh Pola SQL
Gunakan petunjuk
/*paging_cache_enabled=true, invalidate_paging_cache=true*/untuk membersihkan data cache dari query halaman yang ditentukan oleh pola SQL.Pernyataan contoh:
/*paging_cache_enabled=true,invalidate_paging_cache=true*/ SELECT * FROM t_order ORDER BY id LIMIT 0, 100;Data Cache dari Query Halaman yang Ditentukan oleh Parameter
paging_idBersihkan data cache dari query halaman yang ditentukan oleh parameter
paging_id.Pernyataan contoh:Contoh pernyataan:
CLEAN_PAGING_CACHE paging123;CatatanUntuk informasi tentang cara mendapatkan nilai parameter
paging_id, lihat bagian "Tanyakan Informasi tentang Tabel Cache" dari topik ini.
Pembersihan otomatis
Anda dapat menentukan waktu kedaluwarsa cache untuk membersihkan data cache dari query halaman yang tidak diakses dalam rentang waktu tertentu. Nilai default: 600. Unit: detik. Secara default, data cache yang tidak diakses dalam 10 menit secara otomatis dibersihkan.
SET ADB_CONFIG PAGING_CACHE_EXPIRATION_TIME=600;Nonaktifkan fitur paging cache untuk kluster
Setelah Anda menonaktifkan fitur paging cache untuk kluster, semua petunjuk terkait fitur ini menjadi tidak valid, dan query halaman diproses menggunakan metode query asli.
SET ADB_CONFIG PAGING_CACHE_ENABLE=false;Setelah Anda menonaktifkan fitur paging cache, Anda dapat menjalankan pernyataan SHOW ADB_CONFIG KEY=PAGING_CACHE_ENABLE; untuk memeriksa apakah konfigurasi berlaku.
Kesalahan umum dan pemecahan masalah
Persiapan paging cache gagal, dan cache tidak tersedia
Pesan Kesalahan:
Persiapan paging cache gagal, dan cache tidak tersedia. Harap gunakan /*paging_cache_enabled=true,invalidate_paging_cache=true*/ untuk membersihkan cache yang tidak tersedia atau atur pagingId tertentu dengan /*paging_id=xxx*/ untuk menghasilkan cache baru. Perhatikan bahwa data cache lama dan baru mungkin tidak konsisten.Penyebab: Saat menggunakan fitur paging cache untuk menanyakan data, pengecualian mungkin terjadi, seperti restart node dan penskalaan. Jika query halaman mengenai tabel cache yang gagal dibuat, server tidak melakukan akses database atau secara otomatis membuat ulang tabel cache. Server melempar kesalahan.
Solusi: Untuk memastikan konsistensi data, lakukan operasi berikut: Dalam skenario ekspor data, kami sarankan Anda membersihkan data yang diekspor dan data cache yang tidak tersedia, kemudian memulai ulang query halaman untuk membuat ulang tabel cache. Dalam skenario lain, kami sarankan Anda membersihkan data cache yang tidak tersedia atau menentukan nilai baru untuk parameter paging_id, kemudian memulai ulang query halaman untuk membuat ulang tabel cache.
Perbandingan kinerja
Gunakan dataset TPC-H 100 GB untuk mengevaluasi efek optimasi fitur paging cache untuk query halaman dalam skenario ekspor data.
Uji ini melibatkan 1 juta entri data yang diekspor. Setiap halaman berisi 100.000 entri. Jalankan pernyataan berikut untuk melakukan query halaman pada halaman pertama:
-- Query halaman umum tanpa menggunakan fitur paging cache
SELECT * FROM lineitem ORDER BY l_orderkey,l_linenumber LIMIT 0,100000;
-- Query halaman dengan menggunakan fitur paging cache (ORDER BY dihilangkan dalam skenario ekspor data)
/*paging_cache_enabled=true*/ SELECT * FROM lineitem LIMIT 0,100000;Hasil Uji:
Permintaan query dijalankan dalam mode konkurensi tunggal. Selama proses ekspor data, waktu respons rata-rata dari query halaman umum adalah 54.391 ms. Setelah fitur paging cache diaktifkan, waktu respons rata-rata adalah 525 ms. Kinerja meningkat sekitar 103 kali. Pemanfaatan CPU dan penggunaan memori secara signifikan berkurang.
Fitur paging cache secara signifikan mengurangi waktu respons dari query halaman selama proses ekspor data dan secara efektif mengurangi konsumsi sumber daya CPU dan memori.
