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

时间:2017-03-28 08:27:55

标签: memory-leaks extensible-storage-engine

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

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 不释放内存?

如何及时释放内存?

1 个答案:

答案 0 :(得分:0)

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

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

我也同意egray的评论,即每笔交易应插入多个插入内容。或者至少使用惰性提交({{1}的标志)。否则,您将过于频繁地写入事务日志文件,并且性能会受到极大的影响。