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)

相关推荐
在人间负债^2 分钟前
假装自己是个小白 ---- 重新认识MySQL
android·数据库·mysql
檀越剑指大厂2 分钟前
【PostgreSQL系列】PostgreSQL性能优化
数据库·postgresql·性能优化
Leo.yuan8 分钟前
3D 数据可视化系统是什么?具体应用在哪方面?
大数据·数据库·3d·信息可视化·数据分析
元亓亓亓19 分钟前
MySQL--day1--数据库概述
数据库·mysql
不务专业的程序员--阿飞1 小时前
【SQL 如何解锁递归】
java·数据库·sql
右璇2 小时前
ORACLE查看归档是否打开
数据库·oracle
天空之城夢主2 小时前
shell 编程之正则表达式与文本处理器
数据库·mysql·正则表达式
Always_away2 小时前
数据库系统概论|第七章:数据库设计—课程笔记
数据库·笔记·sql·学习
lcw_lance3 小时前
业务中台-典型技术栈选型(微服务、容器编排、分布式数据库、消息队列、服务监控、低代码等)
数据库·分布式·微服务