2010-04-30 111 views
1

我正在通过MySQL使用sphinxse访问大型索引文本数据集。结果集的大小大小为千兆字节。但是,我注意到,只要数据集大于16MB,MySQL就会停止查询并出现以下错误:MySQL中大于16 MB的Sphinx结果集的问题

1430(HY000):在外部数据源上处理查询时出现问题。数据源错误:错误的searchd响应长度(长度= 16777523)

长度显示冒犯MySQL的结果集的长度。我已经用Sphinx的独立搜索程序尝试了相同的查询。它工作正常。我已经在MySQL和Sphinx中尝试过所有可能的变量,但没有任何帮助。

我正在使用Sphinx 0.9.9 RC-2和MySQL 5.1.46。

感谢

回答

0

你可能需要从16M它的默认值增加max_allowed_pa​​cket的:

mysql's documentation

客户端和服务器都有自己的max_allowed_pa​​cket个变量,所以,如果你想处理大数据包,您必须在客户端和服务器中增加这个变量。

如果您使用的是mysql客户端程序,则其默认的max_allowed_pa​​cket变量为16MB。要设置较大的值,启动mysql这样的:

壳>的MySQL --max_allowed_pa​​cket = 32M

即设置数据包大小为32MB。

+0

感谢您的回复。我已经在服务器以及客户端尝试了max_allowed_pa​​cket。它没有工作:( – gmemon 2010-05-01 13:33:54

1

我终于解决了这个问题。事实证明,MySQL的Sphinx插件(SphinxSE)在源代码中对结果集的16 MB响应限制进行了硬编码(坏的坏的源代码)。我在文件ha_sphinx.cc中将SPHINXSE_MAX_ALLOC更改为1 * 1024 * 1024 * 1024,现在一切正常。