إدارة البيانات السابقة باستخدام سياسة الاحتفاظ بالبيانات
يمكن تمكين الاحتفاظ بالبيانات على قاعدة البيانات وأي من الجداول الأساسية بشكل فردي، مما يسمح للمستخدمين بإنشاء سياسات تقادم مرنة لجداولهم وقواعد بياناتهم. يعد تطبيق الاحتفاظ بالبيانات أمرا بسيطا: فهو يتطلب تعيين معلمة واحدة فقط أثناء إنشاء الجدول أو كجزء من عملية تغيير الجدول.
بعد تحدي نهج الاحتفاظ بالبيانات لقاعدة بيانات والجدول الأساسي، يتم تشغيل مهمة مؤقت وقت الخلفية لإزالة أي سجلات قديمة من الجدول الممكن للاحتفاظ بالبيانات. يتم تحديد الصفوف المطابقة وإزالتها من الجدول بشفافية، في مهمة الخلفية التي تتم جدولتها وتشغيلها بواسطة النظام. يتم التحقق من حالة العمر لصفوف الجدول استنادا إلى العمود المستخدم كعمود filter_column في تعريف الجدول. إذا تم تعيين فترة الاحتفاظ بالبيانات، على سبيل المثال، إلى أسبوع واحد، فإن صفوف الجدول المؤهلة للتنظيف تفي بأي من الشرطين التاليين:
- إذا كان عمود عامل التصفية يستخدم نوع بيانات DATETIMEOFFSET ، فإن الشرط هو
filter_column < DATEADD(WEEK, -1, SYSUTCDATETIME()) - وإلا فإن الشرط هو
filter_column < DATEADD(WEEK, -1, SYSDATETIME())
مراحل تنظيف الاحتفاظ بالبيانات
تتكون عملية تنظيف الاحتفاظ بالبيانات من مرحلتين.
- مرحلة الاكتشاف - في هذه المرحلة ، تحدد عملية التنظيف كافة الجداول الموجودة داخل قواعد بيانات المستخدم لإنشاء قائمة للتنظيف. يعمل الاكتشاف مرة واحدة في اليوم.
- مرحلة التنظيف - في هذه المرحلة ، يتم تشغيل التنظيف مقابل جميع الجداول ذات الاحتفاظ بالبيانات المحدودة ، والتي تم تحديدها في مرحلة الاكتشاف. إذا تعذر إجراء عملية التنظيف على جدول، تخطي هذا الجدول في التشغيل الحالي وسيتم إعادة محاولته في التكرار التالي. يتم استخدام المبادئ التالية أثناء التنظيف
- إذا تم تأمين صف قديم بواسطة معاملة أخرى، تخطي هذا الصف.
- يتم تشغيل التنظيف باستخدام إعداد مهلة قفل افتراضي مدته 5 ثوان. إذا تعذر الحصول على الأقفال على الجداول ضمن نافذة المهلة، تخطي الجدول في التشغيل الحالي وسيتم إعادة محاولته في التكرار التالي.
- إذا كان هناك خطأ أثناء تنظيف جدول، تخطي هذا الجدول وسيتم التقاطه في التكرار التالي.
التنظيف اليدوي
استنادا إلى إعدادات الاحتفاظ بالبيانات على جدول وطبيعة عبء العمل على قاعدة البيانات، من المحتمل ألا يؤدي مؤشر ترابط التنظيف التلقائي إلى إزالة كافة الصفوف القديمة تماما أثناء تشغيله. للمساعدة في ذلك والسماح للمستخدمين بإزالة الصفوف القديمة يدويا، تم تقديم الإجراء المخزن sys.sp_cleanup_data_retention في Azure SQL Edge.
يستغرق هذا الإجراء المخزن ثلاثة معلمات. - اسم المخطط - اسم المخطط المالك للجدول. هذه معلمة مطلوبة. - اسم الجدول - اسم الجدول الذي يتم تشغيل التنظيف اليدوي له. هذه معلمة مطلوبة. - عدد الصفوف (الإخراج) - متغير الإخراج. ترجع هذه الدالة عدد الصفوف التي تم تنظيفها بواسطة sp للتنظيف اليدوي. فهذه معلمة اختيارية.
يوضح المثال التالي تنفيذ sp التنظيف اليدوي للجدول dbo.data_retention_table.
declare @rowcnt bigint
EXEC sys.sp_cleanup_data_retention 'dbo', 'data_retention_table', @rowcnt output
select @rowcnt
كيفية حذف الصفوف القديمة
تعتمد عملية التنظيف على تخطيط فهرس الجدول. يتم إنشاء مهمة خلفية لإجراء تنظيف البيانات القديمة لجميع الجداول ذات فترة الاحتفاظ المحدودة. يقوم منطق التنظيف لفهرس rowstore (B-tree أو Heap) بحذف الصف القديم في أجزاء أصغر (حتى 10K) مما يقلل الضغط على سجل قاعدة البيانات والنظام الفرعي IO. على الرغم من أن منطق التنظيف يستخدم فهرس B-tree المطلوب، إلا أنه لا يمكن ضمان ترتيب عمليات الحذف للصفوف الأقدم من فترة الاستبقاء. وبالتالي، لا يمكن الاعتماد على ترتيب التنظيف في التطبيقات الخاصة بك.
تزيل مهمة التنظيف لمخزن الأعمدة المجمعة مجموعات الصفوف بأكملها في وقت واحد (تحتوي عادة على 1 مليون صف لكل منها) ، وهي فعالة للغاية ، خاصة عندما يتم إنشاء البيانات وعمرها بوتيرة عالية.

يجعل ضغط البيانات الممتاز والتنظيف الفعال للاحتفاظ بالبيانات فهرس columnstore المتجمع خيارا مثاليا للسيناريوهات عندما يولد عبء العمل الخاص بك كمية كبيرة من البيانات بسرعة.
ملاحظة
في حالة فهارس B-Tree وأكوامها، يقوم الاحتفاظ بالبيانات بتشغيل استعلام حذف على الجداول الأساسية، والذي يمكن أن يتعارض مع مشغلات الحذف على الجداول. يوصى إما بإزالة مشغلات الحذف من الجداول أو عدم تمكين الاحتفاظ بالبيانات على الجداول التي تحتوي على مشغل DML للحذف.
مراقبة تنظيف الاحتفاظ بالبيانات
يمكن مراقبة عمليات تنظيف نهج الاحتفاظ بالبيانات باستخدام الأحداث الموسعة (XEvents) في Azure SQL Edge. لمزيد من المعلومات حول الأحداث الموسعة، راجع نظرة عامة على XEvents.
تساعد الأحداث الستة الموسعة التالية في تتبع حالة عمليات التنظيف.
| الاسم | الوصف |
|---|---|
| data_retention_task_started | يحدث عند بدء مهمة الخلفية لتنظيف الجداول باستخدام نهج الاستبقاء. |
| data_retention_task_completed | يحدث عندما تنتهي مهمة الخلفية لتنظيف الجداول باستخدام نهج الاستبقاء. |
| data_retention_task_exception | يحدث عندما تفشل مهمة الخلفية لتنظيف الجداول باستخدام نهج الاستبقاء خارج عملية تنظيف الاحتفاظ بالبيانات الخاصة بالجدول. |
| data_retention_cleanup_started | يحدث عند بدء عملية تنظيف الجدول باستخدام نهج الاحتفاظ بالبيانات. |
| data_retention_cleanup_exception | يحدث عملية تنظيف الجدول مع فشل نهج الاستبقاء. |
| data_retention_cleanup_completed | يحدث عند انتهاء عملية تنظيف الجدول باستخدام نهج الاحتفاظ بالبيانات. |
بالإضافة إلى ذلك، تمت إضافة نوع مخزن مؤقت حلقة جديد يسمى RING_BUFFER_DATA_RETENTION_CLEANUP إلى sys.dm_os_ring_buffers طريقة عرض الإدارة الديناميكية. يمكن استخدام طريقة العرض هذه لمراقبة عمليات تنظيف الاحتفاظ بالبيانات.