مراقبة الأداء باستخدام Query Store

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

هام

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

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

هام

لا تقم بتعديل قاعدة بيانات azure_sys أو مخططاتها. سيؤدي القيام بذلك إلى منع Query Store وميزات الأداء ذات الصلة من العمل بشكل صحيح.

تمكين Query Store

تعد Query Store ميزة اشتراك، لذلك فهي غير نشطة بشكل افتراضي على الخادم. يتم تمكين المتجر أو تعطيله بشكل عام لجميع قواعد البيانات على خادم معين ولا يمكن تشغيله أو إيقاف تشغيله لكل قاعدة بيانات.

تمكين Query Store باستخدام مدخل Microsoft Azure

  1. تسجيل الدخول إلى مدخل Microsoft Azure وتحديد قاعدة بيانات Azure لخادم PostgreSQL.
  2. حدد Server Parameters الموجودة في قسم Settings من القائمة.
  3. قم بإجراء بحث عن المعلمةpg_qs.query_capture_mode.
  4. تعيين القيمة إلى TOP و Save.

لتمكين إحصائيات الانتظار في Query Store:

  1. قم بإجراء بحث عن المعلمةpgms_wait_sampling.query_capture_mode.
  2. تعيين القيمة إلى ALL و Save.

بدلاً من ذلك يمكنك تعيين هذه المعلمات باستخدام Azure CLI.

az postgres server configuration set --name pg_qs.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value TOP
az postgres server configuration set --name pgms_wait_sampling.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value ALL

السماح للدفعة الأولى من البيانات بمدة تصل إلى 20 دقيقة للاستمرار في azure_sys database.

المعلومات في Query Store

يحتوي Query Store على متجرين:

  • مخزن إحصائيات وقت التشغيل لاستمرار معلومات إحصائيات تنفيذ الاستعلام.
  • مخزن إحصائيات الانتظار لمعلومات إحصائيات الانتظار المستمرة.

تتضمن السيناريوهات الشائعة لاستخدام Query Store ما يلي:

  • تحديد عدد المرات التي تم فيها تنفيذ استعلام في نافذة زمنية معينة
  • مقارنة متوسط وقت تنفيذ استعلام عبر النوافذ الزمنية لرؤية دلتا كبيرة
  • تحديد أطول استعلامات قيد التشغيل في الساعات X الماضية
  • تحديد أهم استعلامات N التي تنتظر الموارد
  • فهم طبيعة الانتظار لاستعلام معين

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

الوصول إلى معلومات Query Store

يتم تخزين بيانات Query Store في قاعدة بيانات azure_sys على خادم Postgres.

يقوم الاستعلام التالي بإرجاع معلومات حول الاستعلامات في Query Store:

SELECT * FROM query_store.qs_view; 

أو هذا الاستعلام عن إحصائيات الانتظار:

SELECT * FROM query_store.pgms_wait_sampling_view;

البحث عن استعلامات الانتظار

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

فيما يلي بعض الأمثلة حول كيفية الحصول على مزيد من الرؤى حول حمل العمل باستخدام إحصائيات الانتظار في Query Store:

المراقبة الإجراء
انتظارات التأمين العالي تحقق من نصوص الاستعلام للاستعلامات المتأثرة وحدد الكيانات المستهدفة. ابحث في Query Store عن استعلامات أخرى تقوم بتعديل نفس الكيان، والذي يتم تنفيذه بشكل متكرر و/أو له مدة عالية. بعد تحديد هذه الاستعلامات، ضع في اعتبارك تغيير منطق التطبيق لتحسين التزامن، أو استخدام مستوى عزل أقل تقييداً.
ينتظر High Buffer IO ابحث عن الاستعلامات التي بها عدد كبير من القراءات الفعلية في Query Store. إذا كانت تتطابق مع الاستعلامات مع فترات انتظار IO المرتفعة، ففكر في تقديم فهرس للكيان الأساسي، من أجل القيام بالبحث بدلاً من عمليات المسح. وهذا من شأنه أن يقلل من حمل IO للاستعلامات. تحقق من توصيات الأداء للخادم الخاص بك في المدخل لمعرفة ما إذا كانت هناك توصيات فهرس لهذا الخادم من شأنها تحسين الاستعلامات.
انتظارات الذاكرة العالية ابحث عن الاستعلامات الأكثر استهلاكاً للذاكرة في Query Store. ربما تؤخر هذه الاستعلامات المزيد من التقدم في الاستعلامات المتأثرة. تحقق من توصيات الأداء للخادم الخاص بك في المدخل لمعرفة ما إذا كانت هناك توصيات فهرس لهذا الخادم من شأنها تحسين الاستعلامات.

خيارات الإعداد

عند تمكين Query Store، فإنه يحفظ البيانات في نوافذ تجميع مدتها 15 دقيقة، ما يصل إلى 500 استعلام مميز لكل نافذة.

تتوفر الخيارات التالية لتكوين معلمات Query Store.

المعلمة‬ الوصف الإعداد الافتراضي نطاق
pg_qs.query_capture_mode تعيين العبارات التي يتم تعقبها. لا شيء لا شيء، أعلى، كل
pg_qs.max_query_text_length تعيين الحد الأقصى لطول الاستعلام الذي يمكن حفظه. سيتم اقتطاع استعلامات أطول. 6000 100 - 10K
pg_qs.retention_period_in_days تعيين فترة الاستبقاء. 7 1 - 30
pg_qs.track_utility تعيين ما إذا كان يتم تعقب أوامر الأداة المساعدة تشغيل تشغيل، إيقاف

تنطبق الخيارات التالية على إحصائيات الانتظار على وجه التحديد.

المعلمة‬ الوصف الإعداد الافتراضي نطاق
pgms_wait_sampling.query_capture_mode تعيين العبارات التي يتم تعقبها لإحصائيات الانتظار. لا شيء لا شيء، كل
Pgms_wait_sampling.history_period عين التردد، بالمللي ثانية، حيث يتم أخذ عينات من أحداث الانتظار. 100 1-600000

إشعار

pg_qs.query_capture_mode supersedes pgms_wait_sampling.query_capture_mode. إذا كان pg_qs.query_capture_mode بلا، فإن إعداد pgms_wait_sampling.query_capture_mode ليس له أي تأثير.

استخدم مدخل Azure أو Azure CLI للحصول على قيمة مختلفة لمعلمة أو تعيينها.

طرق العرض والوظائف

عرض Query Store وإدارته باستخدام طرق العرض والوظائف التالية. يمكن لأي شخص في دور PostgreSQL العام استخدام طرق العرض هذه لمشاهدة البيانات في Query Store. تتوفر طرق العرض هذه فقط في قاعدة بيانات azure_sys.

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

query_store.qs_view

تقوم طريقة العرض هذه بإرجاع بيانات نص الاستعلام في Query Store. يوجد صف واحد لكل query_text مميزة. لا تتوفر البيانات عبر قسم الأداء الذكي في المدخل أو واجهات برمجة التطبيقات أو CLI - ولكن يمكن العثور عليها عن طريق الاتصال بـ azure_sys والاستعلام عن "query_store.query_text_view".

الاسم النوع المراجع الوصف
runtime_stats_entry_id عدد صحيح كبير معرف من الجدول runtime_stats_entries
خاصية «user_id» معرف العنصر pg_authid.oid OID المستخدم الذي قام بتنفيذ العبارة
db_id معرف العنصر pg_database.oid OID لقاعدة البيانات التي تم تنفيذ العبارة فيها
query_id عدد صحيح كبير رمز التجزئة الداخلي، المحسوب من شجرة تحليل العبارة
query_sql_text Varchar(10000) نص بيان تمثيلي. يتم تجميع الاستعلامات المختلفة ذات البنية نفسها معاً؛ هذا النص هو نص الاستعلامات الأولى في نظام المجموعة.
plan_id عدد صحيح كبير معرف الخطة المقابلة لهذا الاستعلام، غير متوفر بعد
start_time الطابع الزمني يتم تجميع الاستعلامات حسب المستودعات الزمنية - الفترة الزمنية للمستودع هي 15 دقيقة بشكل افتراضي. هذا هو وقت البدء المطابق لمستودع الوقت لهذا الإدخال.
end_time الطابع الزمني وقت الانتهاء المطابق لمستودع الوقت لهذا الإدخال.
calls عدد صحيح كبير عدد المرات التي تم فيها تنفيذ الاستعلام
total_time الدقة المزدوجة مدة تنفيذ الاستعلام بالمللي ثانية
min_time الدقة المزدوجة الحد الأدنى لوقت تنفيذ الاستعلام، بالمللي ثانية
max_time الدقة المزدوجة الحد الأقصى لوقت تنفيذ الاستعلام، بالمللي ثانية
mean_time الدقة المزدوجة متوسط وقت تنفيذ الاستعلام بالمللي ثانية
stddev_time الدقة المزدوجة الانحراف المعياري لوقت تنفيذ الاستعلام، بالمللي ثانية
صفوف عدد صحيح كبير إجمالي عدد الصفوف التي تم استردادها أو المتأثرة بالجملة
shared_blks_hit عدد صحيح كبير إجمالي عدد مرات الوصول إلى ذاكرة التخزين المؤقت للكتلة المشتركة بواسطة العبارة
shared_blks_read عدد صحيح كبير إجمالي عدد الكتل المشتركة التي تقرأها العبارة
shared_blks_dirtied عدد صحيح كبير إجمالي عدد الكتل المشتركة التي تقرأها العبارة
shared_blks_written عدد صحيح كبير إجمالي عدد الكتل المشتركة التي تقرأها العبارة
local_blks_hit عدد صحيح كبير إجمالي عدد مرات الوصول إلى ذاكرة التخزين المؤقت للكتلة المشتركة بواسطة العبارة
local_blks_read عدد صحيح كبير إجمالي عدد الكتل المشتركة التي تقرأها العبارة
local_blks_dirtied عدد صحيح كبير إجمالي عدد الكتل المشتركة التي تقرأها العبارة
local_blks_written عدد صحيح كبير إجمالي عدد الكتل المشتركة التي تقرأها العبارة
temp_blks_read عدد صحيح كبير إجمالي عدد الكتل المشتركة التي تقرأها العبارة
temp_blks_written عدد صحيح كبير إجمالي عدد الكتل المشتركة التي تقرأها العبارة
blk_read_time الدقة المزدوجة إجمالي الوقت الذي تقضيه العبارة في قراءة الكتل، بالمللي ثانية (إذا تم تمكين track_io_timing، وإلا فلن يكون هناك أي شيء)
blk_write_time الدقة المزدوجة إجمالي الوقت الذي تقضيه العبارة في قراءة الكتل، بالمللي ثانية (إذا تم تمكين track_io_timing، وإلا فلن يكون هناك أي شيء)

query_store.query_texts_view

تقوم طريقة العرض هذه بإرجاع بيانات نص الاستعلام في Query Store. يوجد صف واحد لكل query_text مميزة.

الاسم النوع الوصف
query_text_id عدد صحيح كبير معرف الجدول query_texts
query_sql_text Varchar(10000) نص بيان تمثيلي. يتم تجميع الاستعلامات المختلفة ذات البنية نفسها معاً؛ هذا النص هو نص الاستعلامات الأولى في نظام المجموعة.

query_store.pgms_wait_sampling_view

تقوم طريقة العرض هذه بإرجاع بيانات نص الاستعلام في Query Store. يوجد صف واحد لكل query_text مميزة. لا تتوفر البيانات عبر قسم الأداء الذكي في المدخل أو واجهات برمجة التطبيقات أو CLI - ولكن يمكن العثور عليها عن طريق الاتصال بـ azure_sys والاستعلام عن "query_store.query_text_view".

الاسم النوع المراجع الوصف
خاصية «user_id» معرف العنصر pg_authid.oid OID المستخدم الذي قام بتنفيذ العبارة
db_id معرف العنصر pg_database.oid OID لقاعدة البيانات التي تم تنفيذ العبارة فيها
query_id عدد صحيح كبير رمز التجزئة الداخلي، المحسوب من شجرة تحليل العبارة
event_type النص نوع الحدث الذي تنتظره الواجهة الخلفية
event النص اسم حدث الانتظار إذا كانت الواجهة الخلفية قيد الانتظار حالياً
calls رقم صحيح عدد نفس الحدث الذي تم التقاطه

الوظائف

إرجاع Query_store.qs_reset () باطل

qs_reset يتجاهل جميع الإحصائيات التي تم جمعها حتى الآن بواسطة Query Store. يمكن تنفيذ هذه الدالة فقط بواسطة دور مسؤول الخادم.

إرجاع Query_store.staging_data_reset () باطل

staging_data_reset يتجاهل كافة الإحصائيات التي تم جمعها في الذاكرة بواسطة Query Store (أي البيانات الموجودة في الذاكرة التي لم يتم مسحها بعد إلى قاعدة البيانات). يمكن تنفيذ هذه الدالة فقط بواسطة دور مسؤول الخادم.

Azure Monitor

تم تكامل قاعدة بيانات Azure لـ PostgreSQL مع إعدادات تشخيص Azure Monitor. تسمح لك إعدادات التشخيص بإرسال سجلات Postgres بتنسيق JSON إلى Azure Monitor Logs للتحليلات والتنبيه ومراكز الأحداث للدفق وتخزين Azure للأرشفة.

هام

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

تكوين إعدادات التشخيص

يمكنك تمكين إعدادات التشخيص لخادم Postgres باستخدام مدخل Azure وCLI وواجهة برمجة تطبيقات REST وPowerShell. فئات السجل المراد تكوينها هي QueryStoreRuntimeStatistics و QueryStoreWaitStatistics.

لتمكين سجلات الموارد باستخدام مدخل Microsoft Azure:

  1. في المدخل، انتقل إلى الإعدادات التشخيص في قائمة التنقل الخاصة بخادم Postgres.
  2. ثم حدد إضافة إعداد تشخيص.
  3. قم بتسمية هذا الإعداد.
  4. حدد نقطة النهاية المفضلة لديك (حساب التخزين، مركز الأحداث، تحليلات السجل).
  5. حدد أنواع السجلات QueryStoreRuntimeStatistics و QueryStoreWaitStatistics.
  6. حفظ الإعداد الخاص بك.

لتمكين سجلات الموارد باستخدام PowerShell أو CLI أو واجهة برمجة تطبيقات REST، قم بزيارة مقالة إعدادات التشخيص.

تنسيق سجل JSON

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

QueryStoreRuntimeStatistics

ميدان الوصف
TimeGenerated [توقيت عالمي متفق عليه] الطابع الزمني عندما تم تسجيل السجل في UTC
ResourceId URI لمورد Azure لخادم Postgres
الفئة QueryStoreRuntimeStatistics
OperationName QueryStoreRuntimeStatisticsEvent
LogicalServerName_s اسم خادم Postgres
runtime_stats_entry_id_s معرف من الجدول runtime_stats_entries
user_id_s OID المستخدم الذي قام بتنفيذ العبارة
db_id_s OID لقاعدة البيانات التي تم تنفيذ العبارة فيها
query_id_s رمز التجزئة الداخلي، المحسوب من شجرة تحليل العبارة
end_time_s وقت الانتهاء المطابق لمستودع الوقت لهذا الإدخال
calls_s عدد المرات التي تم فيها تنفيذ الاستعلام
total_time_s مدة تنفيذ الاستعلام بالمللي ثانية
min_time_s الحد الأدنى لوقت تنفيذ الاستعلام، بالمللي ثانية
max_time_s الحد الأقصى لوقت تنفيذ الاستعلام، بالمللي ثانية
mean_time_s متوسط وقت تنفيذ الاستعلام بالمللي ثانية
ResourceGroup مجموعة الموارد
SubscriptionId. معرف اشتراكك
موفر المورد Microsoft.DBForPostgreSQL
Resource اسم خادم Postgres
ResourceType Servers

QueryStoreRuntimeStatistics

ميدان الوصف
TimeGenerated [توقيت عالمي متفق عليه] الطابع الزمني عندما تم تسجيل السجل في UTC
ResourceId URI لمورد Azure لخادم Postgres
الفئة QueryStoreWaitStatistics
OperationName QueryStoreWaitEvent
user_id_s OID المستخدم الذي قام بتنفيذ العبارة
db_id_s OID لقاعدة البيانات التي تم تنفيذ العبارة فيها
query_id_s رمز التجزئة الداخلي للاستعلام
calls_s عدد نفس الحدث الذي تم التقاطه
event_type_s نوع الحدث الذي تنتظره الواجهة الخلفية
event_s اسم حدث الانتظار إذا كانت الواجهة الخلفية قيد الانتظار حالياً
start_time_t وقت بدء الحدث
end_time_s وقت انتهاء الحدث
LogicalServerName_s اسم خادم Postgres
ResourceGroup مجموعة الموارد
SubscriptionId. معرف اشتراكك
موفر المورد Microsoft.DBForPostgreSQL
Resource اسم خادم Postgres
ResourceType Servers

القيود والمشاكل المعروفة

  • إذا كان خادم PostgreSQL يحتوي على المعلمة default_transaction_read_only عليها، فلن يتمكن Query Store من تسجيل البيانات.
  • يمكن مقاطعة وظيفة مخزن الاستعلام إذا واجهت استعلامات Unicode طويلة (>= 6000 بايت).
  • تقوم قراءة النسخ المتماثلة بنسخ بيانات Query Store نسخاً متماثلاً من الخادم الأساسي. وهذا يعني أن مخزن استعلام النسخة المتماثلة للقراءة لا يوفر إحصائيات حول الاستعلامات التي يتم تشغيلها على النسخة المتماثلة للقراءة.

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