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)
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
Siapkan data untuk pengujian.
Buat tabel
testdan masukkan data.CREATE TABLE test(id int); INSERT INTO test select * FROM generate_series(1, 10000);Kueri jumlah total baris di tabel
test.SELECT count(1) FROM test;Hasil contoh:
count ------- 10000 (1 row)Jumlahkan nilai
id.SELECT sum(id) FROM test;Hasil contoh:
sum ---------- 50005000 (1 row)
Tunggu 10 detik lalu hapus data di tabel
test.SELECT pg_sleep(10); DELETE FROM test;Kueri tabel
testyang telah dihapus.SELECT * FROM test;Hasil contoh:
id ---- (0 rows)Kembalikan data di tabel
testke 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 TABLEKueri 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
idsetelah 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 KBpolar_flashback_logindex_mem_sizeMBpolar_flashback_logindex_queue_buffersMB
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_segmentsmenjadi kelipatan dari nilaimax_wal_size.Atur nilai
polar_flashback_point_timeoutmenjadi kelipatan dari nilaicheckpoint_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_segmentsdanpolar_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 TABLETabel
polar_flashback_54986adalah 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 TABLEALTER TABLE SET WITH OIDSALTER TABLE SET WITHOUT OIDSTRUNCATE TABLEUbah tipe data kolom. Tipe sebelum dan sesudah modifikasi tidak dapat dikonversi secara implisit, dan klausa
USINGtidak berisi nilai lain untuk konversi paksa yang aman.Ubah tabel menjadi
UNLOGGEDatauLOGGED.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.
CatatanAnda 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:
Catatan Modifikasi pada parameter ini berlaku setelah sinyal |
polar_enable_fast_recovery_area | Menentukan apakah akan mengaktifkan area pemulihan cepat. Nilai default: off. Nilai valid:
Catatan Modifikasi pada parameter ini berlaku setelah sinyal |
polar_flashback_log_keep_segments | Jumlah file yang disimpan dalam log flashback. Nilai valid: 3 hingga 2147483647. Nilai default: 8. Catatan
|
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 |
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 |
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 |
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
|
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 |
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
|
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 |
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. |