sqlite3

退出数据库登录

bash 复制代码
sqlite> .quit

打开数据库

bash 复制代码
sqlite3 /var/lib/rancher/k3s/server/db/state.db

或者

bash 复制代码
sqlite3
sqlite> .open /var/lib/rancher/k3s/server/db/state.db

查看该库中所有表

bash 复制代码
sqlite> .tables

输出

bash 复制代码
kine

统计该表数据行数

bash 复制代码
sqlite> select count(*) from kine;

输出

bash 复制代码
584856

得到表的完整信息

bash 复制代码
sqlite> .schema kine

输出

bash 复制代码
CREATE TABLE kine
			(
				id INTEGER PRIMARY KEY AUTOINCREMENT,
				name INTEGER,
				created INTEGER,
				deleted INTEGER,
				create_revision INTEGER,
				prev_revision INTEGER,
				lease INTEGER,
				value BLOB,
				old_value BLOB
			);
CREATE INDEX kine_name_index ON kine (name);
CREATE INDEX kine_name_id_index ON kine (name,id);
CREATE INDEX kine_id_deleted_index ON kine (id,deleted);
CREATE INDEX kine_prev_revision_index ON kine (prev_revision);
CREATE UNIQUE INDEX kine_name_prev_revision_uindex ON kine (name, prev_revision);

(译文:对于SQLite3.1,可以使用"auto-vacuum模式"代替"VACUUM命令"在删除数据后回收空间,可以通过使用auto_vacuum编译指示来使能auto-vacuum模式。使能auto_vacuum模式之后,一个数据库在删除数据后留下的空闲页就可能会被回收,从而缩小数据库文件,而不用使用VACUUM命令重新构建整个数据库。然而,使用auto_vacuum模式将会导致额外的数据库文件碎片。并且使用auto_vacuum模式不会压缩部分数据库的填充页而VACUUM命令则会(压缩)。)

上面的内容来自SQLite官网:http://www.sqlite.org/lang_vacuum.html,下面做些补充:

(1)VACUUM命令是SQLite的一个扩展功能,模仿PostgreSQL中的相同命令而来。在SQLite早期版本中,若调用VACUUM带一个表名或索引名,则将整理该表或索引。后来VACUUM被重新实现,索引名或表名被忽略。

当数据库中的一个对象(表,索引或触发器)被撤销,会留下空白的空间。它使数据库比需要的大小更大,但能加快插入速度。实时的插入和删除会使得数据库文件结构混乱,减慢对数据库内容访问的速度。VACUUM命令复制主数据库文件到临时数据库并从临时数据库重新载入到主数据库,以整理数据库文件。这将除去空白页,使表数据彼此相邻排列,并整理数据库文件结构。不能对附加数据库文件进行以上操作。

若当前有活动事务,该命令无法起作用。对于in-memory数据库,该命令无效。在SQLite3.1中,可以通过使用auto-vacuum模式作为VACUUM命令的一个替代,使用 auto_vacuum pragma开启该模式。

(2)使用VACUUM命令可以在删除数据后使数据库文件减小,在SQLIte3以后有一个替代的办法是使用PRAGMA auto_vacuum。

bash 复制代码
查询
PRAGMA auto_vacuum;
设置
PRAGMA auto_vacuum =0|1;

查询或设置数据库的auto-vacuum标记。

sqlite3 state.db VACUUM;

正常情况下,当提交一个从数据库中删除数据的事务时,数据库文件不改变大小。未使用的文件页被标记并在以后的添加操作中再次使用。这种情况下使用VACUUM命令释放删除后留下的空白空间。

当开启auto-vacuum,并提交一个从数据库中删除数据的事务时,数据库文件自动收缩,(VACUUM命令在auto-vacuum开启的数据库中不起作用)。数据库会在内部存储一些信息以便支持这一功能,这使得数据库文件比不开启该选项时稍微大一些。

另外,"auto-vacuuming must be turned on before any tables are created. It is not possible to enable or disable auto-vacuum after a table has been created"。大概意思是,当有表创建后就不能对auto-vacuum进行更改。

使用auto_vacuum仅仅是将空闲的页除去,并不会像VACUUM那样对数据库进行碎片整理,或是压缩数据库页。使用auto_vacuum会造成而额外的文件碎片。

相关推荐
byte轻骑兵43 分钟前
时序数据库选型指南:Apache IoTDB 社区版实践与踩坑
数据库·人工智能·apache·时序数据库·iotdb
黄连木笛2 小时前
Redis Insight 汉化教程:Windows / macOS / Linux 设置中文界面(附繁體、教程汉化、关闭自动更新)
数据库·redis·缓存
nice_lcj5202 小时前
MySQL 存储引擎入门:InnoDB 和 MyISAM 到底怎么选
java·数据库·mysql·面试·innodb·存储引擎·myisam
古典和浪漫3 小时前
MVCC机制
数据库
xixingzhe23 小时前
mysql全量、增量备份
数据库·mysql
AllData公司负责人11 小时前
AI大模型数据开发底座系列说明书,AllData集成Chat2DB开源项目建设AI 数据库分析底座,涵盖AI 洞察/对话SQL/智能视图!
数据库·人工智能·sql·开源·ai 洞察·对话sql
xixingzhe211 小时前
数据库备份的分类与特点
数据库
时间的拾荒人15 小时前
Redis 主从复制详解:配置实操 + 原理机制
数据库·redis·面试
隔窗听雨眠15 小时前
MySQL三表JOIN执行内核与优化器决策机制
数据库·mysql·sql优化
Decay__16 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构