8.3.1. mem_limit
索引过程内存使用限制。可选选项,默认 32M。
这是indexer不会超越的强制内存限制。可以以字节、千字节(以K为后缀)或兆字节(以 M为后缀)为单位。参见示例。当过小的值导致 I/O缓冲低于 8KB时该限制会自动提高,此值的最低限度依赖于待索引数据的大小。如果缓冲低于 256KB,会产生警告。
最大可能的限制是2047M。太低的值会影响索引速度,但256M到">1024M对绝大多数数据集(如果不是全部)来说应该足够了。这个值设得太高可能导致 SQL服务器连接超时。在文档收集阶段,有时内存缓冲的一部分会被排序,而与数据库的通信会暂停,于是数据库服务器可能超时。这可以通过提高SQL服务器端的超时时间或降低mem_limit来解决。
示例:
mem_limit = 256M
# mem_limit = 262144K # same, but in KB
# mem_limit = 268435456 # same, but in bytes
8.3.2. max_iops
每秒最大I/O操作次数,用于限制I/O操作。可选选项,默认为0(无限制)。与I/O节流有关的选项。它限制了每秒钟最大的I/O操作(读或写)的次数。值0意思是不加限制。
indexer在索引时可能导致突发的密集磁盘 I/O,因此需要限制它磁盘活动(给同一台机器上运行的其他程序留出一些资源,比如searchd)。I/O节流就是用来实现上述功能的。它的工作原理是,在indexer的连续磁盘 I/O操作之间强制增加一个保证的延迟。现代SATA硬盘每秒钟可以执行多达 70-100以上次的I/O操作(主要受磁头寻道时间的限制)。将索引I/O限制为上述数值的几分之一可以减轻由索引带来的搜索性能下降。
示例:
max_iops = 40
8.3.3. max_iosize
最大允许的I/O操作大小,以字节为单位,用于 I/O节流。可选选项,默认为0(不限制)。
与I/O节流有关的选项。它限制indexer文件I/O操作的单次最大大小。值0代表不加限制。超过限制的读写操作会被分成几个小的操作,并被 max_iops 计为多次。在本文写作时,全部 I/O操作都被限制在256KB以下(默认的内部缓冲大小),因此大于 256KB的max_iosize值没有任何作用。
示例:
max_iosize = 1048576