9.4.searchd程序配置选项
9.4.1.listen
指定searchd
监听的IP地址和端口,或UNIX域socket的路径。于版本0.9.9-rc1引入。
一个非正式的listen
语法说明如下:
listen = ( address ":" port | port | path ) [ ":" protocol ]
即,用户可以指定IP地址(或主机名)和端口号,或者仅仅是端口号,或者Unix socket的路径。如果仅指定了端口号而没有地址,那么searchd
会在所有的网络接口上监听。Unix路径都带有一个前导的斜杠”/”
从版本0.9.9-rc2开始,还可以指定一个协议处理器(protocl handler),或者叫监听器(listener),应用于这个socket上的连接。支持的协议值包括‘sphinx’(Sphinx 0.9.x API协议)和mysql41(版本4.1到至少5.1的MySQL使用的协议)。关于MySQL协议的更多细节可以参考Section4.9, “MySQL 协议支持与 SphinxQL”。
示例:
listen = localhost listen = localhost:5000 listen = 192.168.0.1:5000 listen = /var/run/sphinx.s listen = 9312 listen = localhost:9306:mysql41
可以有多个listen指令,searchd
会在所有这些指令纸浆的端口和socket上监听,以备用户连接。如果没有找到listen
指令,服务器会在所有的网络接口上用默认端口(9312)监听
在Windows上不支持Unix socket。
9.4.2.address
要绑定的接口IP地址。可选项,默认为0.0.0.0(即在所有接口上监听)。不推荐, 建议使用listen。
address
设置指定searchd
在哪个接口上绑定、监听和接受输入的网络连接。默认值为0.0.0.0,意思是在所有接口上监听。目前不能指定多个接口。
示例:
address = 192.168.0.1
9.4.3.port
searchd
的TCP端口号。不推荐, 建议使用listen。 必选项,默认为9312。
示例:
port = 9312
9.4.4.log
日志文件名。可选项,默认为“searchd.log”。全部searchd
运行时事件会被记录在这个日志文件中。
示例:
log = /var/log/searchd.log
9.4.5.query_log
查询日志文件名。可选项,默认为空(不记录查询日志)。全部搜索查询会被记录在此文件中。其格式在Section4.8, “searchd
查询日志格式”中描述
示例:
query_log = /var/log/query.log
9.4.6.read_timeout
网络客户端请求的读超时时间,单位是秒。可选项,默认是5秒。searchd
强制关闭在此时间内未能成功发出查询的客户端连接。
示例:
read_timeout = 1
9.4.7.client_timeout
在使用持久连接时,两次查询之间等待的最长时间(单位是秒)。可选选项,默认是5分钟。
示例:
client_timeout = 3600
9.4.8.max_children
子进程的最大数量(或者说,并行执行的搜索的数目)。可选项,默认为0,不限制。
用来控制服务器负载。任何时候不可能有比此设置值更多的搜索同时运行。当达到限制时,新的输入客户端会被用临时失败(SEARCH_RETRY)状态码驳回,同时给出一个声明服务器已到最大连接限制的消息。
示例:
max_children = 10
9.4.9.pid_file
searchd
进程ID文件名。必选项。
PID文件会在启动时重建(并锁定)。主守护进程运行时它含有该进程的ID,而当守护进程退出时该文件会被删除。这个选项是必须的,因为Sphinx在内部使用它做如下事:检查是否已有一个searchd
示例;停止searchd
;通知searchd
应该轮换索引了。也可以被各种不同的外部自动化脚本所利用。
示例:
pid_file = /var/run/searchd.pid
9.4.10.max_matches
守护进程在内存中为每个索引所保持并返回给客户端的匹配数目的最大值。可选选项,默认值为1000。
引入此选项是为了控制和限制内存使用,max_matches
设置定义了搜索每个索引时有多少匹配项会保存在内存中。每个找到的匹配项都会被处理,但只有它们中最佳的N个会在内存中保持并最终返回给客户端。假设索引中包括2000000个当前查询的匹配项,你几乎总是不需要它们中的全部。 通常您需要扫描它们并根据某种条件(即按相关度排序、或者价格、或者其他什么)选出最好的那些,比如500个,并以在页面上显示20到100项。只跟踪最 好的500个匹配要比保持全部的2000000个匹配项大大地节约内存和CPU,之后可以对这些最佳匹配排序,然后丢弃除了要在页面上要显式的20项之外 的结果。max_matches
控制“最佳N个匹配”中的N。
此参数明显影响每个查询消耗的内存和CPU。1000到10000的值通常就可以满足需求,但更高的值要小心使用。粗心地把max_matches
增加到1000000意味着searchd
被迫为每一个查询分配1M条匹配项的缓冲。这会明显增大查询的内存消耗,有时会明显影响性能。
特别注意!此限制还可在另一个地方指定。max_matches
可以通过对应的API调用实时降低,该调用的默认值也是1000。因此要使应用程序获取超过1000个匹配结果,必须修改配置文件,重启searchd,再用SetLimits()调用设置合适的限制。还要注意,API调用设置的限制不能大于.conf文件中的设置,这是为了预防恶意的或错误的请求。
示例:
max_matches = 10000
9.4.11.seamless_rotate
防止searchd
轮换在需要预取大量数据的索引时停止响应。可选选项,默认为1(启用无缝(seamless)轮换)。
索引可能包含某些需要预取到内存中的数据。目前.spa
,.spi
和.spm
文件会被完全预取到内存中(它们分别包含属性数据,MVA数据和关键字索引)。若无无缝轮换,轮换索引时会尽量使用较小的内存,并如下工作:
- 新的查询暂时被拒绝(用“retry”错误码);
searchd
等待目前正在运行的查询结束;- 旧的索引被释放,文件被重命名;
- 新的索引文件被重命名,分配所需的内存;
- 新的索引属性和字典数据预调进内存;
searchd
恢复为新索引提供查询服务。
然而,如果有大量的属性或字典数据,那么预调数据的步骤可能消耗大量的时间——预调1.5GB的文件可能需要几分钟的时间。
当启用了无缝轮换,轮换按如下工作:
- 为新索引分配内存;
- 新索引的属性和字典数据异步地预调进内存;
- 如果成功,旧的索引被释放,新旧索引文件被重命名;
- 如果失败,释放新索引;
- 在任意时刻,查询服务都正常运行——或者使用旧索引,或者使用新索引。
无缝轮换以轮换过程中更大的峰值内存消耗为代价(因为当预调新索引时.spa/.spi/.spm
数据的新旧拷贝需要同时保持在内存中)。平均内存耗用不变。
示例:
seamless_rotate = 1
9.4.12.preopen_indexes
是否在启动是强制重新打开所有索引文件。可选选项,默认为0(不重新打开)。对所有提供服务的索引强制打开preopen选项,免得对每个索引手工指定了。
示例:
preopen_indexes = 1
9.4.13.unlink_old
索引轮换成功之后,是否删除以.old为扩展名的索引拷贝。可选选项,默认为1(删除这些索引拷贝)。
示例:
unlink_old = 0
9.4.14.attr_flush_period
用UpdateAttributes()
实时更新文档属性时,所产生的变化首先写入到这些属性在内存中的一份拷贝中(必须将docinfo
设置成extern
)。其后,一旦searchd
正常关闭(通过发送SIGTERM
信号),这些变化才写入磁盘。于版本0.9.9-rc1中引入。
从版本0.9.9-rc1开始,可以令searchd
每隔一段时间就将变化写回磁盘,防止丢失这些变化。这个间隔时间通过attr_flush_period
选项设置,单位是秒。
默认值是0,即关闭隔一段时间就将变化写回磁盘的特性,但是正常关闭时的写回不被关闭。
示例:
attr_flush_period = 900 # persist updates to disk every 15 minutes
9.4.15.ondisk_dict_default
对ondisk_dict指令的全局的默认值。 可选选项,默认值是0(将字典预先缓冲到内存)。于版本0.9.9-rc1中引入。
这个选项用于为当前使用的这份searchd
正在提供服务的所有索引指定ondisk_dict选项的默认值。如果某个索引的这个选项做了显式设定,那么这个设定覆盖上述实例级的默认设置,这种机制提供了细粒度的控制。
示例:
ondisk_dict_default = 1 # keep all dictionaries on disk
9.4.16.max_packet_size
网络通讯时允许的最大的包的大小。这个限制既对来自客户端的查询包有效,也对分布式环境下远程代理返回的响应包有效。只用于内部校验,不直接影响内存占用和性能。可选选项,默认值是8M。于版本0.9.9-rc1引入。
示例:
max_packet_size = 32M
9.4.17.mva_updates_pool
用于多值属性MVA更新的存储空间的共享池大小。可选选项,默认大小是1M。于版本0.9.9-rc1引入。
这个设置控制用于存储多值属性MVA更新后的值共享存储池的大小。如果指定大小为0则意味着完全禁用多值属性MVA的更新。一旦达到了这个内存池大 小的限制,尝试更新多值属性MVA将得到错误。但普通的(标量的)属性仍然可以更新。由于内部实现上的技术困难,一旦多值属性MVA有所更新,则索引上发 生的任何更新改变都不能在索引重建前被写入(store,flush)磁盘,尽管这可能在未来实现。同时,多值属性MVA是设计用来在索引重建前迅速反应数据库中的变化,而不是一种永久存储的机制。
示例:
mva_updates_pool = 16M
9.4.18.crash_log_path
崩溃日志文件的路径(正式地说叫做前缀)。可选选项,默认值为空(不创建崩溃日志文件)。于版本0.9.9-rc1引入。
这个选项用于调试,有了它就可以捕捉那些个别的令人不快的造成崩溃的查询,而不比影响正在使用的用于生产的服务器实例。一旦启用了这个选项,searchd
会拦截造成崩溃的信号,例如SIGSEGV,并将那些不愉快的查询包转储到一个叫做“crash_log_path.PID”的文件中,其中PID是崩溃了的进程的ID。
示例:
crash_log_path = /home/sphinx/log/crashlog
9.4.19.max_filters
Maximum allowed per-query filter count. Only used for internal sanity checks, does not directly affect RAM use or performance. Optional, default is 256. Introduced in version 0.9.9-rc1. 每次查询允许设置的过滤器的最大个数。只用于内部检查,不直接影响内存使用或性能。可选选项,默认值是256。于版本0.9.9-rc1引入。
示例:
max_filters = 1024
9.4.20.max_filter_values
单个过滤器允许的值的最大个数。只用于内部检查,不直接影响内存使用或性能。可选选项,默认值是4096。于版本0.9.9-rc1引入。
示例:
max_filter_values = 16384
9.4.21.listen_backlog
TCP监听积压列表长度。可选选项,默认值是5。
在Windows系统上创建的Sphinx目前(版本0.9.9)只能一个接一个地处理请求。同时发生的请求会被操作系统级别的TCP协议栈装入到 一个队列中,无法如对的请求立即失败并收到“连接被拒”错误信息。listen_backlog选项控制这个连接队列的长度。非Windows平台上创建 的Sphinx使用默认值即可。
示例:
listen_backlog = 20
9.4.22.read_buffer
每个关键字的读缓冲区的大小。可选选项,默认值是256K。
对于每个搜索查询中的每个关键词,有两个相关的读缓冲区(一个针对文档列表,一个针对关键词出现位置列表)。本选项允许控制他们的大小,增加每次查询的内存占用,但可能会减少IO时间。
示例:
read_buffer = 1M
9.4.23.read_unhinted
无提示时读操作的大小。可选选项,默认值是32K。
当系统处理查询时,对于一些读取操作,系统预先就知道要读取的数据的确切长度,但是有一些却相反。其中对常见的是已匹配位置列表(hitlist) 的长度目前是无法预先取得的。这个选项控制在这些情况下读物读取多少数据。它会影响IO时间,对于比本选项设置值大的列表,IO时间减少,而对于那些较小 的列表则是IO时间增加。内存占用不受影响,因为读缓冲区已经是分配好了的。也因此这个选项的设置值不能超过选项read_buffer的设置值。
示例:
read_unhinted = 32K