当我的Sphinx搜索服务器升温时会发生什么?

时间:2012-03-13 06:54:23

标签: mysql linux caching sphinx

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

我的困惑是因为Sphinx没有任何文档化的缓存,除了我没有使用的基于文件的缓存。当Sphinx启动时,索引会加载到内存中,但是在系统“预热”后,每次查询时,每个查询都会占用相同的时间。

运行脚本时有一个明确的预热期。到底是怎么回事? Linux缓存是否能帮助Sphinx更快地运行?底层MySQL系统是否缓存查询(我相信Sphinx基本上是一个自定义MySQL存储引擎)?从未发生过的新查询如何通过正在进行的操作更快地完成?

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

2 个答案:

答案 0 :(得分:1)

  

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

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

如果您正在使用SphinxSE - 那么查询可能会被正常的mysql查询缓存缓存 - 因此整个结果集都会被缓存。但另一方面,使用SphinxSE的常用方法是将搜索结果与原始数据集一起加入,这样您就可以一次性返回到应用程序。所以你的查询也依赖于真正的mysql数据表。并且它们将受到相同的OS缓存 - 因为mysql读取将被缓存的数据。

  

当我启动新服务器时

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

  • 这意味着通过该路线加载大型狮身人面像指数可能会很慢。

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


无论如何要追踪问题,你几乎肯定会启用sphinx查询日志。查看那个以查看查询是否在那里执行缓慢。 searchd也有一个启动upoption - 你可以在哪里启用iostats。这将在运行查询时将更多信息记录到有关io stats的quyery日志中。这可以为您提供更多见解。

答案 1 :(得分:0)

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

相关问题