EasyNVR 因 sqlite 数据库过大导致访问网页卡顿的优化方案

当EasyNVR视频直播平台出现响应慢的问题,排除网络和摄像头因素后,发现数据库虽数据量不大但体积过大。通过分析,确定数据库碎片化导致查询效率降低。通过在代码中添加VACUUM操作进行数据库清理,成功减小数据库大小并显著提升了网页响应速度。
摘要由CSDN通过智能技术生成

作为视频直播平台,EasyNVR在视频直播时收到网络或者摄像头影响的卡顿是非常正常的现象,但也有可能出现非网络及摄像头配置影响的卡顿。EasyNVR一个项目现场,突然出现访问网页页面非常卡顿的现象,一个页面大概需要4s以上才能够响应显示,这个网页的响应明显就与摄像头配置无关了。

image.png

在我们确定网络状况无问题之后,先查看了EasyNVR数据库,发现只有1000条左右的数据,所以可以排除数据库的原因。但是在查看数据库大小的时候,发现数据库大小有 151MB,数据库过大,导致查询数据库很慢,因此出现响应慢的问题。

image.png

Sqlite3 在运行过程中,如果频繁进行删除和更新操作,会增加文件的碎片化,导致数据库增大,因此需要对数据库进行处理。

在代码中添加新的代码如下:

// sqlite 的特性在运行一段时间后,如果频繁删除或者更新数据,会导致文件变大,消除空闲页
func VacummSqlite() {
   if gUseDb == consts.SqliteDb && database != nil {
      database.Exec("VACUUM;")
      // fmt.Println(time.Now().Format(time.StampMilli) + " 运行了一次 VACUUM ")
   }
}

在软件初始化运行和每天晚上运行一次该方法,可以将对应的数据库重新消除空闲页,反碎片化,加快查询速度。
运行完毕,该数据库减小到 140KB。

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值