Эксперты Lucene: как лучше всего проводить диагностику на IndexWriter для решения проблем с производительностью? - PullRequest
3 голосов
/ 03 ноября 2011

У меня есть индекс, который в настоящее время занимает около 1 ГБ пространства и содержит около 2,5 миллионов документов.Индекс хранится на твердотельном диске для скорости.Я добавляю 2500 документов за раз и фиксирую после добавления каждого пакета.Индекс является «живым» и должен постоянно обновляться в течение дня и ночи, поэтому минимизация скорости записи очень важна.Я использую коэффициент слияния 10 и никогда не вызываю Optimize(), скорее позволяя индексу оптимизироваться по мере необходимости на основе коэффициента слияния.

Мне нужно зафиксировать документы после добавления каждого пакетапотому что я записываю этот факт, чтобы в случае сбоя или перезапуска приложения оно могло начать с того места, где оно остановилось.Если бы я не зафиксировал, сохраненное состояние было бы несовместимо с тем, что находится в индексе.Я предполагаю, что мои добавления, удаления и обновления будут потеряны, если писатель будет уничтожен без фиксации.

Во всяком случае, я заметил это после произвольного периода времени, который может составлять от двух минут до двух часов.и какое-то переменное число предыдущих коммитов, похоже, что индексатор зависает в методе IndexWriter.AddDocument(doc), и я не могу понять, почему он останавливается или как его исправить.Блок может оставаться на месте более двух часов, что кажется странным для индекса, занимающего менее 2 ГБ в миллионах документов и имеющего SSD-накопитель для работы.

Что может привести к блокировке AddDocument?Существуют ли какие-либо диагностические утилиты Lucene, которые могут мне помочь?Что еще я могу найти, чтобы отследить проблему?

1 Ответ

1 голос
/ 05 ноября 2011

Вы можете использовать IndexWriter.SetInfoStream () для перенаправления вывода диагностики в поток, который может дать вам подсказку о том, что не так.

...