अपने टियर के लिए डेटाबेस मेमोरी कॉन्फ़िगर करना
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% से कम कैश हिट रेट का मतलब है कि डेटाबेस के पास मेमोरी कम है।
आम गलतियाँ
| लक्षण | कारण |
|---|---|
| बदलाव के बाद डेटाबेस शुरू नहीं होता | उपलब्ध मेमोरी से ज़्यादा माँगी गई — journal देखें |
| प्रोसेस को OOM ने मार दिया | डेटाबेस, एप्लिकेशन और सिस्टम मिलकर टियर की मेमोरी से ज़्यादा हो गए |
| "ऑप्टिमाइज़ेशन" के बाद धीमा हो गया | work_mem बहुत ज़्यादा सेट है, मशीन स्वैप कर रही है |
| डिस्क से लगातार पढ़ा जा रहा है | बफ़र्स बहुत छोटे हैं, वर्किंग सेट फ़िट नहीं होता |
अगर मेमोरी ट्यून करने के बाद भी दीवार पर टकरा रहे हैं, तो समस्या कॉन्फ़िग की नहीं, डेटा की मात्रा की है। आप केवल अपना प्लान अपग्रेड कर सकते हैं, पेड टर्म के बचे दिनों के लिए प्रोरेटेड भुगतान के साथ; डाउनग्रेड उपलब्ध नहीं हैं, इसलिए अगला टियर सोच-समझकर चुनें।