全文索引是分库的,单库查询采用串行执行(即单线程)。为了充分利用系统的多核资源,加快查询速度可以分成多库,合理设置并行度(即最大执行线程数),达到控制系统资源的目的。
修改单库数目
单个全文库的数目定义为一个 unit,是一个完整独立的全文索引结构,包含了字典和所有倒排信息。打分、排序也是在该库内计算的,与其他库无关。单库内查询采用串行的方式。对应配置项参数如下:
<maxDocPerUnit>100000000</maxDocPerUnit> |
修改查询并行度
查询并行度就是当前查询允许的最大执行线程数,每个并行组定义为一个 task。对应配置项参数如下:
<maxThreadPerTask>5</maxThreadPerTask> |
通过分库提高查询性能举例:假如当前表数据为 2 亿,服务器核数为 8,如果想令服务器查询达到最大性能,可以将 maxThreadPerTask 设置为 8,同时将maxDocPerUnit 设置为 25000000。能够使同时运行 8 线程并行,提升了查询速度。
通过执行分析全文命令提高查询性能
全文索引数据采用 block 存储,当多次更新索引后会导致倒排数据不连续,导致读写跳跃增大,从而影响查询性能。更新索引时加入分析指令会及时对不连续数据重整,提升 IO 速度,从而提升性能。该命令的语法格式如下:
UPDATE INDEX index_name ON table_name WITH ANALYZE; |
通过令全文库常驻内存提高查询性能
全文索引数据占用内存是比较多的(尤其是单词数大的时候),全文索引数据从磁盘读入内存是一个相对比较耗时的操作,当用户的服务器内存比较大的时候建议采用常驻内存模式(缺省模式),这样节约了加载时间,从而提高性能。对应配置项参数如下(0:常驻内存; 1:不常驻内存):
<reduceMemMode>0</reduceMemMode> |