У меня есть встроенный сервер Solr, который я использую в сочетании с Spring Data Solr. У меня около 600 тыс. документов, занимающих 3 ГБ. Во время запуска Solr требуется несколько минут, прежде чем можно будет выполнить первый запрос. С VisualVM я смог отследить узкое место, которое, кажется, загружает первый документ, где декомпрессия LZ4 занимает много времени при чтении с диска. Трассировка выглядит так:
searcherExecutor-5-thread-1
java.lang.Thread.run()
java.util.concurrent.ThreadPoolExecutor$Worker.run()
java.util.concurrent.ThreadPoolExecutor.runWorker()
java.util.concurrent.FutureTask.run()
java.util.concurrent.FutureTask$Sync.innerRun()
org.apache.solr.core.SolrCore$5.call()
org.apache.solr.handler.component.SuggestComponent$SuggesterListener.newSearcher()
org.apache.solr.spelling.suggest.SolrSuggester.reload()
org.apache.solr.spelling.suggest.SolrSuggester.build()
org.apache.lucene.search.suggest.Lookup.build()
org.apache.lucene.search.suggest.analyzing.AnalyzingSuggester.build()
org.apache.lucene.search.suggest.DocumentDictionary$DocumentInputIterator.next()
org.apache.lucene.index.IndexReader.document()
org.apache.lucene.index.BaseCompositeReader.document()
org.apache.lucene.index.SegmentReader.document()
org.apache.lucene.codecs.compressing.CompressingStoredFieldsReader.visitDocument()
org.apache.lucene.codecs.compressing.CompressionMode$4.decompress()
org.apache.lucene.codecs.compressing.LZ4.decompress()
org.apache.lucene.store.BufferedIndexInput.readBytes()
org.apache.lucene.store.BufferedIndexInput.readBytes()
org.apache.lucene.store.BufferedIndexInput.refill()
org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput.readInternal()
java.io.RandomAccessFile.seek[native]()
Мне нужны сохраненные поля для сопоставления объектов. Я не понимаю, почему так много декомпрессии должно происходить при загрузке одного документа. Это похоже на то, что справочная таблица декомпрессии огромна. Любые советы/советы?