مراقبة قاعدة بيانات Azure لأداء MariaDB باستخدام Query Store
هام
قاعدة بيانات Azure ل MariaDB على مسار التقاعد. نوصي بشدة بالترحيل إلى قاعدة بيانات Azure ل MySQL. لمزيد من المعلومات حول الترحيل إلى قاعدة بيانات Azure ل MySQL، راجع ما يحدث لقاعدة بيانات Azure ل MariaDB؟.
ينطبق على: قاعدة بيانات Azure ل MariaDB 10.2
توفر ميزة Query Store في قاعدة بيانات Azure ل Mariadb طريقة لتتبع أداء الاستعلام بمرور الوقت. يعمل مخزن الاستعلام على تبسيط استكشاف أخطاء الأداء وإصلاحها من خلال مساعدتك في العثور بسرعة على أطول الاستعلامات قيد التشغيل وأكثرها استهلاكًا للموارد. يسجل Query Store تلقائياً محفوظات الاستعلامات والخطط وإحصائيات وقت التشغيل، ويحتفظ بها لمراجعتك. يفصل البيانات حسب نوافذ الوقت بحيث يمكنك مشاهدة أنماط استخدام قاعدة البيانات. يتم تخزين البيانات لجميع المستخدمين وقواعد البيانات والاستعلامات في قاعدة بيانات مخطط mysql في قاعدة بيانات Azure لمثيل MariaDB.
تتضمن السيناريوهات الشائعة لاستخدام Query Store ما يلي
يمكن استخدام مخزن الاستعلام في العديد من السيناريوهات، بما في ذلك ما يلي:
- الكشف عن الاستعلامات المتراجعة
- تحديد عدد المرات التي تم فيها تنفيذ استعلام في نافذة زمنية معينة
- مقارنة متوسط وقت تنفيذ استعلام عبر النوافذ الزمنية لرؤية دلتا كبيرة
تمكين مخزن الاستعلام
تعد Query Store ميزة اشتراك، لذلك فهي غير نشطة بشكل افتراضي على الخادم. يتم تمكين المتجر أو تعطيله بشكل عام لجميع قواعد البيانات على خادم معين ولا يمكن تشغيله أو إيقاف تشغيله لكل قاعدة بيانات.
تمكين Query Store باستخدام مدخل Microsoft Azure
- سجل الدخول إلى مدخل Microsoft Azure وحدد قاعدة بيانات Azure لخادم MariaDB.
- حدد Server Parameters الموجودة في قسم Settings من القائمة.
- ابحث عن المعلمة query_store_capture_mode.
- تعيين القيمة إلى ALL و Save.
لتمكين إحصائيات الانتظار في Query Store:
- ابحث عن المعلمة query_store_wait_sampling_capture_mode.
- تعيين القيمة إلى ALL و Save.
السماح لمدة تصل إلى 20 دقيقة للدفعة الأولى من البيانات على الاستمرار في قاعدة بيانات mysql.
المعلومات في Query Store
يحتوي Query Store على متجرين:
- تخزن إحصائيات وقت التشغيل استمرار معلومات إحصائيات تنفيذ الاستعلام.
- تخزن إحصائيات الانتظار معلومات إحصائيات الانتظار المستمرة.
لتقليل استخدام المساحة، يتم تجميع إحصائيات تنفيذ وقت التشغيل في مخزن إحصائيات وقت التشغيل عبر نافذة زمنية ثابتة وقابلة للتكوين. تكون المعلومات الموجودة في هذه المخازن مرئية عن طريق الاستعلام عن طرق عرض مخزن الاستعلام.
يقوم الاستعلام التالي بإرجاع معلومات حول الاستعلامات في Query Store:
SELECT * FROM mysql.query_store;
أو هذا الاستعلام عن إحصائيات الانتظار:
SELECT * FROM mysql.query_store_wait_stats;
البحث عن استعلامات الانتظار
إشعار
يجب عدم تمكين إحصائيات الانتظار أثناء ساعات ذروة حمل العمل أو تشغيلها إلى أجل غير مسمى لأحمال العمل الحساسة.
بالنسبة لأحمال العمل التي تعمل باستخدام وحدة المعالجة المركزية العالي أو على خوادم تم تكوينها باستخدام vCores أقل، يجب توخي الحذر عند تمكين إحصائيات الانتظار. لا ينبغي تشغيله إلى أجل غير مسمى.
تقوم أنواع أحداث الانتظار بدمج أحداث الانتظار المختلفة في مستودعات حسب التشابه. يوفر Query Store نوع حدث الانتظار واسم حدث انتظار محدد والاستعلام المعني. القدرة على ربط معلومات الانتظار هذه بإحصائيات وقت تشغيل الاستعلام يعني أنه يمكنك الحصول على فهم أعمق لما يساهم في خصائص أداء الاستعلام.
فيما يلي بعض الأمثلة حول كيفية الحصول على مزيد من الرؤى حول حمل العمل باستخدام إحصائيات الانتظار في Query Store:
المراقبة | الإجراء |
---|---|
انتظارات التأمين العالي | تحقق من نصوص الاستعلام للاستعلامات المتأثرة وحدد الكيانات المستهدفة. ابحث في Query Store عن استعلامات أخرى تقوم بتعديل نفس الكيان، والذي يتم تنفيذه بشكل متكرر و/أو له مدة عالية. بعد تحديد هذه الاستعلامات، ضع في اعتبارك تغيير منطق التطبيق لتحسين التزامن، أو استخدام مستوى عزل أقل تقييداً. |
ينتظر High Buffer IO | ابحث عن الاستعلامات التي بها عدد كبير من القراءات الفعلية في Query Store. إذا كانت تتطابق مع الاستعلامات مع فترات انتظار IO المرتفعة، ففكر في تقديم فهرس للكيان الأساسي، من أجل القيام بالبحث بدلاً من عمليات المسح. وهذا من شأنه أن يقلل من حمل IO للاستعلامات. تحقق من توصيات الأداء للخادم الخاص بك في المدخل لمعرفة ما إذا كانت هناك توصيات فهرس لهذا الخادم من شأنها تحسين الاستعلامات. |
انتظارات الذاكرة العالية | ابحث عن الاستعلامات الأكثر استهلاكاً للذاكرة في Query Store. ربما تؤخر هذه الاستعلامات المزيد من التقدم في الاستعلامات المتأثرة. تحقق من توصيات الأداء للخادم الخاص بك في المدخل لمعرفة ما إذا كانت هناك توصيات فهرس لهذا الخادم من شأنها تحسين الاستعلامات. |
خيارات الإعداد
عند تمكين Query Store، فإنه يحفظ البيانات في نوافذ تجميع مدتها 15 دقيقة، ما يصل إلى 500 استعلام مميز لكل نافذة.
تتوفر الخيارات التالية لتكوين معلمات Query Store.
المعلمة | الوصف | الإعداد الافتراضي | نطاق |
---|---|---|---|
query_store_capture_mode | قم بتشغيل ميزة مخزن الاستعلام ON/OFF استناداً إلى القيمة. إذا كان مخطط الأداء متوقفاً عن التشغيل، فإن تشغيل تخزين قائمة الانتظار يمكن مخطط الأداء ومجموعة فرعية من أدوات مخطط الأداء المطلوبة للميزة. | ALL | لا شيء، كل |
query_store_capture_interval | الفاصل الزمني لالتقاط مخزن الاستعلام بالدقائق. يسمح بتحديد الفاصل الزمني الذي يتم فيه تجميع مقاييس الاستعلام | 15 | 5 - 60 |
query_store_capture_utility_queries | تشغيل أو إيقاف التشغيل لالتقاط جميع استعلامات الأداة المساعدة التي يتم تنفيذها في النظام. | لا | نعم، لا |
query_store_retention_period_in_days | النافذة الزمنية بالأيام للاحتفاظ بالبيانات في مخزن الاستعلام. | 7 | 1 - 30 |
تنطبق الخيارات التالية على إحصائيات الانتظار على وجه التحديد.
المعلمة | الوصف | الإعداد الافتراضي | نطاق |
---|---|---|---|
query_store_wait_sampling_capture_mode | يسمح بتشغيل / إيقاف تشغيل إحصائيات الانتظار. | لا | لا شيء، كل |
query_store_wait_sampling_frequency | يغير تكرار أخذ عينات الانتظار في ثوان. من 5 إلى 300 ثانية. | 30 | 5-300 |
إشعار
حالياً query_store_capture_mode يحل محل هذا التكوين، ما يعني أنه يجب تمكين كل من query_store_capture_mode و query_store_wait_sampling_capture_mode إلى ALL حتى تعمل إحصائيات الانتظار. إذا تم إيقاف تشغيل query_store_capture_mode، فسيتم إيقاف تشغيل إحصائيات الانتظار أيضاً نظراً لأن إحصائيات الانتظار تستخدم performance_schema الممكنة، query_text التقاطها بواسطة مخزن الاستعلام.
استخدم مدخل Microsoft Azure للحصول على قيمة مختلفة لمعلمة أو تعيينها.
طرق العرض والوظائف
عرض Query Store وإدارته باستخدام طرق العرض والوظائف التالية. يمكن لأي شخص في الدور العام للامتياز المحدد استخدام طرق العرض هذه لعرض البيانات في متجر الاستعلام. تتوفر طرق العرض هذه فقط في قاعدة بيانات azure_sys.
يتم تسوية الاستعلامات من خلال النظر إلى بنيتها بعد إزالة القيم الحرفية والثوابت. إذا كان استعلاكما متطابقين باستثناء القيم الحرفية، فسيكون لديهما نفس التجزئة.
mysql.query_store
تقوم طريقة العرض هذه بإرجاع كافة البيانات في Query Store. يوجد صف واحد لكل معرف قاعدة بيانات مميز ومعرف المستخدم ومعرف الاستعلام.
الاسم | نوع البيانات | IS_NULLABLE | الوصف |
---|---|---|---|
schema_name |
varchar (64) | لا | اسم المخطط |
query_id |
bigint(20) | لا | معرف فريد تم إنشاؤه للاستعلام المحدد، إذا تم تنفيذ نفس الاستعلام في مخطط مختلف، فسيتم إنشاء معرف جديد |
timestamp_id |
الطابع الزمني | لا | الطابع الزمني الذي يتم فيه تنفيذ الاستعلام. يستند هذا إلى تكوين query_store_interval |
query_digest_text |
Longtext | لا | نص الاستعلام الذي تمت تسويته بعد إزالة كافة القيم الحرفية |
query_sample_text |
Longtext | لا | أول ظهور للاستعلام الفعلي مع القيم الحرفية |
query_digest_truncated |
بت | نعم | ما إذا كان قد تم اقتطاع نص الاستعلام أم لا. ستكون القيمة نعم إذا كان الاستعلام أطول من 1 كيلوبايت |
execution_count |
bigint(20) | لا | عدد المرات التي تم فيها تنفيذ الاستعلام لمعرف الطابع الزمني هذا / أثناء فترة الفاصل الزمني المكونة |
warning_count |
bigint(20) | لا | عدد التحذيرات التي تم إنشاؤها من خلال هذا الاستعلام الداخلي |
error_count |
bigint(20) | لا | عدد الأخطاء التي تم إنشاؤها في هذا الاستعلام أثناء الفاصل الزمني |
sum_timer_wait |
مزدوج | نعم | إجمالي وقت تنفيذ هذا الاستعلام أثناء الفاصل الزمني |
avg_timer_wait |
مزدوج | نعم | متوسط وقت التنفيذ لهذا الاستعلام أثناء الفترة الزمنية |
min_timer_wait |
مزدوج | نعم | الحد الأدنى لوقت التنفيذ لهذا الاستعلام |
max_timer_wait |
مزدوج | نعم | الحد الأقصى لوقت التنفيذ |
sum_lock_time |
bigint(20) | لا | إجمالي مقدار الوقت المستغرق لجميع عمليات التأمين لتنفيذ هذا الاستعلام أثناء هذه النافذة الزمنية |
sum_rows_affected |
bigint(20) | لا | عدد الصفوف المتأثرة بالاستعلام |
sum_rows_sent |
bigint(20) | لا | عدد الصفوف المرسلة إلى العميل |
sum_rows_examined |
bigint(20) | لا | عدد الصُفوف التي تم فحصها |
sum_select_full_join |
bigint(20) | لا | عدد الصلات الكاملة |
sum_select_scan |
bigint(20) | لا | عدد عمليات الفحص المحددة |
sum_sort_rows |
bigint(20) | لا | عدد الصفوف التي تم فرزها |
sum_no_index_used |
bigint(20) | لا | عدد المرات التي لم يستخدم فيها الاستعلام أي فهارس |
sum_no_good_index_used |
bigint(20) | لا | عدد المرات التي لم يستخدم فيها محرك تنفيذ الاستعلام أي فهارس جيدة |
sum_created_tmp_tables |
bigint(20) | لا | إجمالي عدد الجداول المؤقتة التي تم إنشاؤها |
sum_created_tmp_disk_tables |
bigint(20) | لا | إجمالي عدد الجداول المؤقتة التي تم إنشاؤها في القرص (ينشئ الإدخال/الإخراج) |
first_seen |
الطابع الزمني | لا | التكرار الأول (UTC) للاستعلام أثناء نافذة التجميع |
last_seen |
الطابع الزمني | لا | آخر تكرار (UTC) الاستعلام أثناء إطار التجميع هذا |
mysql.query_store_wait_stats
تقوم طريقة العرض هذه بإرجاع بيانات أحداث الانتظار في Query Store. يوجد صف واحد لكل معرف قاعدة بيانات مميز ومعرف المستخدم ومعرف الاستعلام والحدث.
الاسم | نوع البيانات | IS_NULLABLE | الوصف |
---|---|---|---|
interval_start |
الطابع الزمني | لا | بداية الفاصل الزمني (زيادة 15 دقيقة) |
interval_end |
الطابع الزمني | لا | نهاية الفاصل الزمني (زيادة 15 دقيقة) |
query_id |
bigint(20) | لا | معرف فريد تم إنشاؤه على الاستعلام الذي تمت تسويته (من مخزن الاستعلام) |
query_digest_id |
varchar (32) | لا | نص الاستعلام الذي تم تسويته بعد إزالة كافة القيم الحرفية (من مخزن الاستعلام) |
query_digest_text |
Longtext | لا | أول ظهور للاستعلام الفعلي مع القيم الحرفية (من مخزن الاستعلام) |
event_type |
varchar (32) | لا | فئة حدث الانتظار |
event_name |
varchar (128) | لا | اسم حدث الانتظار |
count_star |
bigint(20) | لا | عدد أحداث الانتظار التي تم أخذ عينات منها أثناء الفاصل الزمني للاستعلام |
sum_timer_wait_ms |
مزدوج | لا | إجمالي وقت الانتظار (بالمللي ثانية) من هذا الاستعلام أثناء الفاصل الزمني |
الوظائف
الاسم | الوصف |
---|---|
mysql.az_purge_querystore_data(TIMESTAMP) |
إزالة كافة بيانات مخزن الاستعلام قبل الطابع الزمني المحدد |
mysql.az_procedure_purge_querystore_event(TIMESTAMP) |
إزالة جميع بيانات حدث الانتظار قبل الطابع الزمني المحدد |
mysql.az_procedure_purge_recommendation(TIMESTAMP) |
إزالة التوصيات التي يكون انتهاء صلاحيتها قبل الطابع الزمني المحدد |
القيود والمشاكل المعروفة
- إذا كان خادم MariaDB يحتوي على المعلمة
default_transaction_read_only
قيد التشغيل، فلن يتمكن Query Store من التقاط البيانات. - يمكن مقاطعة وظيفة مخزن الاستعلام إذا واجهت استعلامات Unicode طويلة (>= 6000 بايت).
- فترة الاستبقاء لإحصائيات الانتظار هي 24 ساعة.
- تستخدم إحصائيات الانتظار نموذج ti التقاط جزء صغير من الأحداث. يمكن تعديل التردد باستخدام المعلمة
query_store_wait_sampling_frequency
. - مخزن الاستعلام غير معتمد للإصدار 10.3.
الخطوات التالية
- تعرف على المزيد حول Query Performance Insights