本文主要是介绍sqlite不会自动缩减问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 今天在测试智能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还是有很大的影响
- 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)
这篇关于sqlite不会自动缩减问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!