sqlite不会自动缩减问题

  1. 今天在测试智能RTU的时候,遇到个事情就是在进行查看AI报警的时候,发现页面查询很慢,但是查网络服务80端口是开启的,发现进程没有被关闭(或者segment,也就是断了),但是就是无法查询数据,经过FinaShell工具,发现cpu占据90%以上,通过top命令看到appweb的进程占据了81%,以前从来没有这么大使用cpu的历史,通过把数据库获取下来,发现一个sqlite数据库居然146M的数据,经过查询ai_recorder这张表有198万的数据,而且是最近3天的数据,2月1号到8点的数据居然就有23万的数据,最后发现每1秒钟写入8条数据,由于大量的数据,造成sqlite数据库对这张表的查询异常慢,后来给这张表增加了索引终于把cpu下降到了50%以下,看来sqlite的索引对cpu还是有很大的影响
  2. sqlite数据库遇到个问题,就是删除掉数据之后,sqlite数据库不会自动缩小,需要执行VACUUM这个命令才能变小,使用工具的时候delete完之后,调用这个VACUUM命令,但是在代码中,需要在commit之前执行VACUUM命令

https://www.cnblogs.com/zibuyu2015831/p/17861866.html

import sqlite3

连接到你的数据库

conn = sqlite3.connect('your_database.db')

创建一个游标对象

cur = conn.cursor()

执行VACUUM命令

cur.execute('VACUUM')

提交事务

conn.commit()

关闭连接

conn.close()

这个没有验证,

我使用的是在建数据库的时候,设置auto_vaccum = 1的方式

PRAGMA auto_vacuum=full;

sqlite> PRAGMA auto_vacuumm=none;

sqlite> PRAGMA auto_vacuum=incremental;

sqlite> PRAGMA auto_vacuum=fuall;

0或none:禁用Aato_vacuum。这是默认模式,意味着数据库文件尺寸大小不会缩小,除非手动使用VACUUM命令。

1或full:启用Aato_vacuum。是全自动的,在该模式下,允许数据库文件随着数据从数据移除而缩小。

2或incremental:启用Aato_vacuum,但是必须手动激活。在模式下,引用数据被维持,免费页面只放在免费列表中这些页面在任何时候使用incremental_vacuum pragma进行覆盖。

但是通过这种方式也不行,最后通过Sqliteman-1.2.2-win32(pragmas)软件设置auto_vacuum=1,来实现了(changevalue)

相关推荐
库库林_沙琪马1 小时前
Redis 持久化:从零到掌握
数据库·redis·缓存
牵牛老人2 小时前
Qt中使用QPdfWriter类结合QPainter类绘制并输出PDF文件
数据库·qt·pdf
卡西里弗斯奥4 小时前
【达梦数据库】dblink连接[SqlServer/Mysql]报错处理
数据库·mysql·sqlserver·达梦
m0_748255414 小时前
vscode配置django环境并创建django项目(全图文操作)
vscode·django·sqlite
温柔小胖5 小时前
sql注入之python脚本进行时间盲注和布尔盲注
数据库·sql·网络安全
杨俊杰-YJ5 小时前
MySQL 主从复制原理及其工作过程
数据库·mysql
一个儒雅随和的男子6 小时前
MySQL的聚簇索引与非聚簇索引
数据库·mysql
V+zmm101348 小时前
基于微信小程序的家政服务预约系统的设计与实现(php论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计
roman_日积跬步-终至千里8 小时前
【分布式理论14】分布式数据库存储:分表分库、主从复制与数据扩容策略
数据库·分布式
hadage2338 小时前
--- Mysql事务 ---
数据库·mysql