我需要插入数百万条记录。现在我正处于一个非常紧凑的循环中,对于每条记录,我
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 不释放内存?
如何及时释放内存?
答案 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}的标志)。否则,您将过于频繁地写入事务日志文件,并且性能会受到极大的影响。