我们有高负载的 sphinx 实例。索引是实时的,但我们大约每周只批量插入一次数据。
它运行在专用的 12 核/24 线程服务器上。
服务器仅安装了 sphinx。
以下是 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,因为我们无论如何都有很多并行查询。
答案1
简短的回答 - 设置必须等于本地索引的数量。
长答案-这取决于:
如果工作负载受 CPU 限制,建议将 dist_threads 设置为 1 倍核心数(创建的线程数多于核心数不会缩短查询时间)。如果工作负载受 CPU/磁盘限制,有时使用更多核心可能更有意义(这样即使有线程等待 I/O 完成,也可以利用所有核心)。