在重负载的 SphinxSearch 中,dist_threads 必须正确设置

在重负载的 SphinxSearch 中,dist_threads 必须正确设置

我们有高负载的 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 完成,也可以利用所有核心)。

相关内容