全部产品
Search
文档中心

ApsaraDB for SelectDB:Kueri titik dengan konkurensi tinggi

更新时间:Jul 30, 2025

Topik ini menjelaskan cara mengoptimalkan dan menggunakan kueri titik dengan konkurensi tinggi di ApsaraDB for SelectDB. Ini membantu Anda mengoptimalkan kueri konkuren dan mengurangi latensi tanggapan.

Informasi latar belakang

Dalam skenario layanan dengan konkurensi tinggi, Anda sering kali perlu menanyakan baris data dari sistem. Namun, ApsaraDB for SelectDB dikembangkan berdasarkan format penyimpanan kolom. Jika tabel lebar digunakan, format penyimpanan kolom meningkatkan pembacaan I/O acak, yang mengurangi kecepatan kueri. Pengoptimal kueri dan mesin eksekusi ApsaraDB for SelectDB tidak cocok untuk beberapa kueri sederhana seperti kueri titik. Pengoptimal kueri harus mampu merencanakan jalur pendek untuk memproses kueri tersebut. Selain itu, lapisan akses kueri ApsaraDB for SelectDB ditulis dalam Java, sehingga overhead CPU tinggi terjadi ketika menganalisis dan mengurai kueri SQL dengan konkurensi tinggi. Untuk menyelesaikan masalah ini, ApsaraDB for SelectDB menyediakan mode penyimpanan baris, jalur kueri pendek, dan pernyataan yang disiapkan.

Penyimpanan baris

Anda dapat mengaktifkan mode penyimpanan baris untuk tabel di ApsaraDB for SelectDB. Namun, ini mengonsumsi ruang penyimpanan tambahan. Untuk mengimplementasikan penyimpanan baris, ApsaraDB for SelectDB mengkodekan data yang disimpan dalam format penyimpanan baris dan menyimpannya di kolom terpisah, yang menyederhanakan implementasi penyimpanan baris. Mode penyimpanan baris hanya dapat diaktifkan saat membuat tabel. Anda harus mengonfigurasi properti berikut dalam pernyataan CREATE TABLE.

"store_row_column" = "true"

Optimalkan kueri titik dalam model Kunci Unik

Jika Anda mengaktifkan mode penyimpanan baris dalam model Kunci Unik, Anda dapat mengaktifkan kebijakan merge on write (MoW) untuk mengurangi overhead I/O selama kueri titik. Jika parameter enable_unique_key_merge_on_write dan store_row_column diatur ke true dalam pernyataan CREATE TABLE dalam model Kunci Unik, pengoptimal kueri merencanakan jalur pendek untuk mengoptimalkan pelaksanaan kueri titik berdasarkan kunci utama, dan hanya satu panggilan prosedur jarak jauh (RPC) yang diperlukan untuk mengeksekusi kueri.

Contoh kode berikut memberikan contoh tentang cara mengaktifkan mode penyimpanan baris dan kebijakan MoW.

CREATE TABLE `tbl_point_query` (
    `key` int(11) NULL,
    `v1` decimal(27, 9) NULL,
    `v2` varchar(30) NULL,
    `v3` varchar(30) NULL,
    `v4` date NULL,
    `v5` datetime NULL,
    `v6` float NULL,
    `v7` datev2 NULL
) ENGINE=OLAP
UNIQUE KEY(`key`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`key`) BUCKETS 16
PROPERTIES (
    "enable_unique_key_merge_on_write" = "true",
    "light_schema_change" = "true",
    "store_row_column" = "true"
);
Catatan
  • Kami merekomendasikan Anda mengatur parameter enable_unique_key_merge_on_write ke true untuk memungkinkan mesin penyimpanan dengan cepat melakukan kueri titik berdasarkan kunci utama.

  • Jika hanya kunci utama yang terlibat dalam kondisi kueri, seperti SELECT * FROM tbl_point_query WHERE id = 123, pengoptimal kueri merencanakan jalur pendek untuk mengoptimalkan kueri.

  • Kami merekomendasikan Anda mengatur parameter light_schema_change ke true karena optimasi kueri titik berdasarkan kunci utama bergantung pada unique column ID dalam perubahan skema ringan untuk menemukan kolom.

  • Kueri titik harus berisi kondisi kesetaraan yang terkait dengan kolom kunci dalam satu tabel. Kueri JOIN dan subkueri bersarang tidak didukung. Klausul WHERE hanya mendukung kueri berdasarkan nilai kolom kunci, yang dapat dianggap sebagai kueri pasangan kunci-nilai.

Gunakan pernyataan yang disiapkan

Untuk mengurangi overhead penguraian SQL dan perhitungan ekspresi, ApsaraDB for SelectDB menyediakan pernyataan yang disiapkan yang sepenuhnya kompatibel dengan protokol MySQL di lapisan akses kueri. Anda hanya dapat menggunakan pernyataan yang disiapkan saat melakukan kueri titik berdasarkan kunci utama. Jika fitur pernyataan yang disiapkan diaktifkan di antarmuka depan (FE), pernyataan SQL dan ekspresinya dihitung sebelumnya dan disimpan dalam cache memori tingkat sesi. Kueri berikutnya dapat langsung menggunakan objek yang di-cache. Jika CPU membatasi kinerja kueri titik berbasis kunci utama, kinerja kueri tersebut dapat ditingkatkan lebih dari empat kali setelah fitur pernyataan yang disiapkan diaktifkan.

Contoh berikut menunjukkan cara menggunakan fitur pernyataan yang disiapkan dalam Java Database Connectivity (JDBC).

  1. Tentukan URL JDBC dan aktifkan fitur pernyataan yang disiapkan di server.

    url = jdbc:mysql://127.0.0.1:9030/ycsb?useServerPrepStmts=true
  2. Gunakan pernyataan yang disiapkan.

    // gunakan `?` untuk placeholder, readStatement harus digunakan kembali
    PreparedStatement readStatement = conn.prepareStatement("select * from tbl_point_query where key = ?");
    ...
    readStatement.setInt(1234);
    ResultSet resultSet = readStatement.executeQuery();
    ...
    readStatement.setInt(1235);
    resultSet = readStatement.executeQuery();
    ...

Aktifkan fitur cache baris

ApsaraDB for SelectDB menyediakan fitur cache tingkat halaman yang menyimpan data kolom tertentu di setiap halaman. Setiap halaman menyimpan data sebuah kolom, yang menunjukkan bahwa cache tingkat halaman digunakan untuk kolom. Dalam mode penyimpanan baris, sebuah baris berisi data dari beberapa kolom, dan cache mungkin dihapus oleh kueri besar, yang dapat mengurangi tingkat hit. Untuk meningkatkan tingkat hit, ApsaraDB for SelectDB menyediakan fitur cache baris. Fitur cache baris menggunakan mekanisme cache LRU (Least Recently Used) di ApsaraDB for SelectDB untuk memastikan penggunaan memori yang cukup. Anda dapat mengaktifkan fitur cache baris dengan mengonfigurasi parameter berikut dari konfigurasi backend (BE):

  • disable_storage_row_cache: menentukan apakah akan mengaktifkan fitur cache baris. Secara default, parameter ini diatur ke false untuk mengurangi overhead memori.

  • row_cache_mem_limit: persentase maksimum memori yang dapat ditempati oleh cache baris. Nilai default: 20, yang menunjukkan bahwa 20% memori dapat ditempati oleh cache baris.