码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:lucene   索引   

同事调整了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

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

标签:lucene   索引   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!