All Products
Search
Document Center

PolarDB:Infrastruktur Table AM Multi-insert

Last Updated:Aug 21, 2026

PolarDB for PostgreSQL menyertakan antarmuka penyisipan baris tunggal dan bulk insert dalam definisi Table AM-nya. Saat memasukkan banyak tuple, Anda dapat mengaktifkan antarmuka bulk insert untuk meningkatkan efisiensi penyisipan data.

Applicability

Versi PolarDB for PostgreSQL yang didukung adalah sebagai berikut:

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

  • PostgreSQL 16 (minor engine version 2.0.16.8.3.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

Anda dapat melihat minor engine version di konsol atau dengan menjalankan pernyataan SHOW polardb_version;. Jika minor engine version tidak memenuhi persyaratan, upgrade minor engine version.

Background

Access Method (AM) mendefinisikan dan mengimplementasikan cara tabel dan indeks disimpan di PostgreSQL. Executor meneruskan baris data atau entri indeks ke Table AM dan Index AM. Executor tidak perlu mengetahui implementasi internal AM tersebut.

PostgreSQL 12 dan versi yang lebih baru memperkenalkan Table AM yang dapat diperluas. Saat ini hanya menyediakan dukungan bawaan untuk Heap AM. Heap AM mendukung dua antarmuka:

  • Antarmuka bulk insert: Memproses beberapa baris sekaligus. Hanya mendukung sintaks COPY FROM.

  • Antarmuka penyisipan baris tunggal: Memproses satu baris dalam satu waktu. Antarmuka ini berlaku untuk semua sintaks penyisipan data kecuali COPY FROM.

Namun, algoritma penyisipan baris tunggal jauh lebih tidak efisien dibandingkan algoritma bulk insert saat memasukkan banyak tuple. Penyisipan data secara massal melibatkan penempatan tuple dalam batch dan memerlukan kontrol lifecycle yang lengkap.

Untuk mengatasi masalah ini, PolarDB for PostgreSQL memperluas Table AM dengan antarmuka opsional baru dan mengimplementasikannya untuk Heap AM. Antarmuka Table AM yang baru menyediakan optimasi berikut:

  • Mengimplementasikan kontrol lifecycle yang lengkap untuk bulk insert.

  • Menggunakan algoritma penyisipan yang lebih efisien dan format Write-Ahead Log (WAL) dalam Heap AM.

Akibatnya, sintaks multi-row lainnya juga dapat memanfaatkan kemampuan bulk insert melalui antarmuka Table AM ini. Baik antarmuka penyisipan baris tunggal maupun bulk insert dari Heap AM mendukung logical replication untuk tabel heap.

Usage instructions

Table AM mendukung bulk insert menggunakan sintaks berikut:

Catatan

Sintaks-sintaks ini menggunakan antarmuka bulk insert ketika parameter wal_level diatur ke logical. Jika parameter diatur ke nilai lain, bulk import infrastructure digunakan untuk mengoptimalkan operasi bulk import.

How it works

Buffer layer algorithm

Single-row insert algorithm

Langkah-langkahnya adalah sebagai berikut:

  1. Isi informasi tuple.

  2. Hitung ruang kosong yang dibutuhkan untuk tuple tersebut.

  3. Temukan halaman yang dapat menampung tuple tersebut.

  4. Kunci halaman tersebut dan tempatkan tuple di dalamnya.

  5. Tandai halaman sebagai dirty.

  6. Buat catatan WAL untuk modifikasi halaman tersebut.

  7. Lepaskan kunci halaman.

Bulk insert algorithm

Langkah-langkahnya adalah sebagai berikut:

  1. Tempatkan batch tuple di memori.

  2. Isi informasi tuple untuk batch tersebut.

  3. Temukan halaman yang dapat menampung tuple-tuple tersebut.

  4. Kunci halaman tersebut dan tempatkan tuple-tuple di dalamnya.

  5. Jika halaman memiliki ruang yang cukup, teruskan penempatan tuple hingga halaman penuh atau seluruh tuple yang distage telah dimasukkan.

  6. Tandai halaman sebagai dirty.

  7. Buat catatan WAL untuk modifikasi halaman tersebut.

  8. Lepaskan kunci halaman.

WAL log format

  • Penyisipan single-row mencatat log tipe Heap INSERT:

    -[ RECORD 1 ]----+--------------------------------------------
    start_lsn        | 0/40BE24E0
    end_lsn          | 0/40BE2520
    prev_lsn         | 0/40BE24B8
    xid              | 792
    resource_manager | Heap
    record_type      | INSERT
    record_length    | 61
    main_data_length | 3
    fpi_length       | 0
    description      | off: 8, flags: 0x00
    block_ref        | blkref #0: rel 1663/5/16412 fork main blk 0
  • Penyisipan massal mencatat log tipe Heap2 MULTI_INSERT. Tipe log ini dapat mencatat beberapa baris yang dimasukkan ke dalam satu halaman dalam satu operasi:

    -[ RECORD 1 ]----+------------------------------------------------------------------
    start_lsn        | 0/40BE2548
    end_lsn          | 0/40BE2610
    prev_lsn         | 0/40BE2520
    xid              | 793
    resource_manager | Heap2
    record_type      | MULTI_INSERT
    record_length    | 194
    main_data_length | 20
    fpi_length       | 0
    description      | ntuples: 8, flags: 0x02, offsets: [9, 10, 11, 12, 13, 14, 15, 16]
    block_ref        | blkref #0: rel 1663/5/16412 fork main blk 0

Difference analysis

Algoritma bulk insert secara signifikan mengurangi frekuensi penguncian halaman. Algoritma ini juga mengurangi jumlah catatan WAL yang dihasilkan dan membuat konten log lebih ringkas.

How to use

Parameter polar_enable_tableam_multi_insert mengontrol apakah antarmuka Table AM bulk insert diaktifkan. Parameter ini diaktifkan secara default:

SHOW polar_enable_tableam_multi_insert;
 polar_enable_tableam_multi_insert
-----------------------------------
 on
(1 row)