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会造成而额外的文件碎片。

相关推荐
IvorySQL2 分钟前
版本发布| IvorySQL 5.1 发布
数据库·人工智能·postgresql·开源
yuniko-n5 分钟前
【MySQL】通俗易懂的 MVCC 与事务
数据库·后端·sql·mysql
啦啦啦~~~75427 分钟前
【最新版】Edge浏览器安装!绿色增强版+禁止Edge更新的软件+彻底卸载Edge软件
数据库·阿里云·电脑·.net·edge浏览器
程序边界32 分钟前
金仓数据库助力Oracle迁移:一场国产数据库的逆袭之旅
数据库·oracle
为什么不问问神奇的海螺呢丶34 分钟前
oracle RAC开关机步骤
数据库·oracle
后端小张35 分钟前
【Java 进阶】深入理解Redis:从基础应用到进阶实践全解析
java·开发语言·数据库·spring boot·redis·spring·缓存
TDengine (老段)38 分钟前
TDengine IDMP 1.0.9.0 上线:数据建模、分析运行与可视化能力更新一览
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
云老大TG:@yunlaoda36044 分钟前
如何使用华为云国际站代理商的BRS进行数据安全保障?
大数据·数据库·华为云·云计算
工具人55551 小时前
strip()方法可以删除字符串中间空格吗
数据库·mysql
松涛和鸣1 小时前
35、Linux IPC进阶:信号与System V共享内存
linux·运维·服务器·数据库·算法·list