مع تزايد تبني PostgreSQL، غالبًا ما يحتاج مسؤولو قواعد البيانات (DBAs) والمطورون إلى تقييم أدائها لضمان تشغيل تطبيقاتهم بكفاءة تحت أعباء عمل مختلفة. قياس الأداء هو عملية حيوية تقيس كيفية تعامل PostgreSQL مع الأحمال المتغيرة، مما يساعد في تحديد الاختناقات ومناطق التحسين. ي exploي هذا المقال الأدوات، والمقاييس،سيناريوهات الاختبار لمساعدتك في قياس أداء PostgreSQL كمحترف.
لماذا نقيس أداء PostgreSQL؟
قياس الأداء يتيح لك:
- قياس معدل الإنتاجية والتباطؤ لقاعدة بياناتك تحت أعباء عمل محددة.
- تحديد الاختناقات في الأجهزة أو الإعدادات.
- مقارنة تأثير التحسينات مثل تغييرات الفهارس أو إعادة كتابة الاستعلامات.
- محاكاة سيناريوهات واقعية مثل نشاط المستخدم المتزامن العالي أو كتابة بيانات جماعية.
المقاييس الرئيسية لتتبعها
أثناء قياس الأداء PostgreSQL، ركز على هذه المقاييس:
- TPS (الصفقات لكل ثانية): يقيس عدد الصفقات التي تكتملها قاعدة البيانات في ثانية واحدة.
- IOPS (عمليات الإدخال/الإخراج لكل ثانية): يتتبع نشاط القرص.
- التباطؤ: يقيس الوقت المستغرق في تنفيذ الاستعلامات، مما يؤثر على تجربة المستخدم.
- استخدام الموارد: يتتبع استخدام وحدة المعالجة المركزية، والذاكرة، والقرص أثناء القياس.
أدوات لقياس أداء PostgreSQL
1. pgbench
ما هو pgbench؟
pgbench
هو أداة قياس الأداء المدمجة في PostgreSQL. تقوم بمحاكاة العملاء المتوازيينينجاز المعاملات وتقيس أداء قاعدة البيانات.
التثبيت
يأتي مدمجاً مع تثبيتات PostgreSQL. للتحقق، قم بتشغيل:
bash
pgbench --version
البدء
1. تهيئة قاعدة بيانات للاختبار:
bash
pgbench -i -s 50 mydb
هنا، -s
يحدد عامل الت масш، والذي يحدد حجم مجموعة البيانات.
2. تشغيل اختبار بسيط:
bash
pgbench -c 10 -j 2 -T 60 mydb
-c 10
: عدد اتصالات العملاء.-j 2
: عدد الخيوط.-T 60
: مدة الاختبار بالثواني.
مثال على الناتج:
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 باستخدام الأمر التالي:
bash
sudo apt-get install sysbench
البدء
1. تحضير الاختبار:
bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
--pgsql-user=postgres --tables=10 --table-size=1000000 \
oltp_read_write prepare
2. تشغيل الاختبار:
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
:
shared_preload_libraries = 'pg_stat_statements'
2. أعد تحميل التكوين وأنشئ الامتداد:
CREATE EXTENSION pg_stat_statements;
الاستخدام
قم بتشغيل الاستعلام التالي للتعرف على العبارات التي تستغرق وقتًا طويلاً:
SELECT query, total_exec_time, calls
FROM pg_stat_statements
ORDER BY total_exec_time DESC;
سيناريوهات القياس
بالأسفل هو تمثيل مرئي لنتائج القياس لثلاثة سيناريوهات: الأحمال القرائية، الأحمال الكتابية، والأحمال المختلطة. يوضح مخطط العمليات لكل ثانية (TPS) قدرة PostgreSQL على التعامل مع العمليات المتوازية بكفاءة، بينما يوضح مخطط التأخير الوقت المستغرق في تنفيذ الاستعلامات بالمللي ثانية.
عمليات PostgreSQL لكل ثانية (TPS)
تأخير استعلامات PostgreSQL
أنواع الأحمال
1. الأحمال القرائية الكثيفة
الهدف: اختبار أداء قاعدة البيانات تحت نشاط قرائي مرتفع.
الإعداد: استخدم pgbench
مع معاملات القراءة فقط الافتراضية:
bash
pgbench -c 50 -T 120 -S mydb
-S
: قم بتنفيذ استعلامات SELECT فقط.-c 50
: قم بمحاكاة 50 عميل متوازٍ.
2. الأحمال الكتابية الكثيفة
الهدف: قياس أداء قاعدة البيانات مع الإدخالات أو التحديثات المتكررة.
الإعداد: قم بتعديل المعيار ليشمل الكتابة:
bash
pgbench -c 20 -j 4 -T 120 -N mydb
-N
: تنفيذ الاستعلامات غير SELECT.
3. أعباء العمل المختلطة للقراءة والكتابة
الهدف: محاكاة حمل عمل واقعي يدمج القراءة والكتابة.
الإعداد: استخدم تكوينًا متوازنًا:
bash
pgbench -c 30 -j 4 -T 180 mydb
تحسين PostgreSQL للحصول على نتائج أفضل في الاختبارات
ضبط إعدادات الذاكرة
اضبط هذه المعلمات في postgresql.conf
:
shared_buffers = 25% of system memory
work_mem = 4MB
maintenance_work_mem = 64MB
تمكين تنفيذ الاستعلامات الموازية
اضبط هذه المعلمات في postgresql.conf
:
max_parallel_workers_per_gather = 4
تحسين إدخال/إخراج القرص
استخدم محركات أقراص SSD لملفات WAL واضبط هذه الإعدادات:
wal_buffers = 16MB
synchronous_commit = off
أمثلة على النتائج وتفسيرها
السيناريو: 50 عميلًا متوازيًا يقومون بحمل عمل قراءة ثقيل لمدة 60 ثانية.
الإخراج:
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