最近对老旧系统改造需要提高大数据量的查询速度,引入了solr。建了个28803309条的索引:
但是查询时出现了后半部分数据无法全部查询出来:
第0-10条可以查出来,
solrQuery.setStart(0);
solrQuery.setRows(10);
第1千万到1千万零10条也可以查出来
solrQuery.setStart(10000000);
solrQuery.setRows(10000010);
但是当setStart()大到一定程度比如
solrQuery.setStart(18000000);
solrQuery.setRows(10)
时,solr服务器就崩溃掉了。必须重启solr服务。
原因分析:
solr的查询涉及到排序,文件里没法直接分页了,所以它是在内存中分页的。在内存中分页,查询速度也非常快,但是需要的内存大,空间换时间。
因此,解决方法:加大内存,查看/solr/bin/下的启动本solr
echo " -z <zkHost> Zookeeper connection string; only used when running in SolrCloud mode using -c"
echo " To launch an embedded Zookeeper instance, don't pass this parameter."
echo ""
echo " -m <memory> Sets the min (-Xms) and max (-Xmx) heap size for the JVM, such as: -m 4g"
echo " results in: -Xms4g -Xmx4g; by default, this script sets the heap size to 512m"
echo ""
echo " -s <dir>
可知,solr的启动脚本里默认情况下最大启动内存为512M ,通过启动参数 -m 重启内存为2G
[root@kaifa-19 bin]# ./solr start -m 2g
此时重新访问solr服务 查询任何区域不再崩溃。
可以根据自己的机器配置设置java的合理的jvm内存值