首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我的Sphinx搜索服务器预热时发生了什么?

当我的Sphinx搜索服务器预热时发生了什么?
EN

Stack Overflow用户
提问于 2012-03-13 14:54:23
回答 2查看 1.2K关注 0票数 0

我在一台内存为38 of的Linux服务器上运行Sphinx Search。sphinx索引包含35M全文文档,外加从MySQL表索引的元数据。当我启动一个新的服务器时,我运行一个脚本,通过它发送我的10,000个最常见的查询来“预热sphinx缓存”。第一次运行预热脚本大约需要一个小时,但是如果我再次运行它,同样的脚本只需要几分钟就可以完成。

我之所以感到困惑,是因为Sphinx没有任何文档化的缓存,除了我没有使用的基于文件的缓存。索引在Sphinx启动时加载到内存中,但是在系统“预热”之后,每次运行单个查询都需要相同的时间长度。

当我运行我的脚本时,有一个明确的热身期。怎么一回事?Linux缓存是否可以帮助Sphinx运行得更快?底层的MySQL系统会缓存查询吗(我相信Sphinx基本上是一个自定义的MySQL存储引擎)?正在发生的事情如何让从未运行过的新查询变得更快?

我意识到这可能有一个非常复杂的解释,但即使是一点方向也应该有助于更深入地挖掘。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-13 22:17:06

(我相信Sphinx基本上是一个自定义的MySQL存储引擎) SphinxSE是一个“假的”存储引擎。假的,因为它不存储任何数据-而是从它的“表”中获取数据的请求,但实际上它只是将数据代理回后台正在运行的searchd实例。

searchd本身没有任何缓存-但正如前面提到的那样,从索引读取时,操作系统很可能会开始缓存文件-所以不必一直回到磁盘。

如果你使用的是SphinxSE -那么查询可能会被普通的mysql查询缓存-所以整个结果集都会被缓存。但在上瘾时,通常使用SphinxSE的方法是将搜索结果与原始数据集结合起来,这样你就可以一口气把它们都返回到应用程序中。因此,您的查询也依赖于真实的mysql数据表。它们将受到相同的操作系统缓存的影响-当mysql读取数据时,它将被缓存。

启动新服务器时出现

这是否表明您正在使用VM?如果是这样,虚拟磁盘实际上可能位于远程SAN上。(或亚马逊ec2上的EBS )

  • ,这意味着通过该路由加载一个大型的狮身人面像索引可能会很慢。

根据你的VM所在的位置,可能会得到一些特殊的高性能磁盘-理想情况下是主机本地的-甚至可能是SSD -这可能会很有帮助。

无论如何,为了跟踪这个问题,您几乎肯定应该启用sphinx查询日志。查看一下,看看那里的查询执行是否很慢。还有一个指向searchd的启动向上选项,您可以在其中启用iostats。这将在查询运行时将有关io统计信息的更多信息记录到查询日志中。这可以给你更多的洞察力。

票数 1
EN

Stack Overflow用户

发布于 2012-03-13 18:48:26

Sphinx不会缓存查询,但文件系统会缓存。所以,是的,第二次查询的执行速度比第一次快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9679549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档