Skip to content
VDS · డేటాబేస్‌లు

SQLite: ఎప్పుడు సరిపోతుంది

VPS పై SQLite ప్రత్యేక డేటాబేస్ సర్వర్ కంటే ఎక్కడ మెరుగ్గా ఉంటుంది, WAL ఎలా ఎనేబుల్ చేయాలి మరియు “database is locked” ను ఎలా నివారించాలి, మరియు PostgreSQL కు ఎప్పుడు మారాలి.

23 ఆగస్టు, 2026న నవీకరించబడింది

SQLite అనేది ఒకే ఫైల్‌లో ఉండే డేటాబేస్ — సర్వీస్ లేదు, పోర్ట్ లేదు, పాస్‌వర్డ్ లేదు. బాట్, చిన్న ప్యానెల్ లేదా అప్పుడప్పుడు రైట్‌లు జరిగే సైట్ కోసం ఇది సరైన ఎంపిక: ఇది మెమరీని తినదు, VDS-1 లో అసలు 2 GB మాత్రమే ఉంది, ఇంకా కాన్ఫిగర్ చేయడానికి ఏమీ లేదు.

ఎప్పుడు ఉపయోగించాలి

బాగా సరిపోతుంది:

  • Telegram మరియు Discord బాట్‌లు, కౌంటర్లు, సెట్టింగ్‌లు;
  • నిమిషానికి వేలాది రీడ్‌లు, డజన్ల కొద్దీ రైట్‌లు ఉండే సైట్‌లు;
  • రెండో సర్వర్ కోసం ప్లాన్‌లు లేని, ఒకే మెషీన్‌పై ఉండే ఏ ప్రాజెక్ట్ అయినా.

బాగా సరిపోదు:

  • ఒకేసారి చురుకుగా రైట్ చేసే బహుళ ప్రాసెస్‌లు;
  • కొన్ని డజన్ల గిగాబైట్‌ల కంటే పెద్ద డేటాబేస్;
  • మరో మెషీన్ నుండి నెట్‌వర్క్ యాక్సెస్ — SQLite ఇది అసలు చేయలేదు.

రెండో మరియు మూడో సందర్భాల్లో PostgreSQL లేదా MySQL ఉపయోగించండి.

ఫైల్‌తో పని చేయడం

apt install -y sqlite3
sqlite3 /srv/app/data/app.db
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL);
INSERT INTO users (name) VALUES ('test');
.tables
.schema users
.quit

డేటాబేస్ ఫైల్ మెషీన్ లోకల్ డిస్క్‌పై ఉండాలి మరియు యాప్లికేషన్ యూజర్‌కు యాజమాన్యంలో ఉండాలి:

chown appuser:appuser /srv/app/data/app.db
chmod 640 /srv/app/data/app.db

డేటాబేస్ ఉన్న డైరెక్టరీ కూడా రైట్ చేయగలిగి ఉండాలి: SQLite దాని పక్కనే తాత్కాలిక -wal మరియు -shm ఫైల్‌లను సృష్టిస్తుంది.

అవసరమైన సెట్టింగ్‌లు

రెండు pragma సెట్టింగ్‌లు చాలావరకు సమస్యలను తొలగిస్తాయి:

PRAGMA journal_mode = WAL;
PRAGMA busy_timeout = 5000;

WAL రైట్ జరుగుతున్నప్పుడు రీడర్‌లను చదవనిస్తుంది — అది లేకపోతే ఏ రీడర్ అయినా రైటర్ చేత బ్లాక్ అవుతుంది. busy_timeout వెంటనే ఫెయిల్ అవ్వకుండా క్లయింట్‌ను ఐదు సెకన్లు వేచి ఉండేలా చేస్తుంది. వీటిని కన్సోల్‌లో ఒకసారి కాకుండా, కోడ్‌లో కనెక్షన్ తెరిచిన ప్రతిసారీ సెట్ చేయండి.

బ్యాకప్‌లు

యాప్లికేషన్ నడుస్తున్నప్పుడు సాధారణ cp తో ఫైల్‌ను కాపీ చేయలేరు — పాడైన డేటాబేస్ వస్తుంది. దీనికి బిల్ట్-ఇన్ సురక్షిత కమాండ్ ఉంది:

sqlite3 /srv/app/data/app.db ".backup '/srv/backups/app-$(date +%F).db'"

దీన్ని cron లో పెట్టి, కాపీని మెషీన్ నుండి బయటకు తరలించండి: VPS కి ఆటోమేటిక్ బ్యాకప్‌లు లేవు, స్నాప్‌షాట్‌లు కూడా లేవు. సాధారణ విధానం డేటాబేస్ బ్యాకప్‌లులో వివరించబడింది.

సాధారణ ఎర్రర్లు

లక్షణంకారణం
database is lockedWAL లేదా busy_timeout లేదు, లేదా రెండో ప్రాసెస్ దీర్ఘ ట్రాన్జాక్షన్‌ను పట్టి ఉంది
attempt to write a readonly databaseఫైల్‌పై లేదా డైరెక్టరీపై అనుమతులు లేవు
disk I/O errorడిస్క్ స్పేస్ అయిపోయింది — “Overview”లో డిస్క్ వినియోగ రింగ్‌ను చూడండి
వరుసలు తొలగించిన తర్వాత డేటాబేస్ పెరుగుతుందిస్పేస్ ఆటోమేటిక్‌గా తిరిగి రాదు: VACUUM
కాపీ చేసిన తర్వాత డేటాబేస్ పాడైందినడుస్తున్నప్పుడు cp తో కాపీ చేశారు — .backup మాత్రమే ఉపయోగించండి

ఎప్పుడు మైగ్రేట్ చేయాలి

సంకేతాలు: WAL ఆన్ చేసినా కూడా క్రమం తప్పకుండా database is locked ఎర్రర్లు రావడం, బహుళ యాప్లికేషన్ వర్కర్‌లు, లెక్కించడానికి నిమిషాలు పట్టే రిపోర్ట్‌లు. తరలించడానికి డేటాబేస్ మైగ్రేషన్ చూడండి.

డేటాబేస్ ఫైల్ వెబ్ సర్వర్ అందించే డైరెక్టరీలో ఉండకూడదు. /var/www/app.db ను డైరెక్ట్ లింక్ ద్వారా, అన్ని పాస్‌వర్డ్‌లు మరియు యూజర్ డేటాతో సహా డౌన్‌లోడ్ చేసుకోవచ్చు.