我一直认为管理数据库连接的最佳做法是连接到它,执行查询并立即关闭数据库连接
然而,至于SQlite,我在他们的网站上偶然发现了关于PRAGMA CACHE_SIZE的以下片段 来自SQlite Website
PRAGMA cache_size; PRAGMA cache_size = pages; PRAGMA cache_size = -kibibytes;
查询或更改建议的最大数据库磁盘页数 每个打开的数据库文件,SQLite将在内存中保留一次。 这个建议是否得到尊重是由酌情决定的 应用程序定义的页面缓存。构建的默认页面缓存 进入SQLite,尊重请求,但另类 应用程序定义的页面缓存实现可以选择解释 以不同方式建议的缓存大小或忽略它们 一起。默认建议的缓存大小为2000页。
如果参数N为正,则建议的高速缓存大小设置为 N.如果参数N为负,则缓存页数为 调整为使用大约N * 1024字节的内存。向后 兼容性说明:具有负N的cache_size的行为是 在3.7.10之前的SQLite版本中有所不同。在版本3.7.9和 之前,缓存中的页数设置为绝对值 N的值。
使用cache_size编译指示更改缓存大小时,更改 仅适用于本届会议。缓存大小恢复为 关闭并重新打开数据库时的默认值。
这是否意味着我可以从内存缓存中受益,我需要在应用程序的持续时间内保持与SQLite数据库文件的连接?我断开数据库的那一刻,所有缓存的内存都丢失了?
答案 0 :(得分:1)
关闭连接时确实丢弃了缓存。
在SQLite和所有其他数据库中,打开连接都有一些开销。 使用许多短期连接永远不会一个好主意。
如果您确实有许多独立的,短期的工作(例如Web服务器),您通常可以通过使用连接池来解决这些低效问题。