我从MSSQL中的视图中每页提取100万个文档进行索引。它适用于3页,然后要么内存不足,要么永远!有些东西没有从记忆中清除。有人可以帮助如何在每次页面请求后清除缓存吗?我正在使用LocalContainerEntityManagerFactoryBean另外,有没有更有效的方法来获取这些数据(大约3亿行)?
PAGE_SIZE = 1百万
int i = 0;
PageRequest pageRequest = new PageRequest(i, PAGE_SIZE);
Page<Item> page = myRepository.findAll(pageRequest);
int maxPages = -1;
maxPages = page.getTotalPages();
do {
for (Item t : page.getContent()) {
...... processing ......
pageRequest = new PageRequest(i, PAGE_SIZE);
page = myRepository.findAll(pageRequest);
i ++;
} while (i < maxPages);
答案 0 :(得分:0)
在向db发出另一个请求之前,您必须逐出/清除会话。
session.evict(page); // removes page instance from memory
session.clear(); //clears session when doing batch updates