All Products
Search
Document Center

PolarDB:Replikasi Fisik dan Logis: Baca Log WAL dari Buffer WAL

Last Updated:Sep 25, 2026

PolarDB for PostgreSQL mendukung replikasi fisik dan logis yang dapat membaca log WAL secara langsung dari buffer WAL alih-alih membacanya kembali dari penyimpanan. Pendekatan ini mengubah I/O baca WAL untuk proses replikasi menjadi salinan memori, sehingga mengurangi lag replikasi ketika beberapa proses replikasi membaca WAL yang sama.

Latar Belakang

Pada PostgreSQL native, replikasi terdiri atas physical replication atau logical replication.

  • Physical replication menyinkronkan node primary dan node standby dengan mentransfer isi log WAL.

  • Logical replication menyinkronkan node publisher dan node subscriber dengan mentransfer perubahan logis yang didekode dari log WAL.

    Instans PostgreSQL yang sedang berjalan dapat mendukung beberapa tautan replikasi fisik dan logis secara bersamaan. Setiap tautan dilayani oleh proses WAL sender khusus yang membaca log WAL yang telah dipersist ke penyimpanan, menguraikannya, lalu mengirimkannya ke downstream melalui jaringan. Tautan-tautan tersebut bersifat independen satu sama lain, dan progres replikasinya tidak saling memengaruhi.

Karena progresnya independen, setiap proses replikasi membaca seluruh aliran WAL, lalu memproses dan mengirimkannya secara terpisah. Ketika sebuah instans memiliki banyak tautan replikasi, bandwidth baca WAL menjadi kelipatan dari bandwidth tulis WAL dan mengonsumsi jumlah IOPS yang besar. Di bawah beban I/O tinggi, I/O baca WAL bersaing dengan I/O baca/tulis workload, sehingga meningkatkan latensi masing-masing: workload melambat dan lag replikasi meningkat.

Pada PostgreSQL native, log WAL pertama kali ditulis ke buffer WAL, lalu dituliskan ke penyimpanan oleh proses latar belakang atau proses reguler. Ruang buffer WAL digunakan kembali secara siklus, sehingga buffer WAL menyimpan semua log WAL yang baru saja dihasilkan—bagian inilah dari WAL yang paling mungkin dibutuhkan oleh proses replikasi.

PolarDB for PostgreSQL dapat mengonsumsi log WAL yang telah di-flush ke penyimpanan namun masih tersisa di buffer WAL. Dengan demikian, proses replikasi menyalin log WAL tersebut dari memori alih-alih melakukan I/O baca terhadap penyimpanan.

Versi yang Didukung

Versi PolarDB for PostgreSQL berikut didukung:

  • PostgreSQL 18: versi minor 2.0.18.0.1.0 atau lebih baru

  • PostgreSQL 17: versi minor 2.0.17.2.1.0 atau lebih baru

  • PostgreSQL 16: versi minor 2.0.16.6.2.0 atau lebih baru

  • PostgreSQL 15: versi minor 2.0.15.12.4.0 atau lebih baru

  • PostgreSQL 14: versi minor 2.0.14.13.27.0 atau lebih baru

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

Penggunaan

Parameter polar_enable_read_from_wal_buffers mengontrol fitur ini, dengan nilai default on. Jika parameter telah diatur ke off, ubah kembali ke on agar fitur ini berlaku untuk proses replikasi. Untuk petunjuk cara mengatur parameter kluster di Konsol, lihat Configure cluster parameters.

Anda dapat menggunakan ekstensi polar_monitor untuk memeriksa seberapa sering log WAL dibaca dari buffer WAL.

  • Buat ekstensi polar_monitor.

CREATE EXTENSION IF NOT EXISTS polar_monitor;
  • Kueri statistik hit buffer WAL.

SELECT * FROM polar_stat_walsnd_xlog_read();

Output berikut dikembalikan:

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-bidang yang dikembalikan.

ColumnData typeDescription
pidINTEGERPID dari proses replikasi.
hitBIGINTJumlah operasi I/O baca yang langsung mengenai buffer WAL.
hit_bytesBIGINTJumlah byte yang dibaca oleh operasi I/O yang langsung mengenai buffer WAL.
prefetchedBIGINTJumlah operasi I/O baca yang mengenai cache di memori setelah log WAL dipra-ambil dari penyimpanan dalam batch.
prefetched_bytesBIGINTJumlah byte yang dibaca oleh operasi I/O yang mengenai cache di memori setelah log WAL dipra-ambil dari penyimpanan dalam batch.
readBIGINTJumlah operasi I/O baca yang membaca log WAL dari penyimpanan.
read_bytesBIGINTJumlah byte yang dibaca oleh operasi I/O yang membaca log WAL dari penyimpanan.

Nilai hit atau prefetched yang tinggi relatif terhadap read menunjukkan bahwa proses replikasi menyalin WAL dari memori. Sebaliknya, nilai read yang tinggi berarti WAL yang dibutuhkan proses tersebut sudah tidak ada lagi di buffer WAL, sehingga harus dibaca kembali dari penyimpanan.