All Products
Search
Document Center

PolarDB:Replikasi fisik dan logis: Baca log WAL dari buffer WAL

Last Updated:Jan 28, 2026

PolarDB for PostgreSQL memungkinkan proses replikasi fisik dan logis membaca log write-ahead logging (WAL) langsung dari buffer WAL, sehingga mengubah operasi baca I/O menjadi salinan memori. Pendekatan ini secara signifikan mengurangi amplifikasi I/O akibat banyaknya proses replikasi, menghemat bandwidth untuk membaca log WAL, serta menurunkan latensi baca—yang pada gilirannya mengurangi latensi replikasi secara keseluruhan.

Latar Belakang

Pada PostgreSQL native, replikasi dibagi menjadi replikasi fisik dan replikasi logis.

  • Replikasi fisik: menyinkronkan data antara node primary dan standby dengan mentransfer isi log WAL.

  • Replikasi logis: menyinkronkan data antara node publisher dan subscriber dengan mentransfer perubahan logis yang didekode dari log WAL.

Satu instans PostgreSQL yang sedang berjalan dapat memiliki beberapa tautan replikasi fisik dan logis secara bersamaan. Setiap tautan memiliki proses WAL sender terkait yang membaca log WAL dari penyimpanan, menguraikannya, lalu mengirimkannya ke sistem downstream melalui jaringan. Kemajuan replikasi setiap tautan bersifat independen.

Karena kemajuan replikasi setiap tautan bersifat independen, setiap proses replikasi harus membaca, memproses, dan mengirim seluruh kumpulan log WAL. Ketika terdapat banyak tautan replikasi, bandwidth baca untuk log WAL bisa beberapa kali lebih tinggi daripada bandwidth tulis. Hal ini mengonsumsi banyak operasi input/output per detik (IOPS). Saat sebuah instans berada di bawah tekanan I/O tinggi, volume besar operasi baca log WAL dapat mengganggu I/O baca/tulis operasi bisnis reguler, sehingga memperlambat operasi bisnis dan meningkatkan latensi replikasi.

Pada PostgreSQL asli, saat log WAL dihasilkan, log tersebut pertama-tama ditulis ke buffer WAL. Kemudian, proses latar belakang atau proses reguler menuliskannya ke penyimpanan. Ruang dalam buffer WAL digunakan kembali secara siklik. Oleh karena itu, buffer WAL menyimpan log WAL terbaru—yaitu log yang paling mungkin digunakan oleh proses replikasi.

PolarDB for PostgreSQL mendukung pembacaan log WAL langsung dari buffer WAL, bahkan jika log tersebut telah ditulis ke disk tetapi masih tersedia di buffer. Optimasi ini mengubah operasi baca I/O dari proses replikasi menjadi operasi salinan memori, sehingga secara signifikan mengurangi amplifikasi I/O baca akibat banyaknya proses replikasi, menghemat bandwidth untuk membaca log WAL, serta menurunkan latensi baca log WAL—yang pada gilirannya mengurangi latensi replikasi.

Cakupan

Fitur ini tersedia untuk versi berikut dari PolarDB for PostgreSQL:

  • PostgreSQL 18 (versi mesin minor 2.0.18.0.1.0 atau lebih baru)

  • PostgreSQL 17 (versi mesin minor 2.0.17.2.1.0 atau lebih baru)

  • PostgreSQL 16 (versi mesin minor 2.0.16.6.2.0 atau lebih baru)

  • PostgreSQL 15 (versi mesin minor 2.0.15.12.4.0 atau lebih baru)

  • PostgreSQL 14 (versi mesin minor 2.0.14.13.27.0 atau lebih baru)

Catatan

Anda dapat melihat nomor versi mesin minor di Konsol atau dengan menjalankan pernyataan SHOW polardb_version;. Jika versi mesin minor tidak memenuhi persyaratan, Anda dapat melakukan upgrade versi mesin minor.

Penggunaan

Anda dapat mengaktifkan fitur ini untuk proses replikasi dengan mengatur parameter polar_enable_read_from_wal_buffers ke nilai on. Nilai default-nya adalah on. Untuk informasi lebih lanjut tentang cara mengatur parameter kluster, lihat Set cluster parameters.

Anda dapat menggunakan ekstensi polar_monitor untuk memeriksa statistik hit saat membaca log WAL dari buffer WAL.

  1. Buat ekstensi polar_monitor.

    CREATE EXTENSION IF NOT EXISTS polar_monitor;
  2. Periksa statistik hit saat membaca log WAL dari buffer WAL.

    SELECT * FROM polar_stat_walsnd_xlog_read();

    Perintah tersebut mengembalikan hasil yang mirip dengan berikut:

       pid   | hit  | hit_bytes | prefetched | prefetched_bytes | read | read_bytes
    ---------+------+-----------+------------+------------------+------+------------
     3865685 | 2175 | 251583064 |          0 |                0 |   82 |   10628128
     3865751 | 2173 | 251582792 |          0 |                0 |   82 |   10628400
    (2 rows)

Tabel berikut menjelaskan bidang yang dikembalikan.

Kolom

Tipe Data

Deskripsi

pid

INTEGER

ID proses (PID) dari proses replikasi.

hit

BIGINT

Jumlah operasi baca I/O yang langsung mengenai buffer WAL.

hit_bytes

BIGINT

Jumlah byte yang dibaca oleh operasi I/O yang langsung mengenai buffer WAL.

prefetched

BIGINT

Jumlah operasi baca I/O yang mengenai cache memori setelah log WAL dipra-ambil dari penyimpanan secara batch.

prefetched_bytes

BIGINT

Jumlah byte yang dibaca oleh operasi I/O yang mengenai cache memori setelah log WAL dipra-ambil dari penyimpanan secara batch.

read

BIGINT

Jumlah operasi baca I/O yang membaca log WAL dari penyimpanan.

read_bytes

BIGINT

Jumlah byte log WAL yang dibaca dari penyimpanan.