مشاركة عبر


الضبط الذاتي

الضبط التلقائي هو ميزة في قاعدة بيانات Azure الخاصة بك لنسخة الخادم المرن PostgreSQL تقوم بتحليل الاستعلامات المتأثرة بعبء عملك وتقديم توصيات لتحسين أداء تلك الاستعلامات.

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

الوصف العام لخوارزمية الضبط الذاتي

عند تكوين معلمة index_tuning.mode الخادم إلى report، يتم بدء جلسات الضبط تلقائيا مع التردد الذي تم تكوينه في معلمة index_tuning.analysis_intervalالخادم ، ويتم التعبير عنها بالدقائق.

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

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

يتم استبعاد الاستعلامات التالية من تلك القائمة:

  • الاستعلامات التي بدأها النظام. (أي الاستعلامات التي يتم تنفيذها حسب azuresu الدور)
  • الاستعلامات المنفذة في سياق أي قاعدة بيانات نظام (azure_sysو template0template1و وazure_maintenance).

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

إنشاء توصيات INDEX

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

يتم تصنيف المجموعة الناتجة من الاستعلامات استنادا إلى إجمالي وقت التنفيذ المجمع الخاص بها، ويتم تحليل الجزء العلوي index_tuning.max_queries_per_database للحصول على توصيات الفهرس المحتملة.

تهدف التوصيات المحتملة إلى تحسين أداء هذه الأنواع من الاستعلامات:

  • الاستعلامات ذات عوامل التصفية (أي الاستعلامات ذات دالات التقييم في عبارة WHERE)،
  • الاستعلامات التي تنضم إلى علاقات متعددة، سواء كانت تتبع بناء الجملة الذي يتم التعبير عن الصلات فيه باستخدام عبارة JOIN أو ما إذا كان يتم التعبير عن دالات التقييم الخاصة بالصلة في عبارة WHERE.
  • استعلامات تجمع بين عوامل التصفية والانضمام إلى دالات التقييم.
  • الاستعلامات ذات التجميع (الاستعلامات التي تحتوي على عبارة GROUP BY).
  • الاستعلامات التي تجمع بين عوامل التصفية والتجموع.
  • الاستعلامات ذات الفرز (الاستعلامات التي تحتوي على عبارة ORDER BY).
  • استعلامات تجمع بين عوامل التصفية والفرز.

إشعار

النوع الوحيد من الفهارس الذي يوصي به النظام حاليا هو B-Tree.

إذا كان الاستعلام يشير إلى عمود واحد من الجدول ولا يحتوي ذلك الجدول على إحصائيات، فلا ينتج أي توصيات فهرسة لتحسين تنفيذه. ومع ذلك، فإنه يولد توصية لتحليل الجدول.

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

index_tuning.max_index_count يحدد عدد توصيات الفهرس التي تم إنتاجها لجميع جداول أي قاعدة بيانات تم تحليلها أثناء جلسة ضبط.

لكي يتم إصدار توصية فهرس، يجب أن يقدر محرك الضبط أنه يحسن استعلاما واحدا على الأقل في حمل العمل الذي تم تحليله بواسطة عامل محدد مع index_tuning.min_improvement_factor.

وبالمثل، يتم التحقق من جميع توصيات الفهرس للتأكد من أنها لا تقدم تراجعا على أي استعلام واحد في حمل العمل هذا لعامل محدد مع index_tuning.max_regression_factor.

إشعار

index_tuning.min_improvement_factor وكلاهما index_tuning.max_regression_factor يشير إلى تكلفة خطط الاستعلام، وليس إلى مدتها أو الموارد التي يستهلكونها أثناء التنفيذ.

يتم وصف جميع المعلمات المذكورة في الفقرات السابقة وقيمها الافتراضية والنطاقات الصالحة في خيارات التكوين.

يتبع البرنامج النصي الذي تم إنتاجه مع التوصية بإنشاء فهرس، هذا النمط:

CREATE INDEX CONCURRENTLY {indexName} ON {schema}.{table}({column_name}[, ...])

يتضمن عبارة CONCURRENTLY. لمزيد من المعلومات حول تأثيرات هذه العبارة، تفضل بزيارة وثائق PostgreSQL الرسمية ل CREATE INDEX.

يقوم الضبط التلقائي تلقائيا بتوليد أسماء الفهارس الموصى بها، والتي عادة ما تتكون من أسماء الأعمدة الرئيسية المختلفة المفصولة ب "_" (خطوط تحت) مع لاحقة ثابتة "_idx". إذا تجاوز الطول الإجمالي للاسم حدود PostgreSQL أو إذا كان يصادم مع أي علاقات موجودة، يكون الاسم مختلفا قليلا. يمكن اقتطاعه، ويمكن إلحاق رقم بنهاية الاسم.

حساب تأثير توصية CREATE INDEX

يتم قياس تأثير إنشاء توصية فهرس على IndexSize (ميغابايت) و QueryCostImprovement (النسبة المئوية).

IndexSize هي قيمة واحدة تمثل الحجم المقدر للفهرس، مع مراعاة العلاقة الأساسية الحالية للجدول وحجم الأعمدة المشار إليها بواسطة الفهرس الموصى به.

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

DROP INDEX وتوصيات REINDEX

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

  • قم بالإفلات إذا كان يعتبر مكرر للآخرين.
  • إسقاط إذا لم يتم استخدامه لفترة زمنية قابلة للتكوين.
  • أعد فهرسة الفهارس التي تم تمييزها كغير صالحة.

إسقاط الفهارس المكررة

توصيات لإسقاط الفهارس المكررة: أولا، تحديد الفهارس التي لها تكرارات.

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

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

لكي يعتبر الفهرسان مكررين، يجب أن يكونا:

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

إسقاط الفهارس غير المستخدمة

تحدد توصيات إسقاط الفهارس غير المستخدمة تلك الفهارس التي:

  • لا تستخدم لأيام على الأقل index_tuning.unused_min_period .
  • إظهار الحد الأدنى (المتوسط اليومي) لعدد DMLs index_tuning.unused_dml_per_table على الجدول حيث يتم إنشاء الفهرس.
  • إظهار الحد الأدنى (المتوسط اليومي) لعدد index_tuning.unused_reads_per_table القراءات على الجدول حيث يتم إنشاء الفهرس.

إعادة فهرسة غير صالحة

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

حساب تأثير توصية DROP INDEX

يتم قياس تأثير توصية مؤشر الإفلات على بعدين: الميزة (النسبة المئوية) و IndexSize (ميغابايت).

الميزة هي قيمة واحدة يمكن تجاهلها في الوقت الحالي.

IndexSize هي قيمة واحدة تمثل الحجم المقدر للفهرس، مع مراعاة العلاقة الأساسية الحالية للجدول وحجم الأعمدة المشار إليها بواسطة الفهرس الموصى به.

توصيات الجداول

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

توصيات الجداول ANALYSIS

توصيات لتحليل جدول تحدد تلك الجداول التي:

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

توصيات لطاولة VACUUM

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

تكوين الضبط الذاتي

يمكن تفعيل وتعطيل وتهيئة الضبط الذاتي من خلال مجموعة من المعايير التي تتحكم في سلوكه.

عند تفعيل الضبط الذاتي، يستيقظ بتردد محدد في index_tuning.analysis_interval معامل الخادم (افتراضيا يكون 720 دقيقة أو 12 ساعة) ويبدأ في تحليل عبء العمل المسجل من قبل مخزن الاستعلامات خلال تلك الفترة.

لاحظ أنه إذا قمت بتغيير قيمة index_tuning.analysis_interval، تتم ملاحظتها فقط بعد اكتمال التنفيذ المجدول التالي. فعلى سبيل المثال، إذا قمت بتمكين الضبط التلقائي في يوم ما الساعة 10:00 صباحا، لأن القيمة الافتراضية ل index_tuning.analysis_interval 720 دقيقة، فإن التنفيذ الأول مقرر أن يبدأ في الساعة 10:00 مساء في نفس اليوم. أي تغييرات تجريها على قيمة index_tuning.analysis_interval بين الساعة 10:00 صباحا و10:00 مساء لا تؤثر على الجدول الأولي. فقط عند اكتمال التشغيل المجدول، سيقرأ القيمة الحالية المعينة ل index_tuning.analysis_interval وسيجدول التنفيذ التالي وفقا لتلك القيمة.

الخيارات التالية متاحة لتكوين معلمات الضبط الذاتي:

المعلمة‬ وصف Default نطاق الوحدات
index_tuning.analysis_interval تعيين التردد الذي يتم فيه تشغيل كل جلسة عمل لتحسين الفهرس عند تعيين index_tuning.mode إلى REPORT. 720 60 - 10080 minutes
index_tuning.max_columns_per_index الحد الأقصى لعدد الأعمدة التي يمكن أن تكون جزءا من مفتاح الفهرس لأي فهرس موصى به. 2 1 - 10
index_tuning.max_index_count الحد الأقصى للفهرس الموصى به لكل قاعدة بيانات أثناء جلسة تحسين واحدة. 10 1 - 25
index_tuning.max_indexes_per_table الحد الأقصى لعدد الفهارس التي يمكن التوصية بها لكل جدول. 10 1 - 25
index_tuning.max_queries_per_database عدد أبطأ الاستعلامات لكل قاعدة بيانات يمكن التوصية بفهارسها. 25 5 - 100
index_tuning.max_regression_factor التراجع المقبول الذي يقدمه فهرس موصى به على أي من الاستعلامات التي تم تحليلها أثناء جلسة تحسين واحدة. 0.1 0.05 - 0.2 النسبه المئويه
index_tuning.max_total_size_factor الحد الأقصى للحجم الإجمالي، في النسبة المئوية لإجمالي مساحة القرص، التي يمكن لجميع الفهارس الموصى بها لأي قاعدة بيانات معينة استخدامها. 0.1 0 - 1 النسبه المئويه
index_tuning.min_improvement_factor تحسين التكلفة الذي يجب أن يوفره الفهرس الموصى به لواحد على الأقل من الاستعلامات التي تم تحليلها أثناء جلسة تحسين واحدة. 0.2 0 - 20 النسبه المئويه
index_tuning.mode تكوين تحسين الفهرس على أنه معطل (OFF) أو ممكن لإصدار توصية فقط. يتطلب تمكين مخزن الاستعلام عن طريق تعيين pg_qs.query_capture_mode إلى TOP أو ALL. OFF OFF, REPORT
index_tuning.unused_dml_per_table الحد الأدنى لعدد عمليات DML المتوسطة اليومية التي تؤثر على الجدول، لذلك يتم اعتبار الفهارس غير المستخدمة للانخفاض. 1000 0 - 9999999
index_tuning.unused_min_period الحد الأدنى لعدد الأيام التي لم يتم فيها استخدام الفهرس، استنادا إلى إحصائيات النظام، لذلك يتم اعتباره للانخفاض. 35 30 - 70
index_tuning.unused_reads_per_table الحد الأدنى لعدد عمليات القراءة اليومية المتوسطة التي تؤثر على الجدول بحيث يتم اعتبار الفهارس غير المستخدمة للانخفاض. 1000 0 - 9999999

إذا استخدمت أوامر az postgres flexible-server autonomous-tuning show-settings CLI ولعرض az postgres flexible-server autonomous-tuning set-settings أو تعديل أي من إعدادات الضبط الذاتي، فإن القيم المقبولة كوسيط للمعامل --name هي تلك المعروضة في عمود المعلمات في الجدول السابق، ولكن دون تضمين البادئة index_tuning..

المعلومات التي يتم إنتاجها بواسطة الضبط الذاتي

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

القيود وإمكانية الدعم

فيما يلي قائمة بالقيود ونطاق الدعم للضبط الذاتي.

الحذف التلقائي للتوصيات

يتم حذف التوصيات تلقائيا بعد 35 يوما من آخر مرة تم إنتاجها. لكي تعمل آلية الحذف التلقائي هذه، يجب تفعيل الضبط التلقائي.

التبعية على ملحق نقص الأداء

لكي ينتج الضبط الذاتي توصيات CREATE INDEX، يستخدم امتداد hypopg .

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

إذا لم يكن الامتداد موجودا أصلا أو أوقفناه لأنه تم إنشاؤه في pg_catalog المخطط، فإن الضبط التلقائي ينشئه تحت مخطط يسمى ms_temp_recommendations709253 وعندما تنتهي جلسة الضبط بنجاح، يسقط الامتداد ويزيل المخطط.

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

مستويات الحوسبة المدعومة ووحدات SKU

يدعم الضبط التلقائي على جميع المستويات المتاحة حاليا: Burstable، وGeneral Purpose، وMemory Optimized، وعلى أي وحدة SKU حوسبية مدعومة حاليا تحتوي على 4 vCores على الأقل.

الإصدارات المدعومة من PostgreSQL

يدعم الضبط التلقائي في الإصدارات الرئيسية12 أو أعلى من قاعدة بيانات Azure لنسخ الخوادم المرنة PostgreSQL.

استخدام search_path

يستهلك الضبط التلقائي القيمة التي بقيت في عمود search_pathquery_store.qs_view، بحيث عند تحليل كل استعلام، تكون نفس القيمة search_path التي تم ضبطها عند تنفيذ الاستعلام الأصلي هي القيمة التي تم ضبطها لتحليل التوصيات المحتملة.

الاستعلامات ذات المعلمات

يتم تحليل الاستعلامات ذات المعلمات التي تم إنشاؤها باستخدام PREPARE أو باستخدام بروتوكول الاستعلام الموسع وتحليلها لإنتاج توصيات الفهرس عليها.

لتحليل الاستعلامات المجمعة، يتطلب الضبط التلقائي تعيين pg_qs.parameters_capture_mode على capture_first_sample عندما يلتقط مخزن الاستعلام تنفيذ الاستعلام. يتطلب أيضا التقاط المعلمات بشكل صحيح بواسطة مخزن الاستعلام عند تنفيذ الاستعلام. بمعنى آخر، للاستعلام الذي يتم تحليله، إلى parameters_capture_status.

وضع القراءة فقط وقراءة النسخ المتماثلة

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

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

تقليص الحوسبة

إذا تم تفعيل الضبط التلقائي على خادم، وقمت بتقليل حجم حوسبة ذلك الخادم إلى أقل من الحد الأدنى المطلوب من vCores، تبقى الميزة مفعلة. نظرا لأن الميزة غير مدعومة على الخوادم التي بها أقل من 4 vCores، فإنها لا تعمل لتحليل حمل العمل وتقديم التوصيات، حتى لو index_tuning.mode تم تعيينها إلى ON عند تقليص الحساب. بينما لا يفي الخادم بالحد الأدنى من المتطلبات، لا يمكن الوصول إلى جميع index_tuning.* معلمات الخادم. كلما قمت بتكبير خادمك مرة أخرى إلى حساب يفي بالحد الأدنى من المتطلبات، index_tuning.mode يتم تكوينه بالقيمة التي تم ضبطها قبل أن تخفض إلى حساب لا يفي بالمتطلبات.

قابلية وصول عالية وقراءة النسخ المتماثلة

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

أسباب قد لا تنتج الضبط التلقائي توصيات لإنشاء فهرس لبعض الاستعلامات

فيما يلي قائمة بأنواع الاستعلامات التي لا يولد لها الضبط التلقائي توصيات إنشاء فهرس. استفسارات تي:

  • تواجه خطأ عندما يحاول محرك الضبط الذاتي الحصول على مخرجات EXPLAIN الخاصة به خلال مرحلة التحليل.
  • جداول مرجعية لا تحتوي على إحصائيات عن محتواها في كتالوج نظام pg_statistic. شغل ANALYSIS على تلك الجداول حتى يتمكن محرك الضبط من أخذ هذه الاستعلامات في الاعتبار مستقبلا.
  • اقتطاع نص الاستعلام في مخزن الاستعلام. يحدث ذلك عندما يتجاوز طول نص الاستعلام القيمة المهيأة في pg_qs.max_query_text_length.
  • الكائنات المرجعية التي تم إسقاطها أو إعادة تسميتها قبل إجراء التحليل. يمكن أن تظل هذه الاستعلامات صالحة من الناحية النحوية ، ولكنها ليست صالحة دلاليا.
  • الوصول إلى الجداول أو الفهارس المؤقتة في الجداول المؤقتة.
  • الوصول إلى طرق العرض أو طرق العرض الملموسة.
  • الوصول إلى الجداول المقسمة.
  • يتم تحديدها على أنها بيانات المنفعة. عبارات الأداة المساعدة أو أوامر الأداة المساعدة هي، في الأساس، أي عبارة لا تعتبر تحديدا أو إدراج أو تحديث أو حذف أو دمج، وأوامر معينة تحتوي على أحد هذه الأوامر.
  • ليست من بين أبطأ index_tuning.max_queries_per_database بالنسبة لقاعدة البيانات والفترة التي تم تحليلها.
  • تم تشغيلها في سياق قاعدة بيانات واحدة محددة، عندما لم يتم تحديد أي من هذه الاستعلامات على أنها الأبطأ على مستوى الخادم.