ما الخطوات التي يجب أن تكون ضرورية لتحسين الاستعلام ضعيف الأداء؟

StackOverflow https://stackoverflow.com/questions/61008

  •  09-06-2019
  •  | 
  •  

سؤال

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

سؤال ذو صلة:
ما هي التقنيات العامة التي يمكن تطبيقها لتحسين استعلامات SQL؟

هل كانت مفيدة؟

المحلول

  1. انظر إلى خطة التنفيذ في محلل الاستعلام
  2. تعرف على الخطوة الأكثر تكلفة
  3. تحسين الخطوة!
  4. العودة إلى الخطوة 1 [شكرا ل فينكو]

نصائح أخرى

في SQL Server، يمكنك الاطلاع على خطة الاستعلام في محلل الاستعلام أو Management Studio.سيخبرك هذا بالنسبة المئوية التقريبية للوقت المستغرق في كل دفعة من الكشوفات.ستحتاج إلى البحث عن ما يلي:

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

بعض النصائح العامة الأخرى:

  • يمكن أن يؤدي وجود كمية كبيرة من العبارات الشرطية، مثل عبارات if-else المتعددة، إلى قيام SQL Server بإعادة إنشاء خطة الاستعلام باستمرار.يمكنك التحقق من ذلك باستخدام ملف التعريف.
  • تأكد من أن الاستعلامات المختلفة لا تحظر بعضها البعض، مثل عبارة التحديث التي تحظر عبارة التحديد.يمكن تجنب ذلك عن طريق تحديد تلميح (nolock) في عبارات تحديد SQL Server.
  • كما ذكر الآخرون، جرب معالج ضبط الأداء في Management Studio.

أخيرًا، أوصي بشدة بإنشاء مجموعة من اختبارات التحميل (باستخدام Visual Studio 2008 Test Edition)، والتي يمكنك استخدامها لمحاكاة سلوك تطبيقك عند التعامل مع كمية كبيرة من الطلبات.لا تظهر بعض اختناقات أداء SQL إلا في ظل هذه الظروف، والقدرة على إعادة إنتاجها تجعل إصلاحها أسهل كثيرًا.

قد تكون الفهارس مكانًا جيدًا للبدء...

يمكن إسقاط الفاكهة المتدلية المنخفضة باستخدام خادم قاعدة البيانات فِهرِس معالج الضبط.

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

إذا كانت لديك خطوة واحدة تتطلب نسبة جنونية تبلغ 80%، فربما يمكن إضافة فهرس، ثم بعد تعديل الفهرس، أعد تشغيل خطة التنفيذ للعثور على خطوتك الأكبر التالية.

بعد إجراء بعض التعديلات، قد تجد أنه لا توجد خطوات متميزة عن الخطوات الأخرى، على سبيل المثال.انهم جميعا 1-2٪ لكل منهما.إذا كان الأمر كذلك، فقد تحتاج بعد ذلك إلى معرفة ما إذا كانت هناك طريقة يمكنك من خلالها تقليل كمية البيانات المضمنة في استعلامك، فهل يجب تضمين أوامر المبيعات المغلقة الأربعة ملايين هذه في استعلام "أوامر المبيعات النشطة" ؟لا، لذا استبعد جميع الأشخاص الذين لديهم الحالة = 'C' ...أو شيء من هذا القبيل.

هناك تحسين آخر ستراه من خطة التنفيذ وهو عمليات البحث عن الإشارات المرجعية، حيث تجد بشكل أساسي تطابقًا في الفهرس، ولكن بعد ذلك يتعين على SQL Server البحث بسرعة عبر الجدول للعثور على السجل الذي تريده.قد تستغرق هذه العملية في بعض الأحيان وقتًا أطول من مجرد مسح الجدول في المقام الأول، إذا كان الأمر كذلك، فهل تحتاج حقًا إلى هذا الفهرس؟

مع الفهارس، وخاصة مع SQL Server 2005، يجب أن تنظر إلى جملة INCLUDE، وهذا يسمح لك بشكل أساسي بالحصول على عمود في فهرس دون أن يكون موجودًا بالفعل في الفهرس، لذلك إذا كانت جميع البيانات التي تحتاجها لاستعلامك موجودة في الفهرس الخاص بك أو هو عمود مضمن، لذا لا يحتاج SQL Server حتى إلى إلقاء نظرة على الجدول، وهو عبارة عن انتقاء كبير للأداء.

هناك بعض الأشياء التي يمكنك الاطلاع عليها لتحسين أداء الاستعلام الخاص بك.

  1. تأكد من أن لديك الحد الأدنى من البيانات.تأكد من تحديد الأعمدة التي تحتاجها فقط.تقليل أحجام الحقول إلى الحد الأدنى.

  2. فكر في إلغاء تسوية قاعدة بياناتك لتقليل عمليات الانضمام

  3. تجنب الحلقات (أي.جلب المؤشرات)، والتمسك بضبط العمليات.

  4. قم بتنفيذ الاستعلام كإجراء مخزن حيث تم تجميعه مسبقًا وسيتم تنفيذه بشكل أسرع.

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

  6. استخدم خطة التنفيذ لترى كيف تتم المعالجة.ما تريد تجنبه هو فحص الجدول لأن هذا مكلف.

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

  8. تأكد من عدم تجزئة الفهارس الخاصة بك تقليل تجزئة فهرس SQL Server

  9. تأكد من عدم تجزئة الجداول الخاصة بك. كيفية اكتشاف تجزئة الجدول في SQL Server 2000 و 2005

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

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

هناك طرق لإعطاء تلميحات SQL حول نوع الصلات التي سيتم استخدامها إذا كنت تستخدم الصلات.كن حذرًا هنا، فبينما قد يؤدي تلميح واحد إلى تسريع استعلامك مرة واحدة، إلا أنه قد يبطئ استعلامك بمقدار 10 أضعاف في المرة التالية اعتمادًا على البيانات والمعلمات.

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

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

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

افعل ما ذكره رومان وآندي إس أولاً.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top