如何在使用 JetUpdate 在可扩展存储引擎数据库中插入记录时释放内存



我需要插入数百万条记录。现在我处于一个非常紧密的循环中,对于每条记录,我

a) start a transaction  (JetBeginTransaction)
b) prepare an update (JetPrepareUpdate)
c) add the row (JetSetColumns)
d) update (JetUpdate)
e) commit the transaction (JetCommitTransaction)

但是,当通过执行 JetUpdate 插入记录时,占用的内存越来越多。即使我停止执行插入记录或插入所有记录,也不会释放内存。

如何限制内存上升?

为什么 JetCommitTransaction 不释放内存?

如何及时释放内存?

数据库缓存可能正在增长。使用性能计数器确认:Database -> Database Cache Size (MB)

您可以使用JET_paramCacheSizeMax来限制大小(请参阅 https://learn.microsoft.com/en-us/windows/desktop/extensible-storage-engine/database-cache-parameters(。

我也同意 egray 的评论,即您应该在每笔交易中插入多个插入。或者至少使用延迟提交(JetCommmitTransaction标志(。否则,您将过于频繁地写入事务日志文件,并且性能将受到很大影响。

最新更新