首页 > 其他 > 详细

建索引时优化的观察和思考

时间:2014-05-10 04:33:23      阅读:368      评论:0      收藏:0      [点我收藏+]

同事调整了IndexWriterConfig的maxThreadStates参数,发现性能有很大提升,原来之前一直没去注意这个东西。

addDocument时默认会调用ThreadAffinityDocumentsWriterThreadPool来获取线程锁,而这个线程池默认是8个线程,如果同时addDocument的线程多于8个,则线程处在等待锁的状态(一般是等最小竞争的>锁),所以本质上要在indexwriterconfig中增加最大索引线程数。

Lucene中还存在一个FlushStallControl,用于平衡addDocument和flush之间的速度差,如果flushBytes + activeBytes > 2 * ramBytes,且flushBytes > 0,则addDocument线程被暂停,直到flush完成。这有一个启发,最好监控下等待时间,如果等待时间太长,是不是考虑硬盘换一下?

另外使用LogByteMergePolicy的确比LogDocMergePolicy好,原因是这样内存平稳一点,表现略好。RamBufferSize是个很微妙的参数,理论上越大,索引归并的趟数越少,有利于减少归并时间,对建索引本身速度的影响,考虑addDocument和flush的平衡这一瓶颈,如果硬盘使用ssd(即等待时间变得超短,而且很少等待),段应该大一点好?这好像很难说清,从小索引测试结果来看,200M左右性能最好。

建索引时优化的观察和思考,布布扣,bubuko.com

建索引时优化的观察和思考

原文:http://blog.csdn.net/jollyjumper/article/details/25428381

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!