كيفية قياس أداء PostgreSQL لأداء مُثلى

مع تزايد تبني PostgreSQL، غالبًا ما يحتاج مسؤولو قواعد البيانات (DBAs) والمطورون إلى تقييم أدائها لضمان تشغيل تطبيقاتهم بكفاءة تحت أعباء عمل مختلفة. قياس الأداء هو عملية حيوية تقيس كيفية تعامل PostgreSQL مع الأحمال المتغيرة، مما يساعد في تحديد الاختناقات ومناطق التحسين. ي exploي هذا المقال الأدوات، والمقاييس،سيناريوهات الاختبار لمساعدتك في قياس أداء PostgreSQL كمحترف.

لماذا نقيس أداء PostgreSQL؟

قياس الأداء يتيح لك:

  1. قياس معدل الإنتاجية والتباطؤ لقاعدة بياناتك تحت أعباء عمل محددة.
  2. تحديد الاختناقات في الأجهزة أو الإعدادات.
  3. مقارنة تأثير التحسينات مثل تغييرات الفهارس أو إعادة كتابة الاستعلامات.
  4. محاكاة سيناريوهات واقعية مثل نشاط المستخدم المتزامن العالي أو كتابة بيانات جماعية.

المقاييس الرئيسية لتتبعها

أثناء قياس الأداء PostgreSQL، ركز على هذه المقاييس:

  • TPS (الصفقات لكل ثانية): يقيس عدد الصفقات التي تكتملها قاعدة البيانات في ثانية واحدة.
  • IOPS (عمليات الإدخال/الإخراج لكل ثانية): يتتبع نشاط القرص.
  • التباطؤ: يقيس الوقت المستغرق في تنفيذ الاستعلامات، مما يؤثر على تجربة المستخدم.
  • استخدام الموارد: يتتبع استخدام وحدة المعالجة المركزية، والذاكرة، والقرص أثناء القياس.

أدوات لقياس أداء PostgreSQL

1. pgbench

ما هو pgbench؟ 

pgbench هو أداة قياس الأداء المدمجة في PostgreSQL. تقوم بمحاكاة العملاء المتوازيينينجاز المعاملات وتقيس أداء قاعدة البيانات.

التثبيت

يأتي مدمجاً مع تثبيتات PostgreSQL. للتحقق، قم بتشغيل:

Shell

 

bash
pgbench --version

البدء

1. تهيئة قاعدة بيانات للاختبار:

Shell

 

bash
pgbench -i -s 50 mydb

هنا، -s يحدد عامل الت масш، والذي يحدد حجم مجموعة البيانات.

2. تشغيل اختبار بسيط:

Shell

 

bash
pgbench -c 10 -j 2 -T 60 mydb

  • -c 10: عدد اتصالات العملاء.
  • -j 2: عدد الخيوط.
  • -T 60: مدة الاختبار بالثواني.

مثال على الناتج:

YAML

 

transaction type: TPC-B (sort of)
scaling factor: 50
number of clients: 10
number of threads: 2
duration: 60 s
tps = 1420.123 (excluding connections establishing)

2. Sysbench

لماذا استخدام Sysbench؟ 

Sysbench هو أداة قياس أداء متعددة الاستخدامات للقواعد البيانات والأنظمة. يوفر مرونة أكبر من pgbench للأعمال المخصصة.

التثبيت

تثبيت Sysbench باستخدام الأمر التالي:

Shell

 

bash
sudo apt-get install sysbench

البدء

1. تحضير الاختبار:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --tables=10 --table-size=1000000 \
  oltp_read_write prepare

2. تشغيل الاختبار:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --threads=4 \
  --time=60 oltp_read_write run

3. pg_stat_statements

ما هو pg_stat_statements؟

امتداد PostgreSQL الذي يتتبع أداء الاستعلامات والإحصائيات التنفيذية. بينما لا يقوم بتعزيز الأحمال، يساعد في تحليل الاستعلامات البطيئة أثناء المعايير.

الإعداد

1. قم بتمكين الامتداد في postgresql.conf:

Plain Text

 

shared_preload_libraries = 'pg_stat_statements'

2. أعد تحميل التكوين وأنشئ الامتداد:

SQL

 

CREATE EXTENSION pg_stat_statements;

الاستخدام

قم بتشغيل الاستعلام التالي للتعرف على العبارات التي تستغرق وقتًا طويلاً:

SQL

 

SELECT query, total_exec_time, calls
FROM pg_stat_statements
ORDER BY total_exec_time DESC;

سيناريوهات القياس

بالأسفل هو تمثيل مرئي لنتائج القياس لثلاثة سيناريوهات: الأحمال القرائية، الأحمال الكتابية، والأحمال المختلطة. يوضح مخطط العمليات لكل ثانية (TPS) قدرة PostgreSQL على التعامل مع العمليات المتوازية بكفاءة، بينما يوضح مخطط التأخير الوقت المستغرق في تنفيذ الاستعلامات بالمللي ثانية.

عمليات PostgreSQL لكل ثانية (TPS)

تأخير استعلامات PostgreSQL

أنواع الأحمال

1. الأحمال القرائية الكثيفة

الهدف: اختبار أداء قاعدة البيانات تحت نشاط قرائي مرتفع.

الإعداد: استخدم pgbench مع معاملات القراءة فقط الافتراضية:

Shell

 

bash
pgbench -c 50 -T 120 -S mydb

  • -S: قم بتنفيذ استعلامات SELECT فقط.
  • -c 50: قم بمحاكاة 50 عميل متوازٍ.

2. الأحمال الكتابية الكثيفة

الهدف: قياس أداء قاعدة البيانات مع الإدخالات أو التحديثات المتكررة.

الإعداد: قم بتعديل المعيار ليشمل الكتابة:

Shell

 

bash
pgbench -c 20 -j 4 -T 120 -N mydb

  • -N: تنفيذ الاستعلامات غير SELECT.

3. أعباء العمل المختلطة للقراءة والكتابة

الهدف: محاكاة حمل عمل واقعي يدمج القراءة والكتابة.

الإعداد: استخدم تكوينًا متوازنًا:

Shell

 

bash
pgbench -c 30 -j 4 -T 180 mydb

تحسين PostgreSQL للحصول على نتائج أفضل في الاختبارات

ضبط إعدادات الذاكرة

اضبط هذه المعلمات في postgresql.conf:

Plain Text

 

shared_buffers = 25% of system memory
work_mem = 4MB
maintenance_work_mem = 64MB

تمكين تنفيذ الاستعلامات الموازية

اضبط هذه المعلمات في postgresql.conf:

Plain Text

 

max_parallel_workers_per_gather = 4

تحسين إدخال/إخراج القرص

استخدم محركات أقراص SSD لملفات WAL واضبط هذه الإعدادات:

Plain Text

 

wal_buffers = 16MB
synchronous_commit = off

أمثلة على النتائج وتفسيرها

السيناريو: 50 عميلًا متوازيًا يقومون بحمل عمل قراءة ثقيل لمدة 60 ثانية.

الإخراج:

Plain Text

 

tps = 2500.456 (excluding connections establishing)

التفسير: قاعدة البيانات قادرة على التعامل مع 2500 معاملة في الثانية تحت هذا الحمل.

إذا كانت TPS أقل من المتوقع، قم بتحليل خطط الاستعلام باستخدام EXPLAIN ANALYZE للتعرف على نقاط القصور في الأداء.

الخاتمة

تحديد المعايير PostgreSQL هو وسيلة قوية لاكتشاف القيود الأدائية وتحسين قاعدة البيانات الخاصة بك لمختلف الأحمال العملية. أدوات مثل pgbench و sysbench، بالإضافة إلى رؤى من pg_stat_statements، تتيح لك محاكاة السيناريوهات الواقعية وتحسين إعدادات PostgreSQL.

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

Source:
https://dzone.com/articles/how-to-benchmark-postgresql-for-optimal-performance