我已经在Windows中构建了一个文件存档器,该文件存档器使用sqlite3存储文件并利用多核技术来更快地完成存档。
我现在正在尝试备份100.000个文件,并且插入速度很慢。
当我注释插入的行时,该应用使用100%正常的CPU。插入线打开时,它很少会超过25%。
随着归档的进行,插入变得越来越慢,每秒处理几个文件,CPU使用率为11%。没有显示磁盘使用情况,因此瓶颈不能是磁盘。
我已经
PRAGMA temp_store = MEMORY
PRAGMA journal_mode = MEMORY
PRAGMA synchronous = OFF
并且整个插入操作都在事务内。
经过进一步分析,看来SQLite的问题是绑定blob64(如果我传递0,这似乎很好)。
为什么SQLite在将原始数据块插入存档时会有问题?
有什么想法吗?
谢谢。
答案 0 :(得分:2)
您的答案可能在这里:
https://www.sqlite.org/threadsafe.html
因为它在那里:
默认模式是序列化的。
这可能会解释您的观察结果。
根据该文档,您可以在编译时进行配置(我绝对不会自己做)或通过以下方式进行配置:
sqlite3_config (SQLITE_CONFIG_MULTITHREAD);
我不知道它在平流层的表现如何。