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)

相关推荐
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪4 小时前
两次连接池泄露的BUG
java·数据库
TDengine (老段)5 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq7422349845 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE6 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy12393102166 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎6 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP7 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql
l1t7 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb
安当加密7 小时前
Nacos配置安全治理:把数据库密码从YAML里请出去
数据库·安全