All Products
Search
Document Center

PolarDB:Tabel Flashback

Last Updated:Jul 02, 2025

Topik ini menjelaskan fitur tabel flashback dari PolarDB for PostgreSQL.

Prasyarat

Fitur ini didukung di kluster PolarDB for PostgreSQL yang menjalankan versi berikut:

PostgreSQL 11 (versi revisi 1.1.22 atau lebih baru)

Catatan

Anda dapat mengeksekusi pernyataan berikut untuk memeriksa versi revisi dari PolarDB for PostgreSQL:

SHOW polar_version;

Ikhtisar

Tabel Flashback

Fitur tabel flashback secara berkala menyimpan snapshot halaman ke log flashback dan mempertahankan informasi transaksi di area pemulihan cepat. Fitur ini memungkinkan Anda mengembalikan data tabel pada titik waktu tertentu ke tabel baru.

Sintaksis

FLASHBACK TABLE
    [ schema. ]table
    TO TIMESTAMP expr;

Parameter

Parameter

Parameter

[ schema. ]table

Nama tabel yang akan dikembalikan.

expr

Waktu saat tabel dikembalikan.

Contoh

  1. Siapkan data untuk pengujian.

    1. Buat tabel test dan masukkan data.

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

      SELECT count(1) FROM test;

      Hasil contoh:

       count
      -------
       10000
      (1 row)
    3. Jumlahkan nilai id.

      SELECT sum(id) FROM test;

      Hasil contoh:

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

    SELECT pg_sleep(10);
    DELETE FROM test;

    Kueri tabel test yang telah dihapus.

    SELECT * FROM test;

    Hasil contoh:

     id
    ----
    (0 rows)
  3. Kembalikan data di tabel test ke data 10 detik yang lalu.

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

    Hasil contoh:

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

    Kueri jumlah total baris di tabel setelah flashback.

    SELECT count(1) FROM polar_flashback_65566;

    Hasil contoh:

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

    Jumlahkan nilai id setelah flashback.

    SELECT sum(id) FROM polar_flashback_65566;

    Hasil contoh:

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

Penggunaan

Sebelum mengaktifkan fitur tabel flashback, aktifkan fitur pencatatan flashback dengan mengatur parameter polar_enable_flashback_log ke ON, aktifkan fitur area pemulihan cepat dengan mengatur parameter polar_enable_fast_recovery_area ke ON, lalu restart kluster. Modifikasi parameter lain sesuai kebutuhan bisnis Anda. Kami merekomendasikan modifikasi parameter satu per satu dan merestart kluster selama jam sepi. Mengaktifkan fitur tabel flashback meningkatkan penggunaan memori dan disk, yang dapat menurunkan kinerja. Evaluasi dampak fitur ini pada bisnis Anda sebelum digunakan.

Penggunaan Memori

Setelah fitur pencatatan flashback diaktifkan, peningkatan memori bersama meliputi:

  • polar_flashback_log_buffers* 8 KB

  • polar_flashback_logindex_mem_size MB

  • polar_flashback_logindex_queue_buffers MB

Setelah area pemulihan cepat diaktifkan, ukuran memori bersama bertambah sekitar 32 KB. Periksa status kluster saat ini sebelum memodifikasi parameter.

Penggunaan Disk

Untuk mengembalikan data tabel ke titik waktu tertentu, diperlukan penyimpanan log flashback, log WAL, serta file LogIndex terkait, yang membutuhkan ruang disk tambahan. Secara teoritis, semakin besar nilai polar_fast_recovery_area_rotation, semakin banyak ruang disk yang digunakan. Misalnya, jika Anda mengatur polar_fast_recovery_area_rotation ke 300, data historis selama 5 jam disimpan.

Setelah fitur pencatatan flashback diaktifkan, titik flashback dibuat secara berkala. Titik flashback adalah jenis checkpoint. Saat checkpoint dipicu, parameter polar_flashback_point_segments dan polar_flashback_point_timeout diperiksa untuk menentukan apakah checkpoint saat ini adalah titik flashback. Kami merekomendasikan pengaturan parameter berikut:

  • Atur nilai polar_flashback_point_segments menjadi kelipatan dari nilai max_wal_size.

  • Atur nilai polar_flashback_point_timeout menjadi kelipatan dari nilai checkpoint_timeout.

Misalnya, jika 20 GB log WAL dihasilkan dalam lima jam dan rasio log flashback terhadap log WAL sekitar 1:20, sekitar 1 GB log flashback dihasilkan. Rasio log flashback terhadap log WAL bergantung pada faktor-faktor berikut:

  • Dalam model bisnis, jumlah operasi tulis proporsional dengan jumlah log flashback.

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

Penurunan Kinerja

Fitur pencatatan flashback memerlukan dua proses latar belakang tambahan untuk memproses log flashback. Ini meningkatkan overhead CPU. Untuk mengurangi overhead CPU, sesuaikan parameter polar_flashback_log_bgwrite_delay dan polar_flashback_log_insert_list_delay untuk mengatur latensi antara putaran aktivitas untuk kedua proses tersebut. Namun, ini dapat menurunkan kinerja. Gunakan nilai default dari kedua parameter tersebut.

Setelah fitur pencatatan flashback diaktifkan, penyiraman log flashback dilakukan sebelum penyiraman halaman untuk mencegah hilangnya log flashback. Ini dapat menyebabkan penurunan kinerja hingga kurang dari 5% di sebagian besar skenario.

Saat sebuah tabel dikembalikan, halaman terkait tabel dipertukarkan masuk dan keluar dari kumpulan memori bersama. Ini dapat menyebabkan jitter dalam kinerja akses database lainnya.

Batasan

Fitur tabel flashback mengembalikan data tabel yang ada ke tabel baru bernama polar_flashback_OID Tabel yang Ada. Berikut adalah NOTICE yang ditampilkan setelah pernyataan FLASHBACK TABLE dieksekusi:

  • 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

    Tabel polar_flashback_54986 adalah tabel sementara yang dibuat oleh flashback. Hanya data tabel yang dikembalikan ke titik waktu tertentu.

  • Fitur tabel flashback hanya dapat mengembalikan tabel biasa, tetapi tidak objek database berikut:

    • Indeks

    • Tabel toast

    • Tampilan material

    • Tabel partisi

    • Tabel partisi anak

    • Tabel sistem

    • Tabel asing

    • Tabel yang berisi tabel toast anak

  • Anda tidak dapat mengembalikan tabel tempat Anda telah mengeksekusi pernyataan DDL berikut dari waktu tertentu hingga waktu saat ini:

    • DROP TABLE

    • ALTER TABLE SET WITH OIDS

    • ALTER TABLE SET WITHOUT OIDS

    • TRUNCATE TABLE

    • Ubah tipe data kolom. Tipe sebelum dan sesudah modifikasi tidak dapat dikonversi secara implisit, dan klausa USING tidak berisi nilai lain untuk konversi paksa yang aman.

    • Ubah tabel menjadi UNLOGGED atau LOGGED.

    • Tambahkan kolom sebagai IDENTITY.

    • Tambahkan kolom di mana hanya tipe data terbatas yang dapat dipilih.

    • Tambahkan kolom di mana ekspresi nilai default berisi fungsi volatile.

      Catatan

      Anda dapat menggunakan fitur drop flashback dari PolarDB for PostgreSQL untuk mengembalikan operasi DROP TABLE.

Saran

Jika Anda secara tidak sengaja menghapus data tabel, segera temukan waktu operasi dari log audit dan gunakan log flashback untuk mengembalikan data tabel ke titik waktu sebelum operasi. Selama flashback tabel, kunci eksklusif dipegang pada tabel. Oleh karena itu, Anda hanya dapat menanyakan data di tabel. Saat sebuah tabel dikembalikan, halaman terkait tabel dipertukarkan masuk dan keluar dari kumpulan memori bersama. Ini dapat menyebabkan jitter dalam kinerja akses database lainnya. Lakukan operasi flashback selama jam sepi.

Kecepatan flashback terkait dengan ukuran tabel. Jika ukuran tabel besar, tingkatkan nilai parameter polar_workers_per_flashback_table untuk meningkatkan jumlah pekerja untuk flashback paralel. Ini meningkatkan kecepatan operasi flashback.

Setelah operasi flashback tabel selesai, Anda dapat menanyakan data tabel dan membandingkan data dengan tabel asli berdasarkan informasi NOTICE. Tidak ada indeks yang dibuat dalam operasi flashback. Buat indeks berdasarkan kebutuhan kueri Anda. Setelah perbandingan data di kedua tabel selesai, data yang hilang dapat dikirim kembali ke tabel asli.

Parameter

Parameter

Deskripsi

polar_enable_flashback_log

Menentukan apakah akan mengaktifkan pencatatan flashback. Nilai default: off. Nilai valid:

  • on

  • off

Catatan

Modifikasi pada parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_enable_fast_recovery_area

Menentukan apakah akan mengaktifkan area pemulihan cepat. Nilai default: off. Nilai valid:

  • on

  • off

Catatan

Modifikasi pada parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_keep_segments

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

Catatan
  • File log flashback dapat digunakan kembali. Ukuran setiap log flashback adalah 256 MB.

  • Modifikasi pada parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_fast_recovery_area_rotation

Periode ketika informasi transaksi dapat disimpan di area pemulihan cepat. Unit: menit.

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

Catatan

Modifikasi pada parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_point_segments

Jumlah minimum log WAL antara dua titik flashback. Ukuran setiap log WAL adalah 1 GB.

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

Catatan

Modifikasi pada parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_point_timeout

Interval waktu minimum antara dua flashback. Unit: detik.

Nilai valid: 1 hingga 86400. Nilai default: 300

Catatan

Modifikasi pada parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_buffers

Ukuran memori bersama untuk log flashback. Unit: KB.

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

Catatan

Modifikasi pada parameter ini berlaku setelah file konfigurasi dimodifikasi dan kluster direstart.

polar_flashback_logindex_mem_size

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

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

Catatan

Modifikasi pada parameter ini berlaku setelah file konfigurasi dimodifikasi dan kluster direstart.

polar_flashback_logindex_bloom_blocks

Jumlah halaman filter Bloom untuk indeks log flashback.

Nilai valid: 8 hingga 1073741823. Nilai default: 512

Catatan

Modifikasi pada parameter ini berlaku setelah file konfigurasi dimodifikasi dan kluster direstart.

polar_flashback_log_insert_locks

Jumlah kunci penyisipan log flashback.

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

Catatan

Modifikasi pada parameter ini berlaku setelah file konfigurasi dimodifikasi dan kluster direstart.

polar_workers_per_flashback_table

Jumlah tabel yang terlibat dalam flashback tabel paralel.

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

Catatan
  • Jika parameter ini diatur ke 0, flashback tabel paralel dinonaktifkan.

  • Modifikasi pada parameter ini berlaku segera.

polar_flashback_log_bgwrite_delay

Latensi antara putaran aktivitas untuk proses bgwriter. Unit: milidetik.

Nilai valid: 1 hingga 10000. Nilai default: 100

Catatan

Modifikasi pada parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_flush_max_size

Ukuran log yang diizinkan setiap kali proses bgwriter menyiram log ke disk. Unit: KB.

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

Catatan
  • Jika parameter ini diatur ke 0, ukuran log flashback tidak dibatasi.

  • Modifikasi pada parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_insert_list_delay

Latensi antara putaran aktivitas untuk proses bginserter. Unit: milidetik.

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

Catatan

Modifikasi pada parameter ini berlaku setelah sinyal SIGHUP dikirim.

polar_flashback_log_size_limit

Ukuran maksimum log flashback. Nilai valid: 0 hingga 2147483647. Nilai default: 20480. Jika ukuran log flashback melebihi nilai yang ditentukan, daur ulang log flashback dipicu. Nilai 0 menunjukkan bahwa ukuran log flashback tidak terbatas.