MySQL中大于16 MB的Sphinx结果集的问题
问题描述:
我正在通过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。
感谢
答
你可能需要从16M它的默认值增加max_allowed_packet的:
客户端和服务器都有自己的max_allowed_packet个变量,所以,如果你想处理大数据包,您必须在客户端和服务器中增加这个变量。
如果您使用的是mysql客户端程序,则其默认的max_allowed_packet变量为16MB。要设置较大的值,启动mysql这样的:
壳>的MySQL --max_allowed_packet = 32M
即设置数据包大小为32MB。
答
我终于解决了这个问题。事实证明,MySQL的Sphinx插件(SphinxSE)在源代码中对结果集的16 MB响应限制进行了硬编码(坏的坏的源代码)。我在文件ha_sphinx.cc中将SPHINXSE_MAX_ALLOC更改为1 * 1024 * 1024 * 1024,现在一切正常。
感谢您的回复。我已经在服务器以及客户端尝试了max_allowed_packet。它没有工作:( – gmemon 2010-05-01 13:33:54