مراقبة الأداء باستخدام 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
- تسجيل الدخول إلى مدخل Microsoft Azure وتحديد قاعدة بيانات Azure لخادم PostgreSQL.
- حدد Server Parameters الموجودة في قسم Settings من القائمة.
- قم بإجراء بحث عن المعلمة
pg_qs.query_capture_mode
. - تعيين القيمة إلى
TOP
و Save.
لتمكين إحصائيات الانتظار في Query Store:
- قم بإجراء بحث عن المعلمة
pgms_wait_sampling.query_capture_mode
. - تعيين القيمة إلى
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:
- في المدخل، انتقل إلى الإعدادات التشخيص في قائمة التنقل الخاصة بخادم Postgres.
- ثم حدد إضافة إعداد تشخيص.
- قم بتسمية هذا الإعداد.
- حدد نقطة النهاية المفضلة لديك (حساب التخزين، مركز الأحداث، تحليلات السجل).
- حدد أنواع السجلات QueryStoreRuntimeStatistics و QueryStoreWaitStatistics.
- حفظ الإعداد الخاص بك.
لتمكين سجلات الموارد باستخدام 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 نسخاً متماثلاً من الخادم الأساسي. وهذا يعني أن مخزن استعلام النسخة المتماثلة للقراءة لا يوفر إحصائيات حول الاستعلامات التي يتم تشغيلها على النسخة المتماثلة للقراءة.
الخطوات التالية
- تعرف على المزيد حول السيناريوهات التي يمكن أن يكون فيها Query Store مفيدا بشكل خاص.
- تعرف على المزيد حول أفضل الممارسات لاستخدام Query Store.
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ