jdbc 在内存中保留准备好的语句?

jdbc keep prepared statement in memory?

我正在为我的 sqlite 日志记录数据库使用准备好的语句。

我的线程 运行s 每 50ms 将日志缓冲区中的东西写入数据库。

目前我正在每个线程上创建一个新的准备好的语句批处理 运行 并在所有数据行写入后关闭它们。

现在我想知道将准备好的语句保留在内存中并仅在线程 closes/is 中断时关闭它是否更好?

我进行此预优化的原因是因为我希望此日志记录线程尽可能不干扰主应用程序性能,我可以想象 allocating/parsing/verifying 每 50 秒的资源可能会更多比将准备好的语句保存在内存中更密集。

最后我想我需要在我的数据库中为各种日志类型准备大约 20-30 个准备好的语句。那么,在需要时将它们初始化为新的准备好的语句会更好,还是我应该只初始化一次并将准备好的语句保存在内存中?

这是我的两分钱:-

如果你的目的只是两个保存opening/closing准备好的语句。我不认为你会在这里获得太多比较内存开销。昂贵的操作是 opening/closing 连接不是语句。而且我相信您一定已经在为此使用池

另外,当你使用prepared statement时,DB一拿到这个statement,就会编译它并缓存它,这样它就可以使用最后一个编译的statement来连续调用同一个statement。因此,从这个角度来看,它成为连续 calls.so 的预编译,保留在内存中在这里无济于事。

执行多个 Prepared Statement 的简单答案是使批处理过程像将所有语句添加到 batch 并通过执行 batch 一次执行所有语句一样简单。这将通过在单个实例中执行多个查询来节省处理。 通过在每条数据行之后进行更新,您就可以了,这样您将拥有更好的日志。每次同时执行所有这些查询时,请尝试 while() 循环 。可能有助于在每次执行数据插入后输入日志。