మీ టియర్ కోసం డేటాబేస్ మెమరీ కాన్ఫిగరేషన్
VDS-1…VDS-6 కోసం PostgreSQL మరియు MySQL కోసం నిర్దిష్ట బఫర్ విలువలు, మరియు డేటాబేస్, అప్లికేషన్, మరియు సిస్టమ్ మధ్య మెమరీని పంపిణీ చేసే నియమం.
23 ఆగస్టు, 2026న నవీకరించబడింది
డిఫాల్ట్ డేటాబేస్ సెట్టింగ్లు ఎక్కడైనా ప్రారంభం కావడానికి రూపొందించబడ్డాయి, వేగంగా నడవడానికి కాదు. 8 GB మెమరీ ఉన్న VDS-3లో, PostgreSQL డిఫాల్ట్గా క్యాష్ కోసం 128 MB ఉపయోగిస్తుంది — అంటే మెమరీ నుండి చదవగలిగినా, దాదాపు ప్రతిదీ డిస్క్ నుండే చదువుతుంది.
కేటాయింపు నియమం
టియర్ మెమరీని సుమారుగా ఇలా విభజించండి:
- సిస్టమ్ మరియు సర్వీస్ ప్రాసెస్లు — 10–15%;
- అప్లికేషన్ (PHP-FPM, Node, gunicorn) — వర్కర్ల సంఖ్య ప్రకారం;
- డేటాబేస్ — మిగిలినది, కానీ మొత్తం మెమరీలో 60–70% కంటే ఎక్కువ కాదు.
డేటాబేస్కు ఎప్పుడూ మొత్తం మెమరీ ఇవ్వకండి: సిస్టమ్ స్వాప్లోకి వెళ్తుంది, NVMe సహాయపడదు — లేటెన్సీ పదుల రెట్లు పెరుగుతుంది.
ప్రస్తుతం ఎంత వాడుకలో ఉంది:
free -h
ps -eo pmem,rss,comm --sort=-rss | head
ఒక గంట, ఒక రోజు, ఒక వారం మరియు ఒక నెల మెమరీ గ్రాఫ్లు ప్యానెల్ /hosting/vds/m/<id> లోని "Overview"లో అందుబాటులో ఉన్నాయి — అవి ప్రస్తుత క్షణాన్ని కాదు, నిజమైన పీక్ను చూపుతాయి.
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 చాలా ఎక్కువగా సెట్ చేయబడింది, మెషిన్ స్వాప్ చేస్తోంది |
| డిస్క్ నిరంతరం చదవబడుతోంది | బఫర్లు చాలా చిన్నవి, పని చేసే సెట్ సరిపోవడం లేదు |
మెమరీని ట్యూన్ చేసిన తర్వాత కూడా మీరు ఇంకా గోడను తాకుతుంటే, సమస్య కాన్ఫిగ్ కాదు, డేటా పరిమాణం. మీరు మీ ప్లాన్ని మాత్రమే అప్గ్రేడ్ చేయగలరు, చెల్లించిన కాలానికి మిగిలిన రోజులకు ప్రోరేటెడ్ చెల్లింపుతో; డౌన్గ్రేడ్లు అందుబాటులో లేవు, కాబట్టి తదుపరి టియర్ని ఆలోచనపూర్వకంగా ఎంచుకోండి.