اپنے ٹیئر کے لیے ڈیٹا بیس میموری کنفیگر کرنا
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_buffers | effective_cache_size | work_mem | maintenance_work_mem | max_connections |
|---|---|---|---|---|---|
| VDS-1 (2 GB) | 384MB | 1GB | 8MB | 96MB | 40 |
| VDS-2 (4 GB) | 1GB | 2GB | 12MB | 256MB | 60 |
| VDS-3 (8 GB) | 2GB | 5GB | 16MB | 512MB | 100 |
| VDS-4 (16 GB) | 4GB | 10GB | 24MB | 1GB | 150 |
| VDS-5 (24 GB) | 6GB | 16GB | 32MB | 2GB | 200 |
| VDS-6 (32 GB) | 8GB | 22GB | 48MB | 2GB | 250 |
اس کے علاوہ NVMe کی عمومی سیٹنگز:
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem فی سورٹ آپریشن مختص ہوتی ہے، فی کنکشن نہیں: پیچیدہ سورٹنگ والی سو متوازی کوئریز اسے سینکڑوں گنا بڑھا دیں گی۔ اسے بہت زیادہ نہ رکھیں۔
لاگو کرنا: systemctl restart postgresql (shared_buffers تبدیل کرنے کے لیے خاص طور پر ری اسٹارٹ ضروری ہے)۔
MySQL اور MariaDB
| ٹیئر | innodb_buffer_pool_size | innodb_log_file_size | max_connections |
|---|---|---|---|
| VDS-1 | 512M | 128M | 60 |
| VDS-2 | 1G | 256M | 100 |
| VDS-3 | 3G | 512M | 150 |
| VDS-4 | 8G | 1G | 200 |
| VDS-5 | 12G | 1G | 250 |
| VDS-6 | 18G | 2G | 300 |
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 بہت زیادہ رکھی گئی ہے، مشین سوئپ کر رہی ہے |
| ڈسک مسلسل پڑھی جا رہی ہے | بفرز بہت چھوٹے ہیں، ورکنگ سیٹ سما نہیں رہا |
اگر میموری ٹیون کرنے کے بعد بھی دیوار سے ٹکرا رہے ہیں، تو مسئلہ کنفگ نہیں بلکہ ڈیٹا کی مقدار ہے۔ آپ صرف اپنا پلان اپ گریڈ کر سکتے ہیں، بامعاوضہ مدت کے باقی دنوں کی متناسب ادائیگی کے ساتھ؛ ڈاؤن گریڈ دستیاب نہیں، اس لیے اگلا ٹیئر سوچ سمجھ کر منتخب کریں۔