مشاركة عبر


استكشاف أخطاء الاستخدام العالي لوحدة المعالجة المركزية (CPU) في قاعدة بيانات Azure ل PostgreSQL وإصلاحها

توضح هذه المقالة كيفية تحديد السبب الجذري لارتفاع استخدام وحدة المعالجة المركزية. كما يوفر إجراءات علاجية ممكنة للتحكم في استخدام وحدة المعالجة المركزية عند استخدام قاعدة بيانات Azure ل PostgreSQL.

في هذه المقالة، يمكنك أن تتعلم:

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

أدلة استكشاف الأخطاء وإصلاحها

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

لمعرفة كيفية إعداد دلائل استكشاف الأخطاء وإصلاحها واستخدامها، اتبع إرشادات استكشاف أخطاء الإعداد وإصلاحها.

أدوات لتحديد الاستخدام العالي لـ CPU

ضع في اعتبارك استخدام قائمة الأدوات التالية لتحديد الاستخدام العالي لوحدة المعالجة المركزية.

مقاييس Azure

تعد مقاييس Azure نقطة بداية جيدة للتحقق من استخدام وحدة المعالجة المركزية لفترة معينة. توفر المقاييس معلومات حول الموارد المستخدمة خلال الفترة التي يكون فيها استخدام وحدة المعالجة المركزية مرتفعا. قارن الرسوم البيانية لكتابة IOPs وقراءة IOPs وقراءة وحدات البايت/الثانية لمعدل النقل وكتابة وحدات البايت/الثانية مع نسبة وحدة المعالجة المركزية، لمعرفة الأوقات التي تسبب فيها حمل العمل في ارتفاع وحدة المعالجة المركزية.

للمراقبة الاستباقية، يمكنك تكوين التنبيهات على المقاييس. للحصول على إرشادات خطوة بخطوة، راجع Azure Metrics.

مخزن الاستعلام

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

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

لمزيد من المعلومات، راجع مخزن الاستعلامات.

pg_stat_statements

pg_stat_statements يساعد الملحق في تحديد الاستعلامات التي تستهلك وقتا على الخادم. لمزيد من المعلومات حول هذا الملحق، راجع وثائقه.

متوسط أو معدل وقت التنفيذ

بالنسبة لإصدارات Postgres 13 والإصدارات الأحدث، استخدم العبارة التالية لعرض أفضل خمس عبارات SQL حسب متوسط أو معدل وقت التنفيذ:

SELECT userid::regrole, dbid, query, mean_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 5;

إجمالي وقت التنفيذ

نفذ العبارات التالية لعرض أعلى خمس عبارات SQL حسب إجمالي وقت التنفيذ.

بالنسبة لإصدارات Postgres 13 والإصدارات الأحدث، استخدم العبارة التالية لعرض أفضل خمس عبارات SQL حسب إجمالي وقت التنفيذ:

SELECT userid::regrole, dbid, query
FROM pg_stat_statements
ORDER BY total_exec_time
DESC LIMIT 5;

تحديد الأسباب الجذرية

إذا كانت مستويات استهلاك وحدة المعالجة المركزية عالية بشكل عام، فقد تكون تلك المستويات التالية أسبابا جذرية محتملة:

العمليات طويلة الأمد

يمكن أن تستهلك العمليات طويلة الأمد موارد CPU التي يمكن أن تؤدي إلى ارتفاع استخدام CPU.

يساعد الاستعلام التالي في تحديد الاتصالات التي تعمل لأطول وقت:

SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() AND state IN ('idle in transaction', 'active')
ORDER BY duration DESC;

إجمالي عدد الاتصالات وعدد الاتصالات حسب الحالة

قد يؤدي عدد كبير من الاتصالات بقاعدة البيانات أيضا إلى زيادة استخدام وحدة المعالجة المركزية والذاكرة.

يوفر الاستعلام التالي معلومات حول عدد الاتصالات حسب الحالة:

SELECT state, count(*)
FROM  pg_stat_activity
WHERE pid <> pg_backend_pid()
GROUP BY state
ORDER BY state ASC;

حل الاستخدام المرتفع لـ CPU

استخدم EXPLAIN ANALYZE، وفكر في استخدام تجمع اتصال PgBouncer المضمن، وإنهاء المعاملات طويلة الأمد لحل الاستخدام العالي لوحدة المعالجة المركزية.

استخدام EXPLAIN ANALYZE

بمجرد معرفة الاستعلامات التي تستهلك المزيد من وحدة المعالجة المركزية، استخدم EXPLAIN ANALYZE لمزيد من التحقيق وضبطها.

لمزيد من المعلومات حول الأمر EXPLAIN ANALYZE، راجع وثائقه.

PgBouncer، تجمع اتصال مضمن

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

لمزيد من المعلومات حول PgBouncer، راجع تجمع الاتصال وأفضل ممارسات معالجة الاتصال باستخدام PostgreSQL

تقدم قاعدة بيانات Azure ل PostgreSQL PgBouncer كحل مضمن لتجميع الاتصالات. لمزيد من المعلومات، راجع PgBouncer.

إنهاء المعاملات طويلة الأمد

يمكنك التفكير في إنهاء معاملة طويلة الأمد كخيار.

لإنهاء PID لجلسة العمل، تحتاج إلى العثور على PID الخاص به باستخدام الاستعلام التالي:

SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() AND state IN ('idle in transaction', 'active')
ORDER BY duration DESC;

يمكنك أيضا التصفية حسب خصائص أخرى مثل usename (اسم المستخدم) datname و(اسم قاعدة البيانات) وما إلى ذلك.

بمجرد حصولك على PID الخاص بجلسة العمل، يمكنك إنهائه باستخدام الاستعلام التالي:

SELECT pg_terminate_backend(pid);

مراقبة الفراغ وإحصائيات الجدول

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

يساعد الاستعلام التالي على تحديد الجداول التي تحتاج إلى تفريغ:

SELECT schemaname,relname,n_dead_tup,n_live_tup,last_vacuum,last_analyze, last_autovacuum,last_autoanalyze
FROM pg_stat_all_tables
WHERE n_live_tup > 0;

تعطي الأعمدة last_autovacuum وlast_autoanalyze التاريخ والوقت الذي تم فيه آخر تفريغ للجدول أو تحليله تلقائيًا. إذا لم يتم تفريغ الجداول بشكل منتظم، فاتخذ خطوات لضبط الإخلاء التلقائي.

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

سيكون الحل قصير المدى هو إجراء تحليل تفريغ يدوي للجداول التي تظهر فيها الاستعلامات البطيئة:

VACUUM ANALYZE <table>;