All Products
Search
Document Center

PolarDB:Infrastruktur AM tabel multi-insert

Last Updated:Jul 02, 2025

PolarDB for PostgreSQL menyediakan dua jenis antarmuka metode akses tabel (AM): antarmuka penyisipan satu baris dan antarmuka penyisipan massal. Untuk meningkatkan efisiensi penyisipan sejumlah besar tupel, Anda dapat mengaktifkan antarmuka penyisipan massal.

Prasyarat

Kluster PolarDB for PostgreSQL Anda harus menjalankan salah satu versi mesin database berikut:

  • PolarDB for PostgreSQL 16 dengan versi revisi 2.0.16.8.3.0 atau lebih baru.

  • PolarDB for PostgreSQL 15 dengan versi revisi 2.0.15.12.4.0 atau lebih baru.

  • PolarDB for PostgreSQL 14 dengan versi revisi 2.0.14.13.28.0 atau lebih baru.

Catatan

Anda dapat memeriksa versi revisi kluster Anda di konsol PolarDB atau dengan mengeksekusi pernyataan SHOW polardb_version;. Jika versi revisi tidak memenuhi persyaratan, perbarui.

Informasi latar belakang

Dalam PostgreSQL, sebuah AM mendefinisikan dan mengimplementasikan mekanisme penyimpanan untuk tabel atau indeks. Eksekutor hanya perlu meneruskan baris data atau baris indeks ke table AM dan index AM, tanpa perlu memperhatikan implementasi dari AM tersebut.

Mulai PostgreSQL 12, diperkenalkan AM tabel yang dapat diperluas. Saat ini, hanya heap AM bawaan yang didukung. Heap AM mendukung dua definisi antarmuka berikut:

  • Antarmuka penyisipan massal: Memproses beberapa baris data sekaligus dan hanya mendukung sintaks <u>COPY FROM</u>.

  • Antarmuka penyisipan satu baris: Memproses satu baris data pada satu waktu dan berlaku untuk semua sintaks yang melibatkan penyisipan data tabel, kecuali sintaks <u>COPY FROM</u>.

Saat menyisipkan sejumlah besar tupel, efisiensi algoritma penyisipan satu baris secara signifikan lebih rendah dibandingkan dengan penyisipan massal. Namun, penyisipan massal melibatkan penyimpanan sementara tupel secara massal dan memerlukan penanganan seluruh siklus hidup tupel tersebut.

Untuk mengatasi masalah ini, PolarDB for PostgreSQL memperluas antarmuka AM tabel opsional baru dan mengimplementasikan antarmuka ini untuk heap AM. Antarmuka baru ini memberikan optimasi berikut:

  • Menyediakan manajemen ujung ke ujung untuk penyisipan massal.

  • Menggunakan algoritma penyisipan yang lebih efisien dan log tulis-depan (WAL) untuk heap AM.

Akibatnya, sintaks lain yang mungkin menyisipkan beberapa baris data juga dapat menggunakan kemampuan penyisipan batch melalui set antarmuka AM tabel ini. Baik antarmuka penyisipan satu baris maupun antarmuka penyisipan massal dari heap AM mendukung replikasi logis untuk tabel heap.

Catatan penggunaan

Saat ini, sintaks berikut mendukung penggunaan antarmuka AM tabel penyisipan massal:

Catatan

Apakah sintaks-sintaks ini dapat menggunakan antarmuka AM penyisipan massal tergantung pada nilai parameter wal_level. Saat nilainya adalah logical, sintaks-sintaks ini dapat menggunakan antarmuka penyisipan massal secara default. Saat nilainya bukan logical, Anda dapat menggunakan infrastruktur impor massal untuk mengoptimalkan operasi impor massal.

Cara kerjanya

Algoritma lapisan buffer

Algoritma penyisipan satu baris

Untuk melakukan penyisipan satu baris, ikuti langkah-langkah berikut:

  1. Buat tupel yang akan disisipkan.

  2. Tentukan jumlah ruang yang diperlukan untuk menyimpan tupel pada halaman disk.

  3. Temukan halaman yang memiliki cukup ruang kosong untuk menampung tupel.

  4. Kunci halaman dan tempatkan tupel di halaman tersebut.

  5. Tandai halaman sebagai kotor.

  6. Hasilkan entri log WAL untuk menangkap modifikasi halaman.

  7. Lepaskan kunci pada halaman.

Algoritma penyisipan massal

Untuk melakukan penyisipan massal, ikuti langkah-langkah berikut:

  1. Simpan sementara sekelompok tupel di memori.

  2. Buat informasi tupel secara massal.

  3. Temukan halaman yang memiliki cukup ruang kosong untuk menampung tupel-tupel tersebut.

  4. Kunci halaman dan tempatkan tupel-tupel di halaman tersebut.

  5. Jika masih ada ruang yang cukup di halaman, lanjutkan menyisipkan tupel sampai halaman kehabisan ruang atau semua tupel yang disimpan sementara telah diproses.

  6. Tandai halaman sebagai kotor.

  7. Hasilkan entri log WAL untuk menangkap modifikasi halaman.

  8. Lepaskan kunci pada halaman.

Format log WAL

  • Log tipe Heap INSERT untuk penyisipan satu baris.

    -[ 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
  • Log Heap2 MULTI_INSERT untuk penyisipan baris massal. Tipe log ini dapat mencatat beberapa baris data yang disisipkan pada halaman sekaligus.

    -[ 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

Analisis perbedaan

Algoritma penyisipan massal dapat secara signifikan mengurangi frekuensi penguncian halaman, mengurangi jumlah catatan WAL yang dihasilkan, dan mengoptimalkan kepadatan konten log.

Penggunaan

Parameter polar_enable_tableam_multi_insert menentukan apakah akan mengaktifkan antarmuka AM tabel penyisipan massal, yang diaktifkan secara default:

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