All Products
Search
Document Center

PolarDB:Flashback Table

Last Updated:Aug 26, 2026

Topik ini menjelaskan fitur Flashback Table dari PolarDB for PostgreSQL.

Lingkup penerapan

Fitur Flashback Table didukung pada edisi berikut dari PolarDB for PostgreSQL: PostgreSQL 11 dengan versi mesin minor 2.0.11.9.22.0 atau yang lebih baru.

Catatan

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

Ikhtisar

Flashback Table

Fitur Flashback Table secara berkala menyimpan snapshot halaman data dalam flashback log dan informasi transaksi di fast recovery area. Hal ini memungkinkan Anda memulihkan data tabel ke titik waktu tertentu ke tabel baru.

Sintaks

FLASHBACK TABLE
    [ schema. ]table
    TO TIMESTAMP expr;

Parameter:

Parameter

Deskripsi

[ schema. ]table

Nama tabel yang akan dikembalikan dengan flashback.

expr

Titik waktu tujuan untuk mem-flashback data tabel.

Contoh

  1. Persiapkan data uji.

    1. Buat tabel bernama test dan masukkan data.

      CREATE TABLE test(id int);
      INSERT INTO test select * FROM generate_series(1, 10000);
    2. Kueri jumlah total baris dalam tabel test.

      SELECT count(1) FROM test;

      Hasil berikut dikembalikan:

       count
      -------
       10000
      (1 row)
    3. Hitung jumlah nilai id.

      SELECT sum(id) FROM test;

      Hasil berikut dikembalikan:

         sum
      ----------
       50005000
      (1 row)
  2. Tunggu 10 detik lalu hapus data dari tabel test.

    SELECT pg_sleep(10);
    DELETE FROM test;

    Kueri tabel test setelah penghapusan.

    SELECT * FROM test;

    Hasil berikut dikembalikan:

     id
    ----
    (0 rows)
  3. Flashback tabel test ke 10 detik yang lalu.

    FLASHBACK TABLE test TO TIMESTAMP now() - interval'10s';

    Hasil berikut dikembalikan:

    NOTICE:  Flashback the relation test to new relation polar_flashback_65566, please check the data
    FLASHBACK TABLE
  4. Kueri data dalam tabel hasil flashback.

    Kueri jumlah total baris dalam tabel hasil flashback.

    SELECT count(1) FROM polar_flashback_65566;

    Hasil berikut dikembalikan:

     count
    -------
     10000
    (1 row)

    Hitung jumlah nilai id dalam tabel hasil flashback.

    SELECT sum(id) FROM polar_flashback_65566;

    Hasil berikut dikembalikan:

       sum
    ----------
     50005000
    (1 row)

Panduan penggunaan

Fitur Flashback Table bergantung pada flashback log dan fast recovery area. Anda harus mengatur parameter polar_enable_flashback_log dan polar_enable_fast_recovery_area, lalu restart kluster. Parameter terkait lainnya juga harus disesuaikan sesuai kebutuhan. Kami menyarankan agar Anda mengubah semua parameter terkait sekaligus dan melakukan restart kluster selama jam sepi. Mengaktifkan Flashback Table meningkatkan penggunaan memori dan disk space serta menimbulkan overhead performa tertentu. Evaluasi dampaknya secara cermat sebelum mengaktifkan fitur ini.

Penggunaan memori

Mengaktifkan flashback log memerlukan memori bersama tambahan sebesar jumlah dari tiga komponen berikut:

  • polar_flashback_log_buffers × 8 KB

  • polar_flashback_logindex_mem_size MB

  • polar_flashback_logindex_queue_buffers MB

Mengaktifkan fast recovery area memerlukan tambahan memori bersama sekitar 32 KB. Evaluasi status kluster saat ini sebelum menyesuaikan parameter-parameter ini.

Penggunaan disk

Untuk melakukan flashback ke titik waktu tertentu, flashback log, WAL log, dan file LogIndex dalam periode tersebut harus dipertahankan. Hal ini meningkatkan penggunaan disk space. Secara umum, semakin besar nilai polar_fast_recovery_area_rotation, semakin banyak disk space yang digunakan. Misalnya, jika polar_fast_recovery_area_rotation diatur ke 300, data historis 5 jam terakhir akan dipertahankan.

Setelah flashback log diaktifkan, flashback points dibuat secara berkala. Flashback point merupakan jenis khusus dari checkpoint. Saat checkpoint dipicu, parameter polar_flashback_point_segments dan polar_flashback_point_timeout dievaluasi untuk menentukan apakah checkpoint saat ini merupakan flashback point. Kami menyarankan agar Anda mengonfigurasi parameter-parameter ini sebagai berikut:

  • Atur polar_flashback_point_segments menjadi kelipatan dari max_wal_size.

  • Atur polar_flashback_point_timeout menjadi kelipatan dari checkpoint_timeout.

Sebagai contoh, jika 20 GB WAL log dihasilkan dalam 5 jam dan rasio flashback log terhadap WAL log sekitar 1:20, maka sekitar 1 GB flashback log dihasilkan. Rasio flashback log terhadap WAL log bergantung pada dua faktor berikut:

  • Pola workload: semakin intensif operasi write pada workload, semakin banyak flashback log yang dihasilkan.

  • Semakin besar nilai polar_flashback_point_segments dan polar_flashback_point_timeout, semakin sedikit flashback log yang dihasilkan.

Dampak performa

Fitur flashback log memperkenalkan dua proses latar belakang yang mengonsumsi flashback log, sehingga meningkatkan overhead CPU. Anda dapat menyesuaikan parameter polar_flashback_log_bgwrite_delay dan polar_flashback_log_insert_list_delay untuk memperpanjang interval antar proses latar belakang tersebut dan mengurangi konsumsi CPU. Namun, hal ini dapat menyebabkan degradasi performa tertentu. Kami menyarankan agar Anda menggunakan nilai default.

Fitur flashback log harus melakukan flush flashback log yang sesuai sebelum halaman kotor (dirty pages) di-flush ke disk guna mencegah kehilangan flashback log. Hal ini dapat menyebabkan degradasi performa tertentu. Pada sebagian besar skenario, degradasi performa tidak melebihi 5%.

Selama flashback tabel, halaman yang terlibat dalam tabel target dimasukkan dan dikeluarkan dari pool memori bersama. Hal ini dapat menyebabkan fluktuasi performa pada operasi database lainnya.

Batasan penggunaan

Fitur Flashback Table memulihkan data tabel target ke tabel baru bernama polar_flashback_<target table OID>. Setelah Anda menjalankan pernyataan FLASHBACK TABLE, pesan NOTICE berikut ditampilkan:

  • flashback table test to timestamp now() - interval '1h';
    NOTICE:  Flashback the relation test to new relation polar_flashback_54986, please check the data
    FLASHBACK TABLE

    Pada contoh ini, polar_flashback_54986 adalah tabel temporary yang dihasilkan oleh operasi flashback. Hanya data tabel pada titik waktu target yang dipulihkan.

  • Flashback Table hanya mendukung tabel biasa. Objek database berikut tidak dapat di-flashback:

    • Indexes

    • TOAST tables

    • Materialized views

    • Partitioned tables

    • Table partitions

    • System tables

    • Foreign tables

    • Tabel dengan TOAST child tables

  • Tabel tidak dapat di-flashback jika salah satu operasi DDL berikut telah dilakukan pada tabel tersebut antara titik waktu target dan waktu saat ini:

    • DROP TABLE

    • ALTER TABLE SET WITH OIDS

    • ALTER TABLE SET WITHOUT OIDS

    • TRUNCATE TABLE

    • Modifikasi tipe kolom di mana tipe asli dan tipe baru tidak dapat dikonversi secara implisit dan tidak tersedia cast eksplisit yang aman melalui klausa USING.

    • Mengubah tabel menjadi UNLOGGED atau LOGGED.

    • Menambahkan kolom IDENTITY.

    • Menambahkan kolom yang tipenya memiliki constraint.

    • Menambahkan kolom yang ekspresi nilai default-nya mengandung fungsi volatile.

      Catatan

      Jika perintah DROP TABLE telah dijalankan, Anda dapat menggunakan fitur Flashback Drop dari PolarDB for PostgreSQL untuk memulihkan tabel tersebut.

Saran penggunaan

Jika data dimodifikasi secara tidak sengaja, kami menyarankan agar Anda menggunakan log audit untuk menentukan waktu terjadinya operasi tidak sengaja tersebut, lalu flashback tabel target ke titik waktu sebelum operasi tersebut. Selama flashback tabel, lock eksklusif diterapkan pada tabel target, sehingga hanya operasi kueri yang dapat dilakukan pada tabel target. Selain itu, selama flashback tabel, halaman yang terlibat dalam tabel target dimasukkan dan dikeluarkan dari pool memori bersama, yang dapat menyebabkan fluktuasi performa pada operasi database lainnya. Oleh karena itu, kami menyarankan agar Anda melakukan operasi flashback selama jam sepi.

Kecepatan flashback bergantung pada ukuran tabel. Untuk tabel besar, Anda dapat meningkatkan nilai polar_workers_per_flashback_table untuk menambah jumlah Parallel Worker flashback dan mengurangi waktu flashback.

Setelah flashback tabel selesai, Anda dapat mengkueri data dalam tabel hasil flashback berdasarkan pesan NOTICE dan membandingkannya dengan data dalam tabel asli. Tabel hasil flashback tidak memiliki indeks apa pun. Anda dapat membuat indeks sesuai kebutuhan. Setelah perbandingan data selesai, Anda dapat memulihkan data yang hilang ke tabel asli.

Parameter

Parameter

Deskripsi

polar_enable_flashback_log

Menentukan apakah fitur flashback log diaktifkan. Nilai yang valid:

  • on: diaktifkan.

  • off: dinonaktifkan (default).

Catatan

Parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_enable_fast_recovery_area

Menentukan apakah fitur fast recovery area diaktifkan. Nilai yang valid:

  • on: diaktifkan.

  • off: dinonaktifkan (default).

Catatan

Parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_keep_segments

Jumlah file flashback log yang dipertahankan. Nilai yang valid: 3 hingga 2147483647. Nilai default: 8.

Catatan
  • File flashback log dapat digunakan ulang. Setiap file flashback log berukuran 256 MB.

  • Parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_fast_recovery_area_rotation

Periode retensi informasi transaksi di fast recovery area. Satuan: menit.

Nilai yang valid: 1 hingga 14400. Nilai default: 180.

Catatan

Parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_point_segments

Jumlah minimum file WAL log antara dua flashback point. Setiap file WAL log berukuran 1 GB.

Nilai yang valid: 1 hingga 2147483647. Nilai default: 16.

Catatan

Parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_point_timeout

Interval waktu minimum antara dua flashback point. Satuan: detik.

Nilai yang valid: 1 hingga 86400. Nilai default: 300.

Catatan

Parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_buffers

Ukuran memori bersama untuk flashback log. Satuan: KB.

Nilai yang valid: 4 hingga 262144. Nilai default: 2048.

Catatan

Parameter ini berlaku setelah Anda mengubah file konfigurasi dan melakukan restart kluster.

polar_flashback_logindex_mem_size

Ukuran memori bersama untuk indeks flashback log. Satuan: MB.

Nilai yang valid: 3 hingga 1073741823. Nilai default: 64.

Catatan

Parameter ini berlaku setelah Anda mengubah file konfigurasi dan melakukan restart kluster.

polar_flashback_logindex_bloom_blocks

Jumlah halaman bloom filter untuk indeks flashback log.

Nilai yang valid: 8 hingga 1073741823. Nilai default: 512.

Catatan

Parameter ini berlaku setelah Anda mengubah file konfigurasi dan melakukan restart kluster.

polar_flashback_log_insert_locks

Jumlah lock insert flashback log.

Nilai yang valid: 1 hingga 2147483647. Nilai default: 8.

Catatan

Parameter ini berlaku setelah Anda mengubah file konfigurasi dan melakukan restart kluster.

polar_workers_per_flashback_table

Jumlah worker paralel untuk flashback tabel.

Nilai yang valid: 0 hingga 1024. Nilai default: 5.

Catatan
  • Nilai 0 menunjukkan bahwa eksekusi paralel dinonaktifkan.

  • Parameter ini berlaku segera.

polar_flashback_log_bgwrite_delay

Interval kerja proses bgwriter flashback log. Satuan: milidetik.

Nilai yang valid: 1 hingga 10000. Nilai default: 100.

Catatan

Parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_flush_max_size

Ukuran maksimum flashback log yang di-flush ke disk oleh proses bgwriter dalam satu waktu. Satuan: KB.

Nilai yang valid: 0 hingga 2097152. Nilai default: 5120.

Catatan
  • Nilai 0 menunjukkan bahwa ukuran flashback log tidak dibatasi.

  • Parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_insert_list_delay

Interval kerja proses binserter flashback log. Satuan: milidetik.

Nilai yang valid: 1 hingga 10000. Nilai default: 10.

Catatan

Parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_size_limit

Ukuran maksimum ruang flashback log. Nilai yang valid: 0 hingga 2147483647. Nilai default: 20480. Ketika ruang flashback log melebihi nilai ini, pembersihan flashback log dipicu. Nilai 0 menunjukkan bahwa ukuran flashback log tidak dibatasi.