it-swarm.asia

كيفية منع سجل المعاملات من الامتلاء أثناء إعادة تنظيم الفهرس؟

لدينا أجهزة متعددة حيث خصصنا مسبقًا حجم سجل المعاملات إلى 50 جيجابايت. حجم الجدول الذي أحاول إعادة تنظيمه هو 55 - 60 جيجابايت ولكن سيزداد باستمرار. السبب الرئيسي الذي أرغب في إعادة تنظيمه هو استعادة المساحة وأي ميزة للأداء بسبب ذلك مكافأة إضافية.

مستوى تجزئة الجدول هو 30 - 35٪. على بعض هذه الأجهزة أحصل على خطأ "سجل المعاملات ممتلئ" وأعيد تنظيمه. يصل حجم سجل المعاملات إلى 48 جيجابايت. ما هي الطريقة الجيدة لمواجهة هذا؟ ليس لدينا زيادة تلقائية قيد التشغيل وأنا متردد في القيام بذلك.

يمكنني زيادة حجم السجل إلى قيمة أكبر ولكن مع زيادة حجم الجدول في المستقبل ، قد لا تكون القيمة كافية. كما أنه يهزم الغرض من إعادة التنظيم لاستعادة المساحة إذا كنت سأقوم بزيادة حجم السجل بالتساوي. أي أفكار حول كيف يمكنني مواجهة هذا بشكل فعال؟ لا يُعد استخدام الوضع المجمّع خيارًا لأن فقدان البيانات غير مقبول.

19
Sriram Subramanian

إعادة التنظيم (كما هو الحال في ALTER INDEX ... REORGANIZE) هي عملية سريعة جدًا (حسنًا ، في الغالب ...) ، والتي تتطلب كمية صغيرة من السجل ، يمكن مقاطعتها في أي لحظة واستئنافها لاحقًا ، وتعمل داخليًا في معاملات دفعة صغيرة :

يتم تنفيذ عملية إلغاء التجزئة كسلسلة من المعاملات القصيرة ، لذلك لا يلزم وجود سجل كبير إذا تم أخذ النسخ الاحتياطية للسجل بشكل متكرر أو إذا كان إعداد نموذج الاسترداد بسيطًا.

هل أنت متأكد أنك لا تتحدث عن إعادة بناء ؟ الفهرس REBUILD بطيء ومكلف ويستهلك كمية هائلة من السجل (إذا لم يكن متصلاً ولا يمكن تسجيل ضئيل ، لا يمكن تسجيل إعادة البناء عبر الإنترنت إلى الحد الأدنى) ، هو معاملة عملاقة واحدة ولا يمكن مقاطعتها بدون تفقد كل العمل.

يبدو لي أنك تقوم بإعادة البناء ، وهي عملية استثنائية حقًا لا يجب عليك القيام بها إلا إذا كان لديك سبب جيد للغاية. ما نوع المساحة التي تستعيدها؟ اي شئ DBCC CLEANTABLE لن تعالج؟ هل راجعت الهيكل المادي للجدول ، هل انحرفت عن الهيكل المنطقي (انظر أعمدة جدول SQL Server تحت الغطاء للحصول على التفاصيل)؟

إذا كان عليك حقا أن تعيد بناء الجدول ، فأنا أخشى أنه لا يوجد لديك خيار سوى لدغة الرصاص وتخصيص السجل الضروري. لا تدعها تنمو تلقائيًا ، فهي ستبطئ العملية فقط. قم بزراعته مسبقًا إلى 2.5 مرة من حجم الجدول.

إذا تم تقسيم الجدول ، فيمكنك إعادة البناء دون اتصال (وإعادة تنظيم) قسم واحد في كل مرة. لا يمكن إعادة البناء على الإنترنت إلا على مستوى الجدول بأكمله.

7
Remus Rusanu

أفضل الممارسات هي REORGANIZE أسفل تجزئة 30٪ تقريبًا و REBUILD فوق هذا. ببساطة ، REBUILD يقوم بعمل نسخة نظيفة ، REORGANIZE يقوم بذلك في الموقع.

تحقق مما تفعله بالفعل: ليس لديك خطة صيانة تفعلها معًا؟

على الجداول الأكبر (جدول 50 غيغابايت هناك) رأيت REORGANIZE تستهلك كل مساحة سجل المعاملات إذا اتبعت هذه القاعدة. ليس غالبًا: نظام واحد فقط بنمط تحميل معين. تم تشغيل REORGANIZE حتى تمدد السجل واستهلك مساحة القرص بالكامل.

بدلنا إلى REBUILD بدلاً من ذلك بدون مشاكل أخرى ، لكننا تجاهلنا التجزئة أقل من 25٪. نجح هذا بالنسبة لنا: سيتعين عليك معرفة ما إذا كان يناسبك أم لا.

REBUILD قد يؤثر على الأداء أكثر من REORGANIZE في الإنتاج ، ولكن يمكن تخفيف ذلك في بعض الأحيان باستخدام خيار ONLINE (Enterprise Edition مطلوب).

7
gbn

لقد واجهت هذه المشكلة من قبل.

  • لديك قاعدة بيانات كبيرة ومحرك أقراص صغير. تريد إعادة التنظيم (لعدة أسباب).
  • عند محاولة ذلك على جدول مجزأ كبير يملأ السجل حتى يمتلئ محرك الأقراص ثم يتم إيقاف الأمر.
  • إذا كان الوضع في الوضع البسيط ، فقد تفشل المعاملات الأخرى حتى يتم مسح السجل في نقطة التحقق التالية ، وإذا كان في الوضع الكامل ، فقد تفشل المعاملات الأخرى حتى النسخ الاحتياطي للسجل التالي. انقطاع!
  • إذا كنت في الوضع الكامل ، فأنت تزيد من تكرار النسخ الاحتياطي للسجل الخاص بك ولكنه لا يساعد في تجنب المشكلة لأن إعادة التنظيم تتم في معاملة ضمنية ، لا يتم مسح السجل حتى تنتهي هذه المعاملة أو تتراجع أو تتوقف.
  • وتريد حقًا أن تتم إعادة التنظيم حتى اكتماله.

يعد هذا أمرًا بديهيًا بعض الشيء لأنك تعرف أنه إذا أجهضت عملية إعادة التنظيم ، فيمكن أن تستمر من حيث توقفت ، فذلك يعني أن الإجهاض يرتكب المعاملة بدلاً من التراجع.

إليك ما تفعله. إنها طويلة بعض الشيء ولكنها مباشرة.

  • قم بزيادة حجم ملف السجل الخاص بك مسبقًا إلى حجم كبير نسبيًا ، ولكن ليس الحد الأقصى. تريد بشكل أساسي ترك مساحة كافية للقيام بعمل مفيد ، بالإضافة إلى بعض عمليات النمو الصغيرة إذا حدثت ، بحيث لا تتوقف العمليات العادية.
  • قم بإنشاء وظيفة لتشغيل فهرس إعادة التنظيم ("إعادة التنظيم").
  • إنشاء تنبيه عامل WMI ("إعادة تنظيم صمام الإغاثة") على حالة الأداء.

    • الكائن: SQLServer: قواعد البيانات
    • العداد: سجل النسبة المئوية المستخدمة
    • المثيل: (اسم قاعدة البيانات الكبيرة الخاصة بك)
    • تنبيه إذا ارتفع العداد فوق: 80
    • الرد: تنفيذ المهمة ("إعادة تنظيم التحقق")
  • إنشاء وظيفة ("Reorganize Check")

    • في الوظيفة ، تحقق من msdb.dbo.sysjobactivity لمعرفة ما إذا كانت وظيفة "إعادة التنظيم" قيد التشغيل. وإذا كانت ...
    • أوقف العمل واستطلع الاستطلاع حتى يتوقف. قد يستغرق ذلك بضع ثوانٍ.
    • (إذا كنت في الوضع الكامل) ، فقم بتشغيل مهمة النسخ الاحتياطي للسجل وتأكيدها عند الانتهاء.
    • تحقق مرة أخرى من sys.dm_os_performance_counters التي قلها عداد المساحة الخالية في السجل الخاص بك إلى ما دون العتبة.
    • ابدأ مهمة "إعادة التنظيم".
  • اختبر هذا كله في مكان ما ، حتى وضع الحماية ، للتأكد من أنه يعمل بشكل صحيح قبل إلصاقه بخادم الإنتاج.

ما ستراه هو بدء مهمة "إعادة التنظيم" وبدء ملء السجل. عندما يصل السجل إلى نسبة مئوية كاملة ، فإنه يشغل تنبيه WMI (في غضون 30 ثانية تقريبًا) الذي يدير وظيفتك الأخرى التي ترى أن وظيفة "إعادة التنظيم" قيد التشغيل ومن المحتمل أن تكون على خطأ. ثم يتوقف عن "إعادة التنظيم" ، ويقوم بعمل نسخة احتياطية ، ويؤكد أن المساحة الخالية في السجل قد عادت إلى قيمة معقولة ، ثم تبدأ مهمة "إعادة التنظيم" مرة أخرى والتي ستستأنف من حيث توقفت.

لذلك يمكنك أن تجعل السبب الذي يجعلك تقوم مسبقًا بتكبير حجم السجل الخاص بك إلى رقم معقول في هذا السيناريو هو تقليل عدد النمو/الزناد/الوظيفة/الإيقاف/إعادة التشغيل ، بحيث يمكن أن يكون أكثر كفاءة ، وكذلك الاحتفاظ بمساحة كافية لـ زيادات عرضية لا يتم اكتشافها في الوقت المناسب.

هذا نوع من السيناريو الغريب. أنا متأكد جدًا من أنني كنت قد رفضت هذا الأمر قبل بضع سنوات ، ومن الواضح أن هناك قضايا أساسية أساسية في متناول اليد هنا. ولكن إذا كنت تتعامل مع مئات الخوادم ، فسيظهر عدد قليل من حالات Edge مثل هذه التي لا يمكن التعامل معها بأي شكل من الأشكال ، لأي سبب من أسباب العمل ، باستثناء MacGyvering وهو حل مؤقت ينجز المهمة.

طالما أنها آمنة ومنطقية ومختبرة وموثقة جيدًا ، فلن تكون هناك مشكلة.

6
Cody Konior

هذا ما فعلته عادةً (لدي أيضًا بعض الجداول التي يبلغ حجم كل منها 80 + غيغابايت) لإعادة الفهرس (لأنه يمكن إيقاف إعادة الفهرس في أي وقت دون فقدان العمل السابق في إعادة التنظيم).

  1. أثناء إعادة فهرسة الفهرس ، سوف أقوم بزيادة النسخة الاحتياطية لـ tlog من ترددي المعتاد لمدة 30 دقيقة إلى كل 10 دقائق
  2. لدي جلسة أخرى أقوم بفحص المساحة الخالية في tlog كل دقيقة واحدة ، وإذا كانت المساحة الخالية في tlog أقل من الحد الأدنى ، فسوف أوقف جلسة إعادة فهرسة الفهرس وأبدأ (أو انتظر) النسخ الاحتياطي tlog. ثم أعد تشغيل الفهرس reorg.

في إطار صيانة الفهرس الخاص بي ، أقوم بتصنيف الفهارس إلى مجموعتين ، إحداهما لإعادة بناء الفهرس والأخرى لإعادة الفهرس. لإعادة بناء الفهرس ، سأستخدم نهجًا مختلفًا إلى حد ما لأنني لا أريد إيقاف جلسة إعادة بناء الفهرس (مما سيؤدي إلى التراجع وفقدان جميع الأعمال السابقة). أثناء إعادة بناء الفهرس ، إذا لاحظت جلسة المراقبة الخاصة بي وجود مساحة خالية لملف tlog تستهلك السيناريو ، فستعمل جلسة المراقبة على زيادة ملف tlog مسبقًا تلقائيًا ، وفي أسوأ السيناريوهات (أي أن القرص ممتلئ) ، ستقوم جلسة المراقبة بإنشاء ملف سجل آخر ( ولكن في وقت لاحق سوف أسقطه) على محرك أقراص آخر (محرك النسخ الاحتياطي)

1
jyao

كان لدي نفس المشكلة مثل مؤلف السؤال ، وبالنظر إلى تعليقاته ، يمكنني القول أن لدي نفس الإعداد. بينما كنت أحاول عمل REORGANIZE ، ينمو السجل بالكامل ، بغض النظر عن الحجم ، حتى عدة أضعاف حجم الجدول بأكمله.

سبب المشكلة النسخ المتماثل للمعاملات. على ما يبدو ، لا يمكن عمل نسخة احتياطية من السجل حتى تنتهي عملية REORGANIZE. قرأت في مكان ما أنها مشكلة معروفة من قبل Microsoft ، لكنني لست متأكدًا من أين.

بمجرد تعطيل النسخ المتماثل للمعاملات ، عملت النسخ الاحتياطية للسجل بشكل طبيعي مرة أخرى ، وعمل النسخ الاحتياطية للسجل كل 30 ثانية أثناء إعادة التنظيم عملت بشكل جيد بالنسبة لي.

1
IUmpierrez

أفترض أنك تدير شيئًا على غرار:

مؤشر بديل عن إعادة التنظيم

لسوء الحظ ، لا توجد طريقة لتشغيل تنظيم جزئي (الطريقة التي يمكنك بها تقليص ملف السجل جزئيًا على سبيل المثال). الطرق التي يمكنني التفكير بها حول هذه المشاكل هي:

1) اضبط قاعدة البيانات على وضع الاسترداد البسيط أثناء تشغيل إعادة التنظيم ، لكنك قلت إن ذلك غير مقبول

2) تقسيم الفهرس - إذا كان بإمكانك التفكير في طريقة لتقسيم الفهرس للحصول على أقسام متساوية الحجم تقريبًا ، فستتمكن بعد ذلك من إعادة تنظيم (أو إعادة البناء باستخدام خيار عبر الإنترنت) كل قسم بشكل مستقل وبالتالي تقييد نمو ملف السجل

أنا متأكد من أنك تفعل ذلك ، ولكن إذا لم تكن كذلك ، فقد ترغب في بدء النسخ الاحتياطي لملف السجل قبل وبعد إجراء أي تحسينات على الفهرس ، مما سيسمح لها باستعادة المساحة المستخدمة.

0
voutmaster