全部产品
Search
文档中心

PolarDB:Konsistensi global

更新时间:Nov 23, 2025

Topik ini menjelaskan kasus penggunaan, latar belakang, solusi teknis, prosedur, dan FAQ untuk fitur konsistensi global.

Ikhtisar

PolarDB for PostgreSQL menyediakan fitur konsistensi global pada tingkat kernel database. Fitur ini memastikan bahwa permintaan baca yang dikirim ke node mana pun dalam kluster mengembalikan hasil yang konsisten kuat.

Penerapan

Fitur ini didukung pada versi berikut dari PolarDB for PostgreSQL:

  • PostgreSQL 16 (versi mesin minor 2.0.16.9.9.0 atau lebih baru).

  • PostgreSQL 14 (versi mesin minor 2.0.14.11.22.0 atau lebih baru).

Catatan

Anda dapat melihat versi mesin minor di konsol atau dengan menjalankan pernyataan SHOW polardb_version;. Jika versi mesin minor kluster Anda tidak memenuhi persyaratan, Anda dapat meningkatkan versi mesin minor.

Informasi latar belakang

Pada arsitektur asli satu penulis, multi-pembaca dari PolarDB, node read-only menyediakan konsistensi sesi secara default. Meskipun teknologi replikasi fisik dan penyimpanan bersama secara efektif mengurangi latensi replikasi node read-only, teknologi tersebut tidak dapat menjamin bahwa permintaan yang dikirim ke node read-only selalu membaca data terbaru yang ditulis ke node RW. Latensi ini dapat menyebabkan inkonsistensi logika bisnis di industri yang sensitif terhadap latensi seperti keuangan dan game.

Seperti yang ditunjukkan pada gambar sebelumnya, aplikasi bisnis sering kali dipisahkan menggunakan kerangka kerja layanan mikro. Setelah Layanan A menulis data, ia menghasilkan pesan keberhasilan tulis dan memberi tahu Layanan B melalui komponen antrian pesan. Dalam skenario konsistensi sesi, setelah Layanan A memperbarui nilai kolom col menjadi 20, ia dapat langsung membaca nilai terbaru 20 dalam sesi yang sama, bahkan jika permintaan diarahkan ke node read-only. Namun, setelah Layanan A memberi tahu Layanan B tentang pembaruan data, jika Layanan B membaca langsung dari node read-only, Layanan B mungkin tidak mendapatkan hasil terbaru dan masih membaca nilai 10. Hal ini dapat menyebabkan masalah konsistensi data bagi aplikasi. Dalam skenario ini, aplikasi hanya dapat mengarahkan permintaan baca ke node RW untuk memastikan konsistensi data baca-setelah-tulis, sehingga menyebabkan sumber daya node read-only menganggur.

Solusi teknis

PolarDB for PostgreSQL menyediakan kemampuan baca konsistensi kuat untuk node read-only pada tingkat kernel database. Hal ini memastikan bahwa node read-only selalu dapat membaca data terbaru yang ditulis ke node RW, sehingga memberikan konsistensi kuat di seluruh kluster untuk operasi baca. Setelah Anda mengaktifkan fitur konsistensi global, setiap transaksi baca-tulis yang dikomit pada node RW diberi Nomor Urut Komit (Commit Sequence Number/CSN). CSN menunjukkan urutan komit transaksi dan digunakan untuk membangun snapshot transaksi yang lebih efisien yang menggantikan daftar transaksi aktif PostgreSQL asli. Node RW juga mencatat CSN dalam Write-Ahead Log (WAL). Node read-only kemudian memutar ulang WAL untuk membangun status transaksi yang lengkap.

Proses eksekusi SQL untuk pembacaan konsistensi kuat pada node read-only adalah sebagai berikut:

  1. Klien mengirim permintaan kueri ke node read-only.

  2. Node read-only memperoleh CSN terbaru dari node RW melalui jaringan.

  3. Node read-only menggunakan CSN terbaru dari node RW untuk membangun tampilan baca konsistensi kuat dan menunggu status transaksi node read-only diputar ulang hingga offset yang sesuai.

  4. Node read-only menentukan visibilitas data berdasarkan tampilan baca konsistensi kuat dan mengembalikan hasilnya ke klien.

Prosedur

  1. Masuk ke Konsol PolarDB.

  2. Di panel navigasi sebelah kiri, klik Clusters.

  3. Di pojok kiri atas, pilih wilayah tempat kluster ditempatkan.

  4. Temukan kluster target dan klik ID-nya.

  5. Di panel navigasi sebelah kiri, pilih Settings and Management > Parameters. Atur parameter polar_csn_enable dan polar_global_csn_enable menjadi on untuk mengaktifkan fitur CSN untuk transaksi.

    Catatan

    Anda harus me-restart kluster agar modifikasi parameter berlaku. Rencanakan operasi ini terlebih dahulu dan lakukan dengan hati-hati. Untuk informasi selengkapnya tentang cara mengatur parameter kluster di konsol, lihat Set cluster parameters.

  6. Di halaman Basic Information kluster target, pada bagian Database Connections, klik Configure di sebelah Cluster Endpoint atau klik Settings di kotak dialog yang muncul.

    image

  7. Di halaman konfigurasi titik akhir, atur Tingkat Konsistensi menjadi Global Consistency (Strong) dan konfigurasikan dua parameter terkait berikut:

    Parameter

    Deskripsi

    Global Consistency Timeout

    Periode waktu tunggu bagi node read-only untuk menunggu sinkronisasi data dari node primer guna memastikan konsistensi. Nilai valid: 1 hingga 1.000.000. Satuan: ms. Nilai default: 100.

    Global Consistency Timeout Policy

    Kebijakan yang diterapkan ketika node read-only mengalami waktu tunggu habis. Nilai valid:

    • 0, Send Requests to Primary Node (Default).

    • 1, Return Error Messages Due to Timeout.

    • 2, Automatic Downgrade to Inconsistent Read Due to Timeout

FAQ

Apa yang harus saya lakukan jika tidak ingin menggunakan pembacaan konsistensi global untuk kueri tertentu setelah mengaktifkan fitur konsistensi global?

Setelah Anda mengaktifkan konsistensi global pada node read-only, fitur ini berlaku untuk semua koneksi baru secara default. Jika Anda tidak ingin menggunakan fitur ini untuk kueri tertentu, Anda dapat menjalankan perintah berikut untuk menonaktifkan pembacaan konsistensi global untuk sesi saat ini:

SET polar_scc_enable = off;

Bagaimana cara mengatur waktu tunggu pembacaan konsistensi global?

Masuk ke Konsol PolarDB. Klik Configure di sebelah titik akhir kluster target atau klik Settings di kotak dialog yang muncul, lalu ubah nilai Global Consistency Timeout. Jika terjadi waktu tunggu habis, klien akan menerima pesan kesalahan berikut:

SCC timeout waiting for WAL replay
Catatan

Untuk kluster dengan beban tulis yang berat atau tidak stabil, Anda dapat mengatur nilai yang lebih besar untuk Global Consistency Timeout.

Bagaimana cara menurunkan tingkat konsistensi setelah waktu tunggu pembacaan konsistensi global habis?

Masuk ke Konsol PolarDB. Klik Configure di sebelah titik akhir kluster target atau klik Settings di kotak dialog yang muncul. Atur Global Consistency Timeout Policy menjadi Automatic Downgrade to Inconsistent Read Due to Timeout. Ketika pembacaan konsistensi global mengalami waktu tunggu habis, operasi kueri secara otomatis diturunkan menjadi pembacaan tidak konsisten, dan tidak ada pesan kesalahan yang dikembalikan ke klien. Untuk informasi selengkapnya tentang nilai valid dan detail parameter Global Consistency Read Timeout Policy, lihat Description of the Global Consistency Read Timeout Policy parameter.

Bagaimana cara menghindari latensi baca dalam skenario beban tulis rendah?

Untuk menghindari latensi baca dalam skenario beban tulis rendah, masuk ke Konsol PolarDB dan atur parameter berkinerja-tinggi synchronous_commit menjadi on. Untuk informasi selengkapnya tentang cara memodifikasi parameter di konsol, lihat Set cluster parameters.