Skip to content
VDS · ڈیٹا بیس

اپنے ٹیئر کے لیے ڈیٹا بیس میموری کنفیگر کرنا

VDS-1…VDS-6 کے لیے PostgreSQL اور MySQL کی مخصوص بفر ویلیوز، اور ڈیٹا بیس، ایپلیکیشن، اور سسٹم کے درمیان میموری تقسیم کرنے کا اصول۔

اپ ڈیٹ 23 اگست، 2026

ڈیفالٹ ڈیٹا بیس کی سیٹنگز ہر جگہ چلنے کے لیے بنائی گئی ہیں، تیز چلنے کے لیے نہیں۔ VDS-3 پر 8 GB میموری کے ساتھ، PostgreSQL باکس سے باہر کیش کے لیے 128 MB استعمال کرتا ہے — یعنی یہ تقریباً سب کچھ ڈسک سے پڑھتا ہے، حالانکہ یہ میموری سے پڑھ سکتا تھا۔

میموری تقسیم کرنے کا اصول

ٹیئر کی میموری کو تقریباً اس طرح تقسیم کریں:

  • سسٹم اور سروس کے پراسیس — 10–15%؛
  • ایپلیکیشن (PHP-FPM, Node, gunicorn) — ورکرز کی تعداد کے مطابق؛
  • ڈیٹا بیس — جو بچے، لیکن کل میموری کے 60–70% سے زیادہ نہیں۔

ڈیٹا بیس کو کبھی ساری میموری نہ دیں: سسٹم سوئپ میں چلا جائے گا، اور NVMe آپ کی مدد نہیں کرے گا — لیٹنسی کئی گنا بڑھ جائے گی۔

اس وقت کتنی میموری استعمال میں ہے:

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

ایک گھنٹے، ایک دن، ایک ہفتے اور ایک مہینے کے میموری گراف پینل کے "Overview" میں /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 بہت زیادہ رکھی گئی ہے، مشین سوئپ کر رہی ہے
ڈسک مسلسل پڑھی جا رہی ہےبفرز بہت چھوٹے ہیں، ورکنگ سیٹ سما نہیں رہا

اگر میموری ٹیون کرنے کے بعد بھی دیوار سے ٹکرا رہے ہیں، تو مسئلہ کنفگ نہیں بلکہ ڈیٹا کی مقدار ہے۔ آپ صرف اپنا پلان اپ گریڈ کر سکتے ہیں، بامعاوضہ مدت کے باقی دنوں کی متناسب ادائیگی کے ساتھ؛ ڈاؤن گریڈ دستیاب نہیں، اس لیے اگلا ٹیئر سوچ سمجھ کر منتخب کریں۔