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

相关推荐
若兰幽竹1 小时前
【从零开始编写数据库:基于Python语言实现数据库ToyDB的ACID特性】
数据库·python
宇钶宇夕1 小时前
S7-200 SMART CPU 密码清除全指南:从已知密码到忘记密码的解决方法
运维·服务器·数据库·程序人生·自动化
周杰伦的稻香2 小时前
MySQL密码管理器“mysql_config_editor“
数据库·mysql
云朵大王2 小时前
SQL 视图与事务知识点详解及练习题
java·大数据·数据库
czhc11400756632 小时前
LINUX712 MYSQL;磁盘分区;NFS
数据库·mysql·adb
不太可爱的大白3 小时前
Mysql:分库分表
数据库·mysql
十五年专注C++开发3 小时前
hiredis: 一个轻量级、高性能的 C 语言 Redis 客户端库
开发语言·数据库·c++·redis·缓存
bianguanyue4 小时前
SQLite密码修改故障排查:RSA加密随机性导致的数据库匹配问题
数据库·sqlite·c#
亚马逊云开发者5 小时前
将 Go 应用从 x86 平台迁移至 Amazon Graviton:场景剖析与最佳实践
linux·数据库·golang
张先shen6 小时前
亿级流量下的缓存架构设计:Redis+Caffeine多级缓存实战
数据库·redis·缓存