zoukankan      html  css  js  c++  java
  • 建索引时优化的观察和思考

    同事调整了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左右性能最好。

  • 相关阅读:
    【2019/3/23】周进度报告
    第十周总结
    程序员修炼之道-从小工到专家阅读笔记01
    第九周总结
    用户模板和用户场景
    一维数组最大子数组续
    程序员的自我修养阅读笔记03
    第八周总结
    NABCD项目分析
    第七周总结
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5182886.html
Copyright © 2011-2022 走看看