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% से कम कैश हिट रेट का मतलब है कि डेटाबेस के पास मेमोरी कम है।

आम गलतियाँ

लक्षणकारण
बदलाव के बाद डेटाबेस शुरू नहीं होताउपलब्ध मेमोरी से ज़्यादा माँगी गई — journal देखें
प्रोसेस को OOM ने मार दियाडेटाबेस, एप्लिकेशन और सिस्टम मिलकर टियर की मेमोरी से ज़्यादा हो गए
"ऑप्टिमाइज़ेशन" के बाद धीमा हो गयाwork_mem बहुत ज़्यादा सेट है, मशीन स्वैप कर रही है
डिस्क से लगातार पढ़ा जा रहा हैबफ़र्स बहुत छोटे हैं, वर्किंग सेट फ़िट नहीं होता

अगर मेमोरी ट्यून करने के बाद भी दीवार पर टकरा रहे हैं, तो समस्या कॉन्फ़िग की नहीं, डेटा की मात्रा की है। आप केवल अपना प्लान अपग्रेड कर सकते हैं, पेड टर्म के बचे दिनों के लिए प्रोरेटेड भुगतान के साथ; डाउनग्रेड उपलब्ध नहीं हैं, इसलिए अगला टियर सोच-समझकर चुनें।