راقب قاعدة بيانات Azure لأداء MySQL باستخدام Query Store
ينطبق على: قاعدة بيانات Azure ل MySQL - خادم واحد
هام
قاعدة بيانات Azure لخادم MySQL الفردي على مسار الإيقاف. نوصي بشدة بالترقية إلى قاعدة بيانات Azure لخادم MySQL المرن. لمزيد من المعلومات حول الترحيل إلى خادم Azure Database for MySQL المرن، راجع ما الذي يحدث لقاعدة بيانات Azure لخادم MySQL الفردي؟
يُطبق على: قاعدة البيانات الخاصة بـ Azure لـ MySQL 5.7، 8.0
توفر ميزة Query Store في قاعدة بيانات Azure لـ MySQL طريقة لتتبع أداء الاستعلام بمرور الوقت. يعمل مخزن الاستعلام على تبسيط استكشاف أخطاء الأداء وإصلاحها من خلال مساعدتك في العثور بسرعة على أطول الاستعلامات قيد التشغيل وأكثرها استهلاكًا للموارد. يسجل Query Store تلقائياً محفوظات الاستعلامات والخطط وإحصائيات وقت التشغيل، ويحتفظ بها لمراجعتك. يفصل البيانات حسب نوافذ الوقت بحيث يمكنك مشاهدة أنماط استخدام قاعدة البيانات. يتم تخزين البيانات لكافة المستخدمين وقواعد البيانات والاستعلامات في قاعدة بيانات مخطط mysql في قاعدة بيانات Azure لمثيل MySQL.
تتضمن السيناريوهات الشائعة لاستخدام Query Store ما يلي
يمكن استخدام مخزن الاستعلام في عدد من السيناريوهات، بما في ذلك ما يلي:
- الكشف عن الاستعلامات المتراجعة
- تحديد عدد المرات التي تم فيها تنفيذ استعلام في نافذة زمنية معينة
- مقارنة متوسط وقت تنفيذ استعلام عبر النوافذ الزمنية لرؤية دلتا كبيرة
تمكين Query Store
تعد Query Store ميزة اشتراك، لذلك فهي غير نشطة بشكل افتراضي على الخادم. يتم تمكين المتجر أو تعطيله بشكل عام لجميع قواعد البيانات على خادم معين ولا يمكن تشغيله أو إيقاف تشغيله لكل قاعدة بيانات.
تمكين Query Store باستخدام مدخل Microsoft Azure
- تسجيل الدخول إلى مدخل Microsoft Azure وتحديد قاعدة بيانات Azure لخادم MySQL.
- حدد 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 التقاطها بواسطة مخزن الاستعلام.
استخدم مدخل Azure أو Azure CLI للحصول على قيمة مختلفة لمعلمة أو تعيينها.
طرق العرض والوظائف
عرض 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) |
إزالة التوصيات التي يكون انتهاء صلاحيتها قبل الطابع الزمني المحدد |
القيود والمشاكل المعروفة
- إذا كان خادم MySQL يحتوي على المعلمة
read_only
، فلن يتمكن Query Store من التقاط البيانات. - يمكن مقاطعة وظيفة مخزن الاستعلام إذا واجهت استعلامات Unicode طويلة (>= 6000 بايت).
- فترة الاستبقاء لإحصائيات الانتظار هي 24 ساعة.
- تستخدم إحصائيات الانتظار عينة لالتقاط جزء صغير من الأحداث. يمكن تعديل التردد باستخدام المعلمة
query_store_wait_sampling_frequency
.
الخطوات التالية
- تعرف على المزيد حول Query Performance Insights