سجلات الاستعلام البطيئة في قاعدة بيانات Azure لـ MySQL

ينطبق على: قاعدة بيانات Azure ل MySQL - خادم واحد

هام

قاعدة بيانات Azure لخادم MySQL الفردي على مسار الإيقاف. نوصي بشدة بالترقية إلى قاعدة بيانات Azure لخادم MySQL المرن. لمزيد من المعلومات حول الترحيل إلى خادم Azure Database for MySQL المرن، راجع ما الذي يحدث لقاعدة بيانات Azure لخادم MySQL الفردي؟

في قاعدة بيانات Azure Database لـ MySQL، يتوفر سجل الاستعلام البطيء للمستخدمين. الوصول إلى سجل المعاملات غير مَدعوم. يمكن استخدام سجل الاستعلام البطيء لتحديد اختناقات الأداء لاستكشاف الأخطاء وإصلاحها.

للمزيد من المعلومات حول سجل الاستعلام البطيء MySQL، راجع قسم سجل الاستعلام البطيء للدليل المرجعي MySQL.

عند تَمكين Query Store على الخادم، قد ترى الاستعلامات مثل "CALL mysql.az_procedure_collect_wait_stats (900, 30);" التي تم تسجيلها في سجلات الاستعلام البطيئة. من المُتوقع هذا السلوك حيث تجمع ميزة Query Store إحصائيات حول استعلاماتك.

تكوين تـسجيل الاستعلام البطيء

يتم تعطيل سجل الاستعلام البطيء بشكل افتراضي. لتمكينه، قم بتعيين slow_query_log إلى «تشغيل». يُمكن تمكين هذا باستخدام مدخل Microsoft Azure أو Azure CLI.

تتضمن المعلمات الأخرى التي يمكنك ضبطها ما يلي:

  • long_query_time: إذا استغرق الاستعلام وقتا أطول من long_query_time (بالثواني) يتم تسجيل هذا الاستعلام. المهلة الافتراضية هي 10 ثواني.
  • log_slow_admin_statements: إذا كان «التشغيل» يتضمن عبارات إدارية مثل ALTER_TABLE ANALYZE_TABLE في العبارات المكتوبة إلى slow_query_log.
  • log_queries_not_using_indexes: يُحدد ما إذا كان يتم تسجيل الاستعلامات التي لا تستخدم الفهارس إلى slow_query_log
  • log_throttle_queries_not_using_indexes: تُحدد هذه المعلمة عدد الاستعلامات غير الفهرسة التي يمكن كتابتها في سجل الاستعلام البطيء. تَسري هذه المعلمة عند تعيين log_queries_not_using_indexes إلى ON.
  • log_output: إذا كان "ملف"، يسمح بكتابة سجل الاستعلام البطيء إلى كل من تخزين الخادم المَحلي وإلى سجلات تشخيص Azure Monitor. إذا كان "بلا"، فسوف يتم كتابة سجل الاستعلام البطيء فقط إلى سجلات تشخيص Azure Monitor.

هام

إذا لم تتم فهرسة الجداول الخاصة بك، فقد يؤثر تعيين log_queries_not_using_indexes المعلمتين و log_throttle_queries_not_using_indexes على ON على أداء MySQL نظرا لأن جميع الاستعلامات التي تعمل مُقابل هذه الجداول غير المفهرسة ستتم كتابتها إلى سجل الاستعلام البطيء.

إذا كنت تخطط لتسجيل الاستعلامات البطيئة لفترة طويلة من الوقت، فمن المفضل تعيين log_output إلى "بلا". إذا تم تعيينها إلى "ملف"، تتم كتابة هذه السجلات إلى تخزين الخادم المحلي ويُمكن أن تؤثر على أداء MySQL.

راجع وثائق سجل الاستعلام البطيء MySQL للحُصول على الأوصاف الكاملة لمعلمات سجل الاستعلام البطيئة.

الوصول إلى سِجلات الاستعلام البطيئة

هناك خياران للوصول إلى سجلات الاستعلام البطيئة في قاعدة بيانات Azure لـ MySQL: تخزين الخادم المحلي أو سجلات تشخيص Azure Monitor. يتم تعيين هذا باستخدام المعلمة log_output.

بالنسبة لتخزين الخادم المحلي، يُمكنك سرد سجلات الاستعلام البطيئة وتنزيلها باستخدام مدخل Microsoft Azure أو Azure CLI. في مَدخل Microsoft Azure، انتقل إلى الخادم الخاص بك في مدخل Microsoft Azure. ضمن عنوان المراقبة، حدد صفحة سجلات الخادم. للمزيد من المعلومات حول Azure CLI، راجع تكوين سجلات الاستعلام البطيئة والوصول إليها باستخدام Azure CLI.

تسمح لك سجلات تشخيص Azure Monitor بتوجيه سجلات الاستعلام البطيئة إلى سجلات Azure Monitor (تحليلات السجل) أو تخزين Azure أو مَراكز الأحداث. انظر أدناه لمزيد من المعلومات.

استبقاء سجل تخزين الخادم المَحلي

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

يتم تدوير السجلات كل 24 ساعة أو 7 GB، أيهما يأتي أولا.

إشعار

لا يَنطبق استبقاء السجل أعلاه على السجلات التي يتم توصيلها باستخدام سجلات تشخيص Azure Monitor. يُمكنك تغيير فترة الاستبقاء لمتلقي البيانات التي يتم إصدارها إلى (على سبيل المثال، Azure Storage).

سجلات التشخيص

تم دَمج Azure Database for MySQL مع سجلات تشخيص Azure Monitor. بمُجرد تمكين سجلات الاستعلام البطيئة على خادم MySQL، يُمكنك اختيار إرسالها إلى سجلات Azure Monitor أو مراكز الأحداث أو Azure Storage. لمَعرفة المزيد حول كيفية تمكين سجلات التشخيص، راجع قسم كيفية وثائق سجلات التشخيص.

إشعار

حسابات التخزين Premium غير مَدعومة إذا قمت بإرسال السجلات إلى تخزين Azure عبر التشخيصات والإعدادات

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

الخاصية الوصف
TenantId معرف المستأجر
SourceSystem Azure
TimeGenerated [توقيت عالمي متفق عليه] الطابع الزمني عندما تم تسجيل السجل في UTC
Type نوع الـسجل. دائم AzureDiagnostics
SubscriptionId معرّف فريد للاشتراك الذي ينتمي إليه الخادم
ResourceGroup اسم مجموعة الموارد التي ينتمي إليها الخادم
ResourceProvider اسم موفر المورد. دائم MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId URI للمورد
Resource اسم الـخادم
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s اسم الـخادم
start_time_t [توقيت عالمي متفق عليه] الوقت الذي بدأ فيه الاستعلام
query_time_s إجمالي الوقت بالثواني التي استغرقها الاستعلام لتنفيذها
lock_time_s إجمالي الوقت بالثواني التي تم فيها تأمين الاستعلام
user_host_s اسم مستخدم
rows_sent_d عَدد الصفوف المرسلة
rows_examined_s عدد الصُفوف التي تم فحصها
last_insert_id_s last_insert_id
insert_id_s إدراج معرّف
sql_text_s الاستعلام الكـامل
server_id_s معرّف الخادم
thread_id_s معرّف مؤشر الترابط
\_ResourceId URI للمورد

إشعار

بالنسبة إلى sql_text، سوف يتم اقتطاع السجل إذا تجاوز 2048 حرفا.

تحليل السجلات في Azure Monitor Logs

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

  • استعلامات أطول من 10 ثواني على خادم معين

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | where query_time_d > 10
    
  • سرد أكبر 5 استعلامات أطول على خادم مُعين

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | order by query_time_d desc
    | take 5
    
  • تلخيص الاستعلامات البطيئة حَسب الحد الأدنى والحد الأقصى والمتوسط ووقت استعلام الانحراف المعياري على خادم معين

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | summarize count(), min(query_time_d), max(query_time_d), avg(query_time_d), stdev(query_time_d), percentile(query_time_d, 95) by LogicalServerName_s
    
  • الرسم البياني لتوزيع الاستعلام البطيء على خادم معين

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m)
    | render timechart
    
  • عرض الاستعلامات أطول من 10 ثواني عبر جميع خوادم MySQL مع تمكين سجلات التشخيص

    AzureDiagnostics
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | where query_time_d > 10
    

الخطوات التالية