Bagikan melalui


Mengelola data historis dengan kebijakan retensi

Penting

Azure SQL Edge akan dihentikan pada 30 September 2025. Untuk informasi selengkapnya dan opsi migrasi, lihat Pemberitahuan penghentian.

Catatan

Azure SQL Edge tidak lagi mendukung platform ARM64.

Setelah kebijakan retensi data ditentukan untuk database dan tabel yang mendasarinya, tugas timer latar belakang berjalan untuk menghapus rekaman usang dari tabel yang diaktifkan untuk retensi data. Identifikasi baris yang cocok dan penghapusannya dari tabel terjadi secara transparan, dalam tugas latar belakang yang dijadwalkan dan dijalankan oleh sistem. Kondisi usia untuk baris tabel dicentang berdasarkan filter_column kolom yang ditentukan dalam definisi tabel. Jika periode retensi diatur ke satu minggu, misalnya, baris tabel yang memenuhi syarat untuk pembersihan memenuhi salah satu kondisi berikut:

  • Jika kolom filter menggunakan tipe data DATETIMEOFFSET, maka kondisinya adalah filter_column < DATEADD(WEEK, -1, SYSUTCDATETIME())
  • Jika tidak, kondisinya adalah filter_column < DATEADD(WEEK, -1, SYSDATETIME())

Fase pembersihan retensi data

Operasi pembersihan retensi data terdiri dari dua fase:

  1. Penemuan: Dalam fase ini, operasi pembersihan mengidentifikasi semua tabel dalam database pengguna untuk membangun daftar untuk pembersihan. Penemuan berjalan sekali sehari.
  2. Pembersihan: Dalam fase ini, pembersihan dijalankan terhadap semua tabel dengan retensi data terbatas, yang diidentifikasi dalam fase penemuan. Jika operasi pembersihan tidak dapat dilakukan pada tabel, maka tabel tersebut dilewati dalam eksekusi saat ini dan akan dicoba kembali dalam perulangan berikutnya. Prinsip-prinsip berikut digunakan selama pembersihan:
    • Jika baris usang dikunci oleh transaksi lain, baris tersebut akan dilewati.
    • Pembersihan berjalan dengan batas waktu penguncian default 5 detik. Jika kunci tidak dapat diperoleh pada tabel dalam jendela batas waktu, tabel dilewati dalam eksekusi saat ini dan akan dicoba kembali dalam iterasi berikutnya.
    • Jika ada kesalahan selama pembersihan tabel, tabel tersebut dilewati dan akan diambil di iterasi berikutnya.

Pembersihan manual

Bergantung pada pengaturan retensi data pada tabel dan sifat beban kerja pada database, ada kemungkinan bahwa utas pembersihan otomatis mungkin tidak sepenuhnya menghapus semua baris usang selama dijalankan. Untuk memungkinkan pengguna menghapus baris usang secara manual, prosedur tersimpan sys.sp_cleanup_data_retention telah diperkenalkan di Azure SQL Edge.

Prosedur tersimpan ini mengambil tiga parameter:

  • @schema_name: Nama skema pemilik untuk tabel. Harus diisi.
  • @table_name: Nama tabel tempat pembersihan manual dijalankan. Harus diisi.
  • @rowcount: Variabel output. Mengembalikan jumlah baris yang dibersihkan oleh sp pembersihan manual. Opsional.

Untuk informasi selengkapnya, lihat sys.sp_cleanup_data_retention (Transact-SQL).

Contoh berikut menunjukkan eksekusi sp pembersihan manual untuk tabel dbo.data_retention_table.

DECLARE @rowcnt BIGINT;
EXEC sys.sp_cleanup_data_retention 'dbo', 'data_retention_table', @rowcnt OUTPUT;
SELECT @rowcnt;

Bagaimana baris usang dihapus

Proses pembersihan tergantung pada tata letak indeks tabel riwayat. Proses di latar belakang dibuat untuk melakukan pembersihan data lama untuk semua tabel temporal dengan periode retensi terbatas. Membersihkan logika untuk indeks rowstore (tumpukan atau pohon B) menghapus baris berumur dalam gugus yang lebih kecil (hingga 10.000), meminimalkan tekanan pada log database dan subsistem I/O. Meskipun logika pembersihan menggunakan indeks pohon B yang diperlukan, urutan penghapusan untuk baris yang lebih lama dari periode retensi tidak dapat dijamin dengan kuat. Dengan kata lain, jangan mengambil dependensi pada urutan pembersihan di aplikasi Anda.

Peringatan

Dalam kasus tumpukan dan indeks pohon B, retensi data menjalankan kueri penghapusan pada tabel yang mendasarinya, yang dapat bertentangan dengan pemicu penghapusan pada tabel. Anda harus menghapus pemicu penghapusan dari tabel, atau menghindari penggunaan retensi data pada tabel yang telah menghapus pemicu DML.

Tugas pembersihan untuk indeks penyimpan kolom berkluster menghapus seluruh grup baris sekaligus (biasanya berisi masing-masing 1 juta baris), yang efisien, terutama ketika data dihasilkan dan kehabisan usia dengan kecepatan tinggi.

Diagram pembersihan retensi data.

Kompresi data yang sangat baik dan pembersihan retensi yang efisien membuat indeks penyimpan kolom berkluster menjadi pilihan yang sempurna untuk skenario ketika beban kerja Anda dengan cepat menghasilkan sejumlah besar data.

Memantau pembersihan retensi data

Operasi pembersihan kebijakan penyimpanan data dapat dipantau menggunakan Extended Events di Azure SQL Edge. Untuk informasi selengkapnya tentang peristiwa yang diperluas, lihat Gambaran Umum Peristiwa yang Diperluas.

Kejadian Diperluas berikut membantu melacak status operasi pembersihan.

Nama Deskripsi
data_retention_task_started Terjadi ketika tugas latar belakang untuk pembersihan tabel dengan kebijakan penyimpanan dimulai.
data_retention_task_started Terjadi ketika tugas latar belakang untuk pembersihan tabel dengan kebijakan penyimpanan berakhir.
data_retention_task_exception Terjadi ketika tugas latar belakang untuk pembersihan tabel dengan kebijakan penyimpanan gagal, di luar proses pembersihan retensi khusus untuk tabel tersebut.
data_retention_cleanup_started Terjadi ketika proses pembersihan tabel dengan kebijakan penyimpanan data dimulai.
data_retention_cleanup_started Terjadi ketika proses pembersihan tabel dengan kebijakan penyimpanan gagal.
data_retention_cleanup_started Terjadi ketika proses pembersihan tabel dengan kebijakan penyimpanan data berakhir.

Selain itu, jenis buffer cincin baru bernama RING_BUFFER_DATA_RETENTION_CLEANUP telah ditambahkan ke sys.dm_os_ring_buffers tampilan manajemen dinamis. Tampilan ini dapat digunakan untuk memantau operasi pembersihan retensi data.