Mengoptimalkan resource dan mengisolasi kueri baca dengan penerusan kueri transparan

Halaman ini menjelaskan cara mengaktifkan, mengonfigurasi, dan memantau penerusan kueri transparan di instance AlloyDB untuk PostgreSQL. Penerusan kueri transparan adalah fitur pengoptimalan resource cerdas yang memungkinkan node utama mencegat kueri hanya baca dan meneruskannya secara selektif ke instance kumpulan baca yang kurang dimanfaatkan sambil mempertahankan konsistensi baca-tulis. Kueri yang diteruskan ke kumpulan baca menghasilkan hasil yang konsisten dengan eksekusi node utama.

penerusan kueri yang transparan

Penerusan kueri transparan paling cocok untuk skenario berikut:

  • Workload hibrida (HTAP): Anda menjalankan kueri pelaporan atau analitis, dengan konsistensi baca-tulis, di database yang sama yang menangani transaksi, dan Anda ingin mencegah pembacaan mahal memengaruhi latensi tulis.
  • Aplikasi monolitik: Anda ingin menggunakan kapasitas kumpulan baca tanpa memfaktorkan ulang aplikasi untuk menggunakan endpoint pembaca dan penulis terpisah, sambil tetap memerlukan konsistensi baca-tulis yang ketat.
  • Pengelolaan beban dinamis: Anda mengalami lonjakan traffic baca yang tidak terduga dan Anda ingin database otomatis mengurangi beban kerja ke node kumpulan baca saat node utama berada di bawah beban berat dengan konsistensi baca-tulis.

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

  • Pastikan Anda memiliki peran database alloydbsuperuser, atau Anda login sebagai pengguna postgres default.

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 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 mengambil kunci tingkat baris, seperti yang digunakan dalam SELECT ... FOR UPDATE.
  • Penerusan kueri transparan memiliki dukungan terbatas untuk pernyataan SELECT dalam transaksi multi-pernyataan.
  • Kueri tidak dapat mereferensikan tabel sementara, tidak tercatat, atau katalog.
  • Kueri harus mematuhi batasan fungsi berikut:
    • Kueri tidak boleh berisi fungsi yang tidak stabil 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 pengiriman dan penerimaan biner.
  • Kueri hanya memenuhi syarat untuk diteruskan jika biaya overhead-nya minimal dibandingkan dengan biaya total kueri. Artinya, kueri yang menggunakan pemindaian indeks biasanya dikecualikan, karena overhead-nya biasanya melebihi biaya kueri itu sendiri.
  • Penerusan ke node standby aktif AlloyDB tidak didukung. Node standby aktif AlloyDB adalah node sekunder khusus untuk instance utama ketersediaan tinggi (HA).

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 dalam konfigurasi 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 dieksekusi secara lokal di utama.

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 lebih memilih untuk merutekannya ke instance kumpulan baca. Parameter overhead menunjukkan biaya perencana yang dihitung untuk meneruskan kueri ke instance kumpulan baca, termasuk overhead untuk membuat koneksi dan memulihkan snapshot pada replika.

Memantau metrik penerusan kueri

Untuk memverifikasi bahwa penerusan kueri transparan berfungsi di seluruh workload Anda, 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: KUMULATIF
Jenis Nilai: INT64
Label:
status: Penanganan kueri jika penerusan kueri transparan diaktifkan. Label ini mencatat salah satu nilai berikut:
  • completed: dieksekusi pada instance kumpulan baca.
  • fallback: dieksekusi di utama.
  • disqualified: tidak dapat diteruskan.

Langkah berikutnya