it-swarm.asia

متى يجب علي إعادة بناء الفهارس؟

متى يجب علي إعادة بناء الفهارس في قاعدة البيانات الخاصة بي (SQL Server)؟

هل هناك حالة لإعادة بناء الفهارس بشكل منتظم؟

57
Nick Chammas

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

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

وبالحديث عن SQL Server ، أميل إلى اختيار حجم الفهرس ومستوى تجزئة الفهرس عند هذه النقطة أبدأ في إجراء صيانة الفهرس. إذا كان الفهرس يحتوي على أقل من 100 صفحة ، فلن أجري أي صيانة.

إذا كان مؤشر ما بين 10٪ و 30٪ مجزأ ، فسأقوم REORGANIZE بالفهرس و UPDATE الإحصائيات. إذا كان المؤشر أكثر من 30٪ مجزأ ، فسأقوم REBUILD بالفهرس - بدون UPDATE STATISTICS ، حيث يتم الاعتناء بذلك بواسطة REBUILD. تذكر أن إعادة البناء تقوم بتحديث كائن الإحصائيات المرتبط مباشرةً بالفهرس. يجب الاحتفاظ بإحصائيات العمود الأخرى بشكل منفصل.

هذه الإجابة هي حقًا طريق طويل للقول: نعم ، يجب عليك إجراء صيانة روتينية للمؤشر ، ولكن فقط على الفهارس التي تحتاج إليها.

42
Matt M

متى يجب إعادة إنشاء الفهارس في قاعدة بياناتي العلائقية (مثل SQL Server)؟

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

هل هناك حالة لإعادة بناء الفهارس بشكل منتظم؟

إذن ماذا لو أصبحت فهارسك مجزأة بشكل منتظم بسبب النشاط المنتظم؟ هل يجب عليك جدولة عمليات إعادة البناء المنتظمة؟ كم مرة يجب أن يركضوا؟

Tom Kyte ، في هذا كلاسيك Ask Tom thread ، توصي:

يجب أن يكون الفاصل الزمني بين عمليات إعادة إنشاء الفهرس تقريبًا إلى الأبد.

...

لا تعرف كيف تقولها بشكل أفضل - يريد المؤشر أن يكون كبيرًا وبدينًا مع مساحة إضافية. إنه موجود في عمود تقوم بتحديثه - نقل إدخال الفهرس من مكان إلى آخر في الفهرس. في أحد الأيام ، يحتوي الصف على رمز "A" ، وفي اليوم التالي يكون الرمز "G" ، ثم "Z" ثم "H" وهكذا. وبالتالي يتحرك إدخال الفهرس للصف من مكان إلى آخر في الفهرس. أثناء قيامها بذلك ، فإنها تحتاج إلى مساحة - سوف ، إذا لم تكن المساحة موجودة ، قمنا بتقسيم الكتلة إلى قسمين - ونوفر مساحة. الآن يزداد المؤشر سمنة. بمرور الوقت ، يبلغ حجم الفهرس 2-3 أضعاف الحجم الذي كان عليه عند البدء وهو "نصف أو أكثر فارغًا" ولكن لا بأس بذلك لأنك تنقل الصفوف. الآن عندما نقوم بتحريك الصفوف ، لم يعد علينا تقسيم الكتل لتوفير مساحة - الغرفة متاحة بالفعل.

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

لم توفر أي مساحة.

لقد عاد الفهرس كما كان.

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

المنطق هنا سليم ، ولكنه منحاز ضد ملف تعريف تحميل ثقيل للقراءة.

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

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

19
Nick Chammas

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

11
mrdenny

كما لوحظ في الإجابة المقبولة من Matt M ، فإن القاعدة العامة الشائعة هي أنه يجب إعادة بناء الفهارس التي تكون مجزأة أكثر من 30 ٪.

سيساعدك هذا الاستعلام في العثور على عدد الفهارس التي تم تجزئتها بنسبة 30٪ (عندما يكون لديك بعض الفهارس ، يجب إعادة بنائها):

SELECT DB_NAME() AS DBName,
       OBJECT_NAME(ind.object_id) AS TableName,
       ind.name AS IndexName,
       indexstats.index_type_desc AS IndexType,
       indexstats.avg_fragmentation_in_percent,
       indexstats.fragment_count,
       indexstats.avg_fragment_size_in_pages,
       SUM(p.rows) AS Rows 
  FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
         INNER JOIN sys.indexes AS ind ON (    ind.object_id = indexstats.object_id
                                           AND ind.index_id = indexstats.index_id)
         INNER JOIN sys.partitions AS p ON (    ind.object_id = p.object_id
                                            AND ind.index_id = p.index_id)
 WHERE indexstats.avg_fragmentation_in_percent > 30
 GROUP BY
       OBJECT_NAME(ind.object_id),
       ind.name,
       indexstats.index_type_desc,
       indexstats.avg_fragmentation_in_percent,
       indexstats.fragment_count,
       indexstats.avg_fragment_size_in_pages 
 ORDER BY indexstats.avg_fragmentation_in_percent DESC
8
amandamaddox3

متى يجب علي إعادة بناء الفهارس؟

عندما تكون نسبة تجزئة المؤشر أكثر من 30٪.

هل هناك حالة لإعادة بناء الفهارس بشكل منتظم؟

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

أوصي باستخدام البرامج النصية للصيانة من Ola Hallengren (أفضل البرامج النصية للصيانة) ، وتخصيص البرامج النصية وفقًا لبيئتك وجدولة تشغيلها خلال عطلة نهاية الأسبوع.

https://ola.hallengren.com/

ملاحظة: من فضلك لا تنسى تحديث الإحصائيات بعد إعادة بناء الفهارس ، لأن إعادة بناء الفهارس لا تحدث كل الإحصائيات.

5
KrishnaV

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

إذا لم تحل المشكلة ، أو السبب في قيامك بذلك هو فقط استرضاء بعض المقاييس التي تراقبها لأنها قد تجعل الأشياء أفضل ، فإن كل ما تفعله هو حرق وحدة المعالجة المركزية و IO = وربما تجعل مشكلتك أسوأ.

هناك حجة مفادها أن إصلاح التجزئة لن يحدث أي فرق لخادمك ، فهل يستحق الأمر القيام به بانتظام على الإطلاق؟

https://www.brentozar.com/archive/2017/12/index-maintenance-madness/

http://brentozar.com/go/defrag

1
Greg