K3s SQLite Datastore
Stores
Section titled “Stores”SQLite
Section titled “SQLite”Sqlite Size (default)
Section titled “Sqlite Size (default)”du -sh /var/lib/rancher/k3s/server/db/*Working Example:
8.0K /var/lib/rancher/k3s/server/db/etcd71M /var/lib/rancher/k3s/server/db/state.db32K /var/lib/rancher/k3s/server/db/state.db-shm4.3M /var/lib/rancher/k3s/server/db/state.db-walAs long as:
- compaction is working,
- and you restart k3s periodically the database should stay pretty small.
SQLITE vacuum
Section titled “SQLITE vacuum”Recent releases of kine/k3s vacuum the sqlite database on startup.
kine will also run a vacuum at startup,
If a manual vacuum reduces your size, k3s may be too old
SQLite Analyze with sqlite3_analyzer
Section titled “SQLite Analyze with sqlite3_analyzer”apt-get updateapt-get install sqlite3apt-get install sqlite3-toolssqlite3_analyzer /var/lib/rancher/k3s/server/db/state.dbSQLite Report analytics on kine
Section titled “SQLite Report analytics on kine”Kine is an etcd shim that translates the etcd API to:
- SQLite
- Postgres
- MySQL/MariaDB
- NATS
sqlite3 /var/lib/rancher/k3s/server/db/state.db << EOF.header on.mode column.dbinfo
SELECT COUNT(*) AS rows, (SELECT prev_revision FROM kine WHERE name = "compact_rev_key" LIMIT 1) AS compact_rev, MAX(id) AS current_revFROM kine;
SELECT COUNT(*), name FROM kine GROUP BY name ORDER BY COUNT(*) DESC LIMIT 50;
EOFoutput
rows compact_rev current_rev------ ----------- -----------919771 44903333 45821272
COUNT(*) name-------- ------------------------------------------------------------278873 /registry/leases/cert-manager/trust-manager-leader-election77684 /registry/masterleases/188.245.43.25071997 /registry/leases/kube-system/apiserver-fohhc347juam3arofccezbofla71962 /registry/leases/kube-node-lease/kube-server-01.eraldy.com49956 /registry/leases/kube-system/cert-manager-controller49921 /registry/leases/kube-system/cert-manager-cainjector-leader-election5229 /registry/cronjobs/mail/mail-checker-cron4338 /registry/argoproj.io/applications/argocd/com-datacadamia...Etcd (not default)
Section titled “Etcd (not default)”Size
du -sh /var/lib/rancher/k3s/server/db/etcd/# 8.0K /var/lib/rancher/k3s/server/db/etcd/Compaction
Section titled “Compaction”Compact is the process of deleting old rows from the database. The query that handles this is executed periodically by kine. See
Check your k3s journald logs for message that look like these, once every 5 minutes:
journalctl -e -u k3s --since "15 minutes ago" | grep -i compactOct 01 08:16:36 kube-server-01.eraldy.com k3s[2237448]: time="2025-10-01T08:16:36Z" level=info msg="COMPACT deleted 1000 rows from 1000 revisions in 906.760433ms - compacted to 43882333/45820240"Oct 01 08:16:36 kube-server-01.eraldy.com k3s[2237448]: time="2025-10-01T08:16:36Z" level=info msg="COMPACT compactRev=43882333 targetCompactRev=43883333 currentRev=45820241"Support
Section titled “Support”Manual Vacuum and Compaction
Section titled “Manual Vacuum and Compaction”# check actual sizedu -sh /var/lib/rancher/k3s/server/db/*# ls -l /var/lib/rancher/k3s/server/db/# drwx------ 2 root root 4096 Jun 24 2024 etcd#-rw-r--r-- 1 root root 12666449920 Oct 1 08:38 state.db#-rw-r--r-- 1 root root 17989632 Oct 1 08:42 state.db-shm#-rw-r--r-- 1 root root 9257153872 Oct 1 08:41 state.db-wal
# Stop k3ssystemctl stop k3s
# Backup current database if enough disk spacecp /var/lib/rancher/k3s/server/db/state.db /root/state.db.backup
# Compact using sqlitesqlite3 /var/lib/rancher/k3s/server/db/state.db 'VACUUM;'
# Check new sizedu -sh /var/lib/rancher/k3s/server/db/*# 8.0K /var/lib/rancher/k3s/server/db/etcd# 5.1G /var/lib/rancher/k3s/server/db/state.db# 64K /var/lib/rancher/k3s/server/db/state.db-shm# 32M /var/lib/rancher/k3s/server/db/state.db-walsqlite3 /var/lib/rancher/k3s/server/db/state.db << EOF.header on.mode column
delete from kine where id in (select id from (select id, name from kine where id not in (select max(id) as id from kine group by name)));
EOF# Restart k3ssystemctl start k3s