我们有重载狮身人面像实例。索引是实时的,但我们每周只批量插入一次数据。
它运行在专用的 12 核/24 线程服务器上。
服务器只安装了狮身人面像。
这是 conf 文件的片段:
index data_all
{
type = distributed
local = data_0
local = data_1
local = data_2
local = data_3
}
searchd
{
listen = 9305:mysql41
listen = 9405
log = /usr/local/sphinx/var/log/searchd.log
query_log = /usr/local/sphinx/var/log/query.log
read_timeout = 5
max_children = 2000
pid_file = /usr/local/sphinx/var/log/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads
dist_threads = 4
binlog_path =
}
每个本地索引大约为 17 GB。
大多数时候服务器平均负载低于 2-3,但有时,机器的负载平均会飙升到 50 左右。
目前我们的响应时间非常好,即使在那些高峰期间也是如此。
我想知道dist_threads
。我需要保持 4(作为本地索引的数量)还是需要选择 24(CPU 线程的数量)。或者我应该选择 1,因为无论如何我们都有很多并行查询。
简短回答 - 设置必须等于本地索引的数量。
长答案 - 这取决于:
在 CPU 受限工作负载的情况下,建议将 dist_threads 设置为核心数的 1 倍(创建比核心更多的线程不会提高查询时间)。在混合 CPU/磁盘绑定工作负载的情况下,有时使用更多可能是有意义的(这样即使有等待 I/O 完成的线程也可以利用所有内核)。