Mengoptimalkan resource dan mengisolasi kueri baca dengan penerusan kueri transparan

Untuk mengalihkan traffic baca dari instance utama tanpa mengorbankan konsistensi baca-tulis atau mengubah endpoint koneksi aplikasi, Anda dapat mengaktifkan, mengonfigurasi, dan memantau penerusan kueri transparan di instance AlloyDB untuk PostgreSQL. Penerusan kueri transparan menangkap kueri hanya baca pada node utama dan secara selektif merutekannya ke instance kumpulan baca yang kurang dimanfaatkan, sehingga menampilkan hasil yang konsisten dengan eksekusi node utama.

penerusan kueri transparan

Penerusan kueri transparan paling cocok untuk skenario berikut:

  • Workload hybrid (HTAP): Anda menjalankan kueri pelaporan atau analisis, dengan konsistensi read-your-writes, pada database yang sama yang menangani transaksi, dan Anda ingin mencegah pembacaan yang mahal memengaruhi latensi tulis.
  • Aplikasi monolitik: Anda ingin menggunakan kapasitas kumpulan baca tanpa melakukan refaktorisasi aplikasi untuk menggunakan endpoint pembaca dan penulis yang terpisah, sekaligus tetap memerlukan konsistensi baca-tulis yang ketat.
  • Pengelolaan beban dinamis: Anda mengalami lonjakan traffic baca yang tidak dapat diprediksi dan ingin database otomatis memindahkan beban kerja ke node pool baca saat node utama mengalami beban berat dengan konsistensi read-your-writes.

Sebelum memulai

  • Pastikan cluster AlloyDB Anda kompatibel dengan PostgreSQL 17 atau 18.

  • Anda harus memiliki setidaknya satu instance kumpulan baca aktif yang dikonfigurasi di cluster AlloyDB. Untuk mengetahui informasi tentang cara membuat atau memverifikasi instance kumpulan baca, lihat Membuat instance kumpulan baca di cluster dan Melihat detail instance.

Peran yang diperlukan

Mengaktifkan penerusan kueri transparan

Penerusan kueri transparan dinonaktifkan secara default. Anda dapat mengaktifkannya secara dinamis di tingkat sesi atau tingkat database tanpa memulai ulang database.

Mengaktifkan di tingkat sesi

Untuk mengaktifkan penerusan kueri transparan untuk sesi Anda saat ini, jalankan perintah SQL berikut:

SET alloydb.enable_query_forwarding = TRUE;

Mengaktifkan di tingkat database

Untuk mengaktifkan penerusan kueri transparan untuk database tertentu, jalankan perintah SQL berikut:

ALTER DATABASE DATABASE_NAME SET alloydb.enable_query_forwarding = ON;

Ganti DATABASE_NAME dengan nama database Anda.

Kondisi kelayakan kueri

  • Penerusan kueri transparan hanya berlaku untuk pernyataan SELECT hanya baca.
  • Kueri tidak boleh menggunakan kunci tingkat baris, seperti yang digunakan di SELECT ... FOR UPDATE.
  • Penerusan kueri transparan memiliki dukungan terbatas untuk pernyataan SELECT dalam transaksi multi-pernyataan.
  • Kueri tidak dapat mereferensikan tabel sementara, tabel yang tidak dicatat dalam log, atau tabel katalog.
  • Kueri harus mematuhi batasan fungsi berikut:
    • Kueri tidak boleh berisi fungsi volatil atau fungsi yang ditentukan pengguna (UDF).
    • Kueri tidak boleh berisi fungsi nilai SQL seperti CURRENT_DATE, LOCALTIME, USER, atau CURRENT_SCHEMA.
    • Kueri tidak boleh berisi ekspresi NEXTVAL().
    • Kueri tidak boleh berisi prosedur SQL atau fungsi SQL.
  • Semua kolom hasil harus menggunakan jenis data yang menerapkan fungsi kirim dan terima biner.
  • Kueri hanya memenuhi syarat untuk diteruskan jika biaya overhead-nya minimal dibandingkan dengan total biaya kueri. Artinya, kueri yang menggunakan pemindaian indeks biasanya dikecualikan, karena overhead-nya biasanya melebihi biaya kueri itu sendiri.
  • Penerusan ke node hot standby AlloyDB tidak didukung. Node hot standby AlloyDB adalah node sekunder khusus untuk instance utama ketersediaan tinggi (HA).
  • Kueri harus menggunakan protokol kueri sederhana. Protokol kueri yang diperluas tidak didukung.

Memverifikasi kelayakan kueri dengan EXPLAIN

Dalam contoh berikut, large_table adalah tabel dalam database dengan banyak baris. Untuk memeriksa apakah kueri tertentu memenuhi syarat untuk diteruskan berdasarkan konfigurasi Anda saat ini, jalankan perintah EXPLAIN:

EXPLAIN SELECT count(*) FROM large_table t1, large_table t2;

Jika kueri memenuhi syarat, output akan menyertakan pernyataan status penerusan kueri setelah rencana eksekusi Postgres standar. Jika pernyataan ini tidak ada, kueri tidak memenuhi syarat untuk penerusan kueri dan dijalankan secara lokal di primer.

Aggregate  (cost=25000.00..25000.01 rows=1 width=8)
  ->  Nested Loop  (cost=0.00..20000.00 rows=1000000 width=0)
        ... [Standard Postgres Plan Steps] ...
Query Forwarding: Eligible. (overhead=1250.02)

Dalam respons output, Eligible menunjukkan bahwa kueri memenuhi kriteria SQL hanya baca standar dan analisis biaya-manfaat mendukung peruteannya ke instance kumpulan baca. Parameter overhead menunjukkan biaya perencana yang dihitung untuk meneruskan kueri ke instance kumpulan baca, termasuk overhead pembuatan koneksi dan pemulihan snapshot pada replika.

Memantau metrik penerusan kueri

Untuk memverifikasi bahwa penerusan kueri transparan berfungsi di seluruh workload, Anda dapat melacak metrik berikut di Cloud Monitoring:

Metrik Deskripsi Detail
alloydb.googleapis.com/internal/database/postgresql/workload/distributed/tqf_query_count Jumlah kumulatif kueri yang ditangani oleh penerusan kueri transparan. Nama Tampilan: Jumlah kueri TQF
Jenis Metrik: CUMULATIVE
Jenis Nilai: INT64
Label:
status: Penanganan kueri jika penerusan kueri transparan diaktifkan. Label ini mencatat salah satu nilai berikut:
  • completed: dijalankan pada instance read pool.
  • fallback: dijalankan di instance utama.
  • disqualified: tidak dapat diteruskan.

Langkah berikutnya