Bagian ini berisi informasi tentang:
- Perilaku Datastream dalam menangani data yang diambil dari database PostgreSQL sumber
- Versi database PostgreSQL yang didukung Datastream
- Ringkasan cara menyiapkan database PostgreSQL sumber sehingga data dapat di-streaming dari database tersebut ke tujuan
- Batasan umum untuk menggunakan database PostgreSQL sebagai sumber
Perilaku
Database PostgreSQL sumber mengandalkan fitur decoding logisnya. Decoding logis mengekspos semua perubahan yang di-commit ke database dan memungkinkan penggunaan serta pemrosesan perubahan ini dalam format yang mudah digunakan menggunakan plugin output. Datastream menggunakan plugin pgoutput, yang merupakan plugin decoding logis PostgreSQL standar untuk PostgreSQL 10 dan yang lebih baru.
- Semua skema atau skema tertentu dari sumber PostgreSQL tertentu, serta semua tabel dari skema atau tabel tertentu, dapat dipilih.
- Semua data historis direplikasi.
- Semua perubahan bahasa pengolahan data (DML), seperti penyisipan, pembaruan, dan penghapusan dari database dan tabel yang ditentukan, direplikasi.
- Hanya perubahan yang di-commit yang direplikasi.
- Jika Anda menentukan REPLICA IDENTITY pada tabel, Datastream akan memperlakukan kolom yang ditentukan sebagai kunci utama.
- Datastream secara berkala mengirim pesan heartbeat ke database sumber saat terhubung ke instance utama. Akibatnya, peristiwa pesan decoding logis (
op:"m") disisipkan langsung ke dalam file WAL. Pesan ini diperlukan oleh Datastream untuk memastikan ketersediaan sumber dan menghitung keaktualan. Saat menggunakan replika baca sebagai sumber, Anda harus mengonfigurasi pesan heartbeat secara eksternal. Lihat Replikasi dari replika baca untuk mengetahui informasi selengkapnya. Sebaiknya pertimbangkan hal ini jika penyiapan replikasi lainnya membaca dari database sumber yang sama.
Versi
Datastream mendukung PostgreSQL versi 10 dan yang lebih baru.
Datastream mendukung jenis database PostgreSQL berikut:
- PostgreSQL yang dihosting sendiri
- Cloud SQL untuk PostgreSQL
- AlloyDB untuk PostgreSQL
- AlloyDB Omni
- Amazon RDS untuk PostgreSQL
- Amazon Aurora PostgreSQL
Paket Gratis
Datastream memungkinkan Anda melakukan streaming dari AlloyDB untuk PostgreSQL ke BigQuery menggunakan Paket Gratis, yang menyediakan data pengambilan data perubahan hingga 100 GiB secara gratis setiap bulan. Untuk mengetahui informasi selengkapnya, lihat Harga Datastream.
Praktik terbaik
Bagian ini menjelaskan praktik terbaik yang direkomendasikan untuk mengonfigurasi sumber PostgreSQL Anda agar dapat digunakan dengan Datastream.
Menggunakan beberapa stream untuk mencegah pemblokiran head-of-line
Untuk sumber PostgreSQL, Datastream menggunakan satu slot replikasi logis untuk seluruh stream. Transaksi besar atau beberapa pembaruan pada satu tabel bervolume tinggi dapat menunda replikasi data untuk semua tabel lain dalam stream yang sama.
Untuk mencegah pemblokiran head-of-line, buat stream terpisah untuk kumpulan tabel yang berbeda. Misalnya, Anda dapat membuat satu stream untuk tabel bervolume tinggi, dan stream lainnya untuk tabel bervolume rendah. Hal ini mengisolasi tabel dengan churn tinggi dan mencegahnya menunda replikasi untuk tabel lain.
Rekomendasi: identifikasi tabel dengan tingkat penulisan (INSERT/UPDATE/DELETE) yang sangat tinggi dan tempatkan tabel tersebut di stream Datastream khusus dengan slot replikasi terpisah.
Menghindari transaksi yang berjalan lama
Transaksi yang berjalan lama dapat menyebabkan penumpukan log WAL. Karena WAL bersifat berurutan, PostgreSQL tidak dapat menghapus file WAL lama yang diperlukan oleh slot replikasi hingga transaksi yang berjalan lama selesai. Hal ini akan meningkatkan penggunaan disk WAL.
Selain itu, hal ini dapat memperlambat decoding logis. Perlambatan ini disebabkan oleh transaksi besar yang meluapkan perubahan ke disk, yang kemudian memerlukan perakitan ulang yang lambat dan intensif I/O saat commit, sehingga memblokir replikasi semua transaksi berikutnya.
Rekomendasi: di database sumber, konfigurasikan parameter statement_timeout dan idle_in_transaction_session_timeout untuk menghindari transaksi yang berjalan lama. Untuk mengetahui informasi selengkapnya, lihat
dokumentasi PostgreSQL.
Menggunakan pemfilteran tabel saat membuat publikasi
Jika Anda mereplikasi perubahan hanya dari beberapa tabel, pastikan Anda membuat PUBLICATION yang hanya menyertakan tabel tersebut. Saat publikasi dicakup ke tabel tertentu, PostgreSQL akan mempertahankan perubahan secara efisien hanya untuk tabel tersebut di slot replikasi. Hal ini membantu mengurangi ukuran slot replikasi dan meningkatkan performa decoding logis.
Mengelola slot replikasi secara proaktif
Datastream menggunakan slot replikasi logis pada instance utama PostgreSQL Anda, yang memastikan file WAL dipertahankan hingga Datastream mengonfirmasi bahwa file tersebut telah diproses. Jika stream gagal, dijeda, atau dihapus tanpa menghapus slot replikasi, PostgreSQL akan terus mempertahankan file WAL tanpa batas waktu. Hal ini dapat mengisi disk server database Anda dan menyebabkan gangguan produksi.
Rekomendasi: Siapkan pemberitahuan yang efisien dan pantau penggunaan disk WAL di server PostgreSQL sumber Anda.
Mengonfigurasi identitas replika dengan benar
Setelan REPLICA IDENTITY memberi tahu PostgreSQL data apa yang akan ditulis ke WAL untuk peristiwa UPDATE dan DELETE, sehingga Datastream dapat mengidentifikasi baris mana yang diubah.
Jika Anda menggunakan BigQuery sebagai tujuan, hindari menyetel REPLICA IDENTITY ke FULL. Datastream menggunakan kolom yang di-log sebagai kunci logis untuk operasi MERGE BigQuery.
Jika REPLICA IDENTITY ditetapkan ke FULL dan tabel memiliki lebih dari 16 kolom, hal ini akan melebihi batas 16 kolom BigQuery untuk kunci utama dalam operasi MERGE dan merusak stream.
Rekomendasi (sesuai urutan preferensi):
- Terbaik: gunakan kunci utama. Setelan default
REPLICA IDENTITY DEFAULTsecara otomatis dan efisien menggunakan kunci utama yang ada. - Baik: jika tidak ada kunci utama, buat
UNIQUE NOT NULLindeks dan tetapkanREPLICA IDENTITY USING INDEX INDEX_NAME. - Paling tidak direkomendasikan: hanya gunakan setelan
REPLICA IDENTITY FULLpada tabel tanpa ID unik. Perhatikan dampak performa dan batas 16 kolom serta batasan pada jenis data yang didukung untuk kunci utama jika mereplikasi ke BigQuery.
Replikasi dari replika baca
Datastream mendukung replikasi dari instance replika baca PostgreSQL untuk PostgreSQL versi 16 dan yang lebih baru.
Untuk mereplikasi dari replika baca, Anda harus melakukan langkah-langkah penyiapan berikut pada instance utama:
- Membuat publikasi di instance utama: Meskipun Datastream terhubung ke replika baca, publikasi yang menentukan data yang akan direplikasi harus dibuat di instance utama.
- Mengonfigurasi heartbeat WAL: Datastream mengandalkan pesan heartbeat WAL berkala untuk mekanisme checkpointing-nya. Saat terhubung ke instance utama, Datastream menangani pembuatan heartbeat ini. Namun, untuk replika baca, heartbeat ini harus dibuat secara eksternal.
Salah satu cara untuk menyiapkan heartbeat berkala adalah dengan membuat tugas cron di PostgreSQL menggunakan ekstensi pg_cron:
SELECT cron.schedule_in_database(
'datastream-heartbeat', -- Job name
'* * * * *', -- Every minute
$$SELECT pg_logical_emit_message(true, 'datastream', 'cdc heartbeat')$$,
'DATABASE_NAME', -- Change this to your database name
'USERNAME', -- Username to run as
true -- Enabled
);
Ganti kode berikut:
- DATABASE_NAME: Nama database yang heartbeat-nya ingin Anda buat.
- USERNAME: Nama pengguna yang akan menjalankan tugas. Biasanya
postgres.
Batasan umum
Batasan umum untuk menggunakan Datastream dengan database PostgreSQL sebagai sumber mencakup:
- Stream dibatasi hingga 10.000 tabel.
- Tabel yang memiliki lebih dari 500 juta baris tidak dapat diisi ulang kecuali jika kondisi berikut terpenuhi:
- Tabel memiliki indeks B-tree unik.
- Indeks tidak menyertakan kolom dari jenis berikut:
DOUBLE,FLOAT,MONEY,REAL,JSON,JSONB,BYTEA,TXID,XML, jenis data gabungan atau jenis data geometris. - Tidak ada kolom indeks yang dapat ditetapkan sebagai null.
- Semua kolom indeks dalam urutan menaik, atau semua kolom indeks dalam urutan menurun.
- Semua kolom indeks disertakan dalam stream.
- Tabel tanpa kunci utama harus memiliki REPLICA IDENTITY. Jika tidak, hanya peristiwa
INSERTyang direplikasi ke tujuan. - Tabel dengan kunci utama tidak dapat memiliki REPLICA IDENTITY yang ditetapkan ke
FULLatauNOTHING. Tabel tersebut harus ditetapkan keDEFAULT. - Tidak semua perubahan pada skema sumber dapat dideteksi secara otomatis, sehingga dapat menyebabkan kerusakan data. Perubahan skema berikut dapat menyebabkan kerusakan data atau kegagalan memproses peristiwa di downstream:
- Menghapus kolom.
- Menambahkan kolom ke bagian tengah tabel.
- Mengubah jenis data kolom.
- Mengurutkan ulang kolom.
- Menghapus tabel (relevan jika tabel yang sama kemudian dibuat ulang dengan data baru yang ditambahkan).
- Datastream tidak mendukung kolom jenis data
geometric. - Datastream tidak mendukung kolom jenis data
range. - Datastream tidak mendukung array jenis data yang tidak didukung, array jenis data yang ditentukan pengguna (termasuk
ENUM), atau array jenis dataDATE,TIMESTAMP, atauTIMESTAMP WITH TIME ZONE. Kolom tersebut diabaikan. - Untuk stream yang dibuat sebelum 17 Februari 2026: Datastream tidak mendukung replikasi peristiwa UPDATE untuk baris yang menyertakan nilai TOAST di kolom yang merupakan bagian dari identitas replika tabel. Peristiwa tersebut akan dihapus. Stream yang dibuat setelah tanggal tersebut tidak tunduk pada pengecualian ini.
- Datastream tidak mendukung replikasi baris yang menyertakan nilai
JSONatauJSONBdengan lebih dari 2.950 objek bertingkat. Peristiwa yang berisi nilaiJSONatauJSONBtersebut tidak direplikasi ke database tujuan. - Datastream tidak mendukung replikasi baris yang menyertakan nilai
NaNdi kolomNUMERIC (precision, scale). Nilai dalam kolom tersebut diganti dengan nilaiNULL. - Datastream tidak mendukung replikasi kolom jenis data hstore. Nilai dalam kolom tersebut diganti dengan nilai
NULL. - Datastream tidak mendukung replikasi data non-ASCII dari database sumber yang dienkode SQL_ASCII. Data tersebut akan dihapus.
- Datastream tidak mendukung replikasi tabel dengan kebijakan Keamanan Tingkat Baris (RLS) yang ditentukan. Untuk mengetahui informasi tentang cara mengatasi batasan ini, lihat Perilaku dan batasan sumber PostgreSQL.
- Saat melakukan streaming kolom dengan jenis data panjang variabel yang menggunakan Teknik Penyimpanan Atribut Berukuran Besar (TOAST), Datastream harus membuat kueri database sumber untuk mengambil nilai yang hilang pada titik waktu tertentu (dalam proses pencarian aktif yang disebut suplementasi) jika nilai TOAST yang tidak berubah dihapus dari log WAL selama operasi
UPDATE. Karena Datastream melakukan streaming kolom ini dengan membuat kueri database, perubahan sementara mungkin tidak akan diambil dalam skenario yang melibatkan pembaruan cepat dan berurutan atau penghapusan cepat setelah penyisipan. Perhatikan bahwa operasiDELETEtidak memicu suplementasi. Batasan ini sangat relevan saat menggunakan mode tulis hanya tambah, yang mengharapkan semua perubahan sementara diambil. - Datastream tidak mengambil perubahan yang dilakukan pada kolom yang dihasilkan.
- Datastream mungkin berhenti berfungsi atau tidak mengambil peristiwa baru saat upgrade versi utama PostgreSQL dilakukan pada database. Sebaiknya hapus slot replikasi sebelum upgrade, lalu upgrade database, dan buat ulang slot replikasi. Jika stream gagal, pulihkan stream dengan menentukan nama slot replikasi baru, dan lakukan pengisian ulang jika konsistensi data diperlukan.
- Datastream tidak mendukung replikasi tabel sistem PostgreSQL saat menggunakan alur penyiapan stream otomatis. Jika Anda mengedit stream yang dibuat menggunakan alur otomatis dan menambahkan tabel sistem, Datastream akan mengabaikan tabel ini secara diam-diam, dan tidak mereplikasi data atau perubahan apa pun dari tabel tersebut.
Langkah berikutnya
- Pelajari cara mengonfigurasi sumber PostgreSQL untuk digunakan dengan Datastream.