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.
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
Persiapkan data uji.
Buat tabel bernama
testdan masukkan data.CREATE TABLE test(id int); INSERT INTO test select * FROM generate_series(1, 10000);Kueri jumlah total baris dalam tabel
test.SELECT count(1) FROM test;Hasil berikut dikembalikan:
count ------- 10000 (1 row)Hitung jumlah nilai
id.SELECT sum(id) FROM test;Hasil berikut dikembalikan:
sum ---------- 50005000 (1 row)
Tunggu 10 detik lalu hapus data dari tabel
test.SELECT pg_sleep(10); DELETE FROM test;Kueri tabel
testsetelah penghapusan.SELECT * FROM test;Hasil berikut dikembalikan:
id ---- (0 rows)Flashback tabel
testke 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 TABLEKueri 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
iddalam 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 KBpolar_flashback_logindex_mem_sizeMBpolar_flashback_logindex_queue_buffersMB
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_segmentsmenjadi kelipatan darimax_wal_size.Atur
polar_flashback_point_timeoutmenjadi kelipatan daricheckpoint_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_segmentsdanpolar_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 TABLEPada contoh ini,
polar_flashback_54986adalah 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 TABLEALTER TABLE SET WITH OIDSALTER TABLE SET WITHOUT OIDSTRUNCATE TABLEModifikasi 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
UNLOGGEDatauLOGGED.Menambahkan kolom
IDENTITY.Menambahkan kolom yang tipenya memiliki constraint.
Menambahkan kolom yang ekspresi nilai default-nya mengandung fungsi volatile.
CatatanJika perintah
DROP TABLEtelah 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:
Catatan Parameter ini berlaku setelah sinyal |
polar_enable_fast_recovery_area | Menentukan apakah fitur fast recovery area diaktifkan. Nilai yang valid:
Catatan Parameter ini berlaku setelah sinyal |
polar_flashback_log_keep_segments | Jumlah file flashback log yang dipertahankan. Nilai yang valid: 3 hingga 2147483647. Nilai default: 8. Catatan
|
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 |
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 |
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 |
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
|
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 |
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
|
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 |
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. |