تُعرف PostgreSQL بقوتها ومرونتها، ولكن للاستفادة القصوى منها في بيئات عالية الحركة أو البيانات الكثيفة، فإن التعديل ضروري. يوضح هذا الدليل نصائح التعديل الرئيسية التي يمكن لمسؤولي قواعد البيانات والمطورين استخدامها لتحسين أداء PostgreSQL.
نصائح التعديل الرئيسية
1. تكوين الذاكرة
مخازن مشتركة
تحكم إعدادات shared_buffers
في PostgreSQL في كمية الذاكرة المستخدمة لتخزين البيانات. قم بضبط هذا إلى حوالي 25-40% من إجمالي ذاكرة النظام، ولكن تجنب الإسراف، حيث أن النظام الأساسي يحتاج أيضًا لذاكرة لتخزين الملفات.
المرجع: توثيق مخازن مشتركة PostgreSQL
shared_buffers = 1GB # Set to 25-40% of system memory
ذاكرة العمل
للاستعلامات المعقدة أو الترتيب، تُحدد work_mem
كمية الذاكرة التي يمكن استخدامها لكل اتصال لعمليات الاستعلام. قم بزيادة هذه القيمة لتحسين الأداء مع مجموعات بيانات أكبر، ولكن كن حذرًا: يتم تخصيص هذا لكل استعلام، لذا قد يؤدي زيادتها بشكل كبير إلى نفاد الذاكرة.
المرجع: توثيق ذاكرة العمل PostgreSQL
work_mem = 16MB # Adjust based on workload
2. حجم الذاكرة التخزينية الفعالة
هذا إعداد مهم لتخطيط الاستعلام، حيث يستخدم PostgreSQL effective_cache_size
لتقدير كمية الذاكرة المتاحة لتخزين المؤقت على القرص. قم بضبطه إلى حوالي 75% من إجمالي ذاكرة النظام.
المرجع: وثائق حجم التخزين المؤثر في PostgreSQL
effective_cache_size = 3GB
3. إعدادات النقطة الفرعية
يمكن أن تساعد ضبط إعدادات النقطة الفرعية على تقليل حمل الإدخال/الإخراج على القرص وتحسين الأداء أثناء فترات النشاط الكتابي العالي. انظر في ضبط checkpoint_timeout
و checkpoint_completion_target
.
المرجع: وثائق إعدادات النقطة الفرعية في PostgreSQL
checkpoint_timeout = 15min # Adjust based on workload
checkpoint_completion_target = 0.7 # Set to balance write load
4. ضبط التنظيف التلقائي
التنظيف التلقائي ضروري لمنع تضخم الجداول. يساعد ضبط إعدادات autovacuum
في الحفاظ على أداء قاعدة البيانات مع مرور الوقت.
المرجع: وثائق التنظيف التلقائي في PostgreSQL
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
قم بضبط هذه الإعدادات استنادًا إلى حجم ومستوى النشاط لجداولك.
5. تخطيط الاستعلام باستخدام EXPLAIN و ANALYZE
تتيح أدوات EXPLAIN
و ANALYZE
في PostgreSQL فهم كيفية تنفيذ الاستعلامات. استخدم هذه الأوامر لتحديد نقاط الضعف وتحسين الاستعلامات التي تعمل ببطء.
المرجع: توثيق PostgreSQL EXPLAIN
EXPLAIN ANALYZE SELECT * FROM my_table WHERE condition;
6. تجمع الاتصالات
للأنظمة التي تتعامل مع عدد كبير من الاتصالات المتزامنة، يمكن أن يقلل استخدام أداة تجمع الاتصالات مثل PgBouncer من الأعباء بشكل كبير. وهذا يساعد PostgreSQL على إدارة الموارد بكفاءة.
المرجع: توثيق PgBouncer
pgbouncer.ini # Example configuration for PgBouncer
7. تقسيم الجداول الكبيرة
التقسيم هو أداة قوية لتحسين الاستعلامات على الجداول الكبيرة. من خلال تقسيم جدول كبير إلى أقسام صغيرة، يمكن لـ PostgreSQL معالجة الاستعلامات بشكل أسرع.
المرجع: توثيق تقسيم PostgreSQL
CREATE TABLE measurement (
city_id int,
logdate date,
peaktemp int,
unitsales int
) PARTITION BY RANGE (logdate);
8. ممارسات تجهيز الفهارس
استخدم الفهارس بحكمة. يمكن أن يؤدي الفهرسة الزائدة إلى تدهور الأداء أثناء عمليات الكتابة، ولكن الفهرسة الصحيحة تحسن أداء الاستعلام بشكل كبير.
المرجع: توثيق الفهارس في PostgreSQL
CREATE INDEX idx_measurement_logdate ON measurement (logdate);
9. تنفيذ الاستعلام الموازي
استغلال تنفيذ الاستعلام المتوازي في PostgreSQL لتسريع أداء الاستعلام على أنظمة متعددة النوى. قم بضبط max_parallel_workers
و max_parallel_workers_per_gather
لتمكين هذا.
المرجع: توثيق PostgreSQL Parallel Query
max_parallel_workers = 8
max_parallel_workers_per_gather = 4
10. تسجيل ومراقبة
راقب سجلات PostgreSQL لتحديد نقاط الضعف في الأداء. قم بتمكين تسجيل الاستعلامات طويلة المدى.
المرجع: توثيق تسجيل PostgreSQL
log_min_duration_statement = 500ms # Log queries that take more than 500ms
استخدم أدوات مثل pg_stat_statements
لمراقبة أداء الاستعلام وتحديد الاستعلامات التي تحتاج إلى تحسين.
الاستنتاج
هذه النصائح للضبط توفر أساسًا قويًا لتحسين أداء PostgreSQL. من خلال ضبط إعدادات الذاكرة واستخدام autovacuum
، واستغلال التنفيذ المتوازي، يمكنك التأكد من أن قاعدة بيانات PostgreSQL تعمل بشكل مثالي، حتى في حالات العبء الكبير. لا تنسى مراقبة مؤشرات الأداء بانتظام للحفاظ على سلس عمل النظام الخاص بك.
Source:
https://dzone.com/articles/top-10-postgresql-tuning-tips-for-high-performance