Проблема с набором результатов Sphinx размером более 16 МБ в MySQL

Я получаю доступ к большому набору индексированных текстовых данных, используя sphinxse через MySQL. Размер набора результатов составляет порядка гигабайт. Однако я заметил, что MySQL останавливает запрос со следующей ошибкой всякий раз, когда набор данных превышает 16 МБ:

1430 (HY000): возникла проблема при обработке запроса к внешнему источнику данных. Ошибка источника данных: неправильная длина ответа searchd (длина = 16777523)

length показывает длину результирующего набора, который оскорбил MySQL. Я попробовал тот же запрос с автономной программой поиска Sphinx. Это работает нормально. Я пробовал все возможные переменные как в MySQL, так и в Sphinx, но ничего не помогает.

Я использую Sphinx 0.9.9 rc-2 и MySQL 5.1.46.

Спасибо


person gmemon    schedule 30.04.2010    source источник


Ответы (2)


Я наконец решил проблему. Оказывается, плагин sphinx для mysql (SphinxSE) жестко кодирует ограничение ответа в 16 МБ для набора результатов в исходном коде (плохой, плохой, плохой исходный код). Я изменил SPHINXSE_MAX_ALLOC на 1*1024*1024*1024 в файле ha_sphinx.cc, и теперь все работает нормально.

person gmemon    schedule 02.05.2010

вам, вероятно, нужно увеличить max_allowed_packet со значения по умолчанию 16M:

Из документации mysql

И клиент, и сервер имеют свою собственную переменную max_allowed_packet, поэтому, если вы хотите обрабатывать большие пакеты, вы должны увеличить эту переменную как на клиенте, так и на сервере.

Если вы используете клиентскую программу mysql, ее переменная max_allowed_packet по умолчанию равна 16 МБ. Чтобы установить большее значение, запустите mysql следующим образом:

оболочка> mysql --max_allowed_packet=32M

Это устанавливает размер пакета 32 МБ.

person ggiroux    schedule 01.05.2010
comment
Спасибо за ваш ответ. Я уже пробовал max_allowed_packet как на сервере, так и на клиенте. Это не сработало :( - person gmemon; 01.05.2010