All Products
Search
Document Center

PolarDB:Infrastruktur impor massal

Last Updated:Sep 25, 2026

PolarDB for PostgreSQL menyediakan infrastruktur impor massal.

Lingkup

Versi PolarDB for PostgreSQL berikut ini didukung:

  • PostgreSQL 18 (minor engine version 2.0.18.0.1.0 atau lebih baru)

  • PostgreSQL 17 (minor engine version 2.0.17.2.1.0 atau lebih baru)

  • PostgreSQL 16 (minor engine version 2.0.16.6.2.0 atau lebih baru)

  • PostgreSQL 15 (minor engine version 2.0.15.12.4.0 atau lebih baru)

  • PostgreSQL 14 (minor engine version 2.0.14.13.28.0 atau lebih baru)

Catatan

Informasi latar belakang

Ketika data diimpor secara massal ke objek yang baru dibuat sebelum transaksi saat ini melakukan commit, isolasi transaksi membuat objek tersebut tidak terlihat oleh proses lain. Berdasarkan karakteristik sistem PolarDB for PostgreSQL, optimasi khusus diterapkan pada setiap lapisan jalur impor data massal.

PolarDB for PostgreSQL menyediakan infrastruktur impor massal tujuan umum untuk objek yang hanya terlihat oleh proses saat ini. Infrastruktur ini secara signifikan meningkatkan kinerja impor massal dengan melewati manajemen buffer, mengonstruksi halaman secara batch, memperluas halaman penyimpanan secara batch, mencatat log WAL secara batch, serta menjadikan jalur sinkron menjadi asinkron.

Catatan penggunaan

Pernyataan berikut saat ini menggunakan infrastruktur ini:

  • CREATE INDEX

  • REINDEX

  • VACUUM FULL

  • ALTER TABLE SET TABLESPACE

  • CREATE MATERIALIZED VIEW

  • REFRESH MATERIALIZED VIEW

  • CREATE TABLE AS/SELECT INTO

    Catatan

    CREATE TABLE AS/SELECT INTO menggunakan infrastruktur impor massal tergantung pada nilai parameter wal_level. Ketika nilainya lebih rendah dari logical, pernyataan ini secara default menggunakan infrastruktur impor massal yang dijelaskan di atas. Ketika nilainya logical, pernyataan ini secara default menggunakan antarmuka bulk insert dari infrastruktur Multi-insert Table AM.

Cara kerja

Melewati manajemen buffer

Karena data yang diimpor tidak perlu terlihat oleh proses lain sebelum transaksi melakukan commit, halaman dapat diproses langsung di memori privat proses selama konstruksi halaman, bukan dialokasikan dari Buffer Pool memori bersama. Dengan melewati manajemen buffer, persaingan resource lock dapat dihindari secara efektif dan efisiensi konstruksi halaman meningkat secara signifikan.

Memperluas halaman secara batch

Mekanisme impor massal tradisional biasanya menulis halaman satu per satu: setiap kali sebuah halaman penuh, antarmuka lapisan manajemen penyimpanan memperluas penyimpanan sebesar satu halaman. Karena penyimpanan cloud memiliki latensi tinggi, ekstensi halaman satu per satu ini menimbulkan overhead tunggu I/O yang signifikan pada jalur utama. PolarDB for PostgreSQL melakukan pre-agregasi data untuk beberapa halaman di memori privat proses. Setelah data yang terakumulasi mencapai ambang batas, antarmuka lapisan manajemen penyimpanan memperluas halaman secara batch, sehingga secara efektif mendistribusikan latensi ekstensi halaman tunggal.

Mencatat log WAL secara batch

Pada mekanisme impor massal tradisional, operasi impor tabel heap maupun indeks biasanya mencatat data baris demi baris, menghasilkan catatan log WAL terpisah untuk setiap baris. Ketika suatu proses mengonstruksi halaman di memori privat, proses tersebut menulis beberapa baris ke dalam satu halaman dan melakukan pre-agregasi beberapa halaman yang menunggu untuk dipersistenkan. Oleh karena itu, PolarDB for PostgreSQL menggunakan log WAL tipe XLOG_FPI dan mencatatnya secara batch setelah kelompok halaman tersebut dikonstruksi. Jenis log WAL ini mencatat seluruh data halaman, bukan modifikasi inkremental pada halaman. Dibandingkan dengan pencatatan baris demi baris secara tradisional, pendekatan ini lebih ringkas dan secara efektif menghemat overhead metadata log WAL.

Menjadikan jalur utama asinkron

Setelah transaksi saat ini melakukan commit, halaman yang dikonstruksi di memori privat harus menjadi terlihat oleh proses lain. Secara teori, semua halaman yang dikonstruksi harus dipersistenkan sebelum transaksi melakukan commit, tetapi hal ini secara signifikan meningkatkan latensi jalur utama. Untuk mengatasi hal ini, PolarDB for PostgreSQL segera menyalin halaman ke Buffer Pool dan menandainya sebagai Halaman kotor, sehingga commit dapat segera dikembalikan. Proses flushing Halaman kotor paralel di latar belakang kemudian menuliskan kembali halaman tersebut secara asinkron, memanfaatkan sepenuhnya kemampuan flushing Halaman kotor ber-throughput tinggi dari PolarDB untuk menjalankan konstruksi halaman dan flushing Halaman kotor latar belakang secara paralel.

Mekanisme ini juga menjamin Konsistensi data dalam skenario crash sistem. Karena log WAL tipe FPI telah dicatat sebelumnya, data yang telah di-commit dapat dipulihkan.

Penggunaan

Parameter polar_bulk_write_maxpages mengontrol jumlah maksimum halaman yang di-pre-agregasi di memori privat proses. Ketika jumlah halaman yang di-pre-agregasi mencapai nilai ini, ekstensi halaman batch dan pencatatan log WAL batch akan dipicu, serta halaman akan disalin ke Buffer Pool untuk flushing Halaman kotor. Nilai default sudah optimal dan biasanya tidak perlu disesuaikan.

SHOW polar_bulk_write_maxpages;
 polar_bulk_write_maxpages
---------------------------
 1MB
(1 row)