Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Функция to_tsquery тормозит при использовании ispell словарей. / 5 сообщений из 5, страница 1 из 1
29.08.2008, 23:39
    #35514152
phprus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_tsquery тормозит при использовании ispell словарей.
Есть PostgreSQL версии 8.3.1 на OpenSuSe 11.0.

Я создал свою полнотекстовую конфигурацию, в которую добавил ispell словари для русского языка. В результате первый запрос в каждом подключении использующий to_tsquery с этой конфигурацией сильно тормозит (время выполнения более 1-й секунды). Последующие запросы в этом-же соединении с БД и использующие to_tsquery выполняются за считанные десятки миллисекунд.

Я подозреваю, что проблема в том, что словари парсятся при каждом коннекте заново. Вывод о том, что тормозит именно to_tsquery я сделал на основе того, что при использовании стандартной конфигурации pg_catalog.russian тот-же самый запрос выполняется за считанные десятки миллисекунд в любом случае.

Подскажите пожалуйста как быть и как можно поступить в данной ситуации.
...
Рейтинг: 0 / 0
30.08.2008, 12:35
    #35514290
stepa83
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_tsquery тормозит при использовании ispell словарей.
Всё верно, загрузка словаря выполняется при первом его использовании, в каждой сессии.
Если приложение позволит, то можно использовать пул соединений (pgpool/pgpoolII, pgbouncer).
...
Рейтинг: 0 / 0
30.08.2008, 12:40
    #35514294
phprus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_tsquery тормозит при использовании ispell словарей.
А существует ли возможность заставить Postgres загрузить словари один раз без использования пулов соединений?
...
Рейтинг: 0 / 0
01.09.2008, 17:07
    #35516523
KRED
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_tsquery тормозит при использовании ispell словарей.
Я не могу сказать как так сделать .... но если немного подумать можно предположить что тогда тормоза будут в момент создания сессии ... и "тормоза" появяться где угодно ... оно того стоит ?

Используйте пуллы соединений ... а там уже прикрутите какой то тестовый запрос "select to_tsquery(string) "
...
Рейтинг: 0 / 0
03.09.2008, 19:18
    #35521245
iz
iz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_tsquery тормозит при использовании ispell словарей.
Все правильно, других возможностей кроме использования пулера сейчас не существует. Есть патч от Феди Сигаева к pgbouncer, который позволяет выполнить произвольную функцию (для подготовки каких-либо запросов и FTS в первую очередь) при создании PostgreSQL-бакенда (мы тестировали его в production), подобная функциональность есть в pgpool, если он вам больше нравится.

Есть и другая составляющая проблемы. Представьте 100 бакендов, в каждом из которых были подняты в неразделяемую память испелл-библиотеки, средний размер которых (в зависимости от словарей) составляет 25 МБ. Мы получаем 2.5 ГБ памяти израсходованных фактически впустую, что в некоторых случаях может сильно мешать системе. Так что на самом деле у Олега и Феди есть item о вынесении подобного рода данных в разделяемую память (есть, правда, идеологические сложности, вроде того, что в shared buffers всего PostgreSQL это сделать никто не даст), что помимо прочих бонусов позволит свежему бакенду пользоваться "горячими" данными сразу, а не читая их с диска.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Функция to_tsquery тормозит при использовании ispell словарей. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]