Проблема с набором результатов Sphinx, больше чем 16 МБ в MySQL - PullRequest
1 голос
/ 01 мая 2010

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

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

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

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

Спасибо

Ответы [ 2 ]

1 голос
/ 02 мая 2010

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

0 голосов
/ 01 мая 2010

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

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

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

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

shell> mysql --max_allowed_packet = 32M

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

...