Skip to content
VDS · قواعد البيانات

إعداد ذاكرة قاعدة البيانات حسب مستواك

قيم buffer محددة لـ PostgreSQL و MySQL لمستويات VDS-1…VDS-6، وقاعدة لتوزيع الذاكرة بين قاعدة البيانات والتطبيق والنظام.

آخر تحديث 23 أغسطس 2026

إعدادات قاعدة البيانات الافتراضية مصممة لتعمل في أي مكان، لا لتكون سريعة. على VDS-3 بذاكرة 8 GB، تستهلك PostgreSQL جاهزةً 128 MB للتخزين المؤقت — أي أنها تقرأ كل شيء تقريبًا من القرص، مع أنها قادرة على القراءة من الذاكرة.

قاعدة التوزيع

وزّع ذاكرة المستوى على هذا النحو تقريبًا:

  • عمليات النظام والخدمات — 10–15%؛
  • التطبيق (PHP-FPM، Node، gunicorn) — حسب عدد العمال؛
  • قاعدة البيانات — ما تبقّى، بحد أقصى 60–70% من الذاكرة الكلية.

لا تمنح قاعدة البيانات كل الذاكرة أبدًا: سيدخل النظام في swap، ولن تنفعك NVMe — سيزداد زمن الاستجابة عشرات المرات.

المستخدم حاليًا:

free -h
ps -eo pmem,rss,comm --sort=-rss | head

تتوفر رسوم بيانية للذاكرة لمدة ساعة ويوم وأسبوع وشهر في «نظرة عامة» في لوحة التحكم /hosting/vds/m/<id> — وهي تُظهر الذروة الحقيقية، لا اللحظة الراهنة.

PostgreSQL

/etc/postgresql/17/main/postgresql.conf:

المستوىshared_bufferseffective_cache_sizework_memmaintenance_work_memmax_connections
VDS-1 (2 GB)384MB1GB8MB96MB40
VDS-2 (4 GB)1GB2GB12MB256MB60
VDS-3 (8 GB)2GB5GB16MB512MB100
VDS-4 (16 GB)4GB10GB24MB1GB150
VDS-5 (24 GB)6GB16GB32MB2GB200
VDS-6 (32 GB)8GB22GB48MB2GB250

إضافةً إلى إعدادات NVMe العامة:

random_page_cost = 1.1
effective_io_concurrency = 200

يُخصَّص work_mem لكل عملية فرز، لا لكل اتصال: مئة استعلام متوازٍ بفرز معقّد ستضاعفه مئات المرات. لا تضبطه على قيمة عالية جدًا.

التطبيق: systemctl restart postgresql (تغيير shared_buffers يتطلب إعادة تشغيل تحديدًا).

MySQL وMariaDB

المستوىinnodb_buffer_pool_sizeinnodb_log_file_sizemax_connections
VDS-1512M128M60
VDS-21G256M100
VDS-33G512M150
VDS-48G1G200
VDS-512G1G250
VDS-618G2G300
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000

مجمّع المخزن المؤقت هو المعامل الرئيسي: إذا اتّسع لمجموعة البيانات العاملة، فلا يُقرأ القرص إلا نادرًا.

التحقق من الأثر

SELECT sum(blks_hit)*100/sum(blks_hit+blks_read) FROM pg_stat_database;

بالنسبة إلى MySQL، انظر إلى SHOW ENGINE INNODB STATUS ونسبة Innodb_buffer_pool_reads إلى Innodb_buffer_pool_read_requests. معدل إصابة التخزين المؤقت دون 95% يعني أن قاعدة البيانات لا تملك ذاكرة كافية.

الأخطاء الشائعة

العَرَضالسبب
قاعدة البيانات لا تبدأ بعد التعديلطُلبت ذاكرة أكثر مما هو متاح — راجع السجل
أُنهيت العملية بواسطة OOMقاعدة البيانات والتطبيق والنظام معًا تتجاوز ذاكرة المستوى
صارت أبطأ بعد «التحسين»work_mem مضبوط على قيمة عالية جدًا، والجهاز يستخدم swap
القرص يُقرأ باستمرارالمخازن المؤقتة صغيرة جدًا، ومجموعة البيانات العاملة لا تتسع

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