Я использую PostgreSQL 8.2.9, Solr 3.1, Tomcat 5.5
У меня следующая проблема:Когда я выполняю delta-import - / dataimport? Command = delta-import - любые запросы на обновление базы данных не отвечают в течение 30 секунд.
Я могу легко повторить это поведение (используя psql или hibernate):
PSQL:
- Выполнение дельта-импорта
- Сразу же в psql - выполнить SQL-запрос: 'UPDATE table SET ... WHERE id = 1;»несколько раз
- Второй / третий / ... раз - я должен ждать ~ 30 секунд, пока запрос не вернется
Hibernate :
- В журналах - hibernate ожидает ~ 30 секунд для метода 'doExecuteBatch (...)' после установки параметров запроса
Никакие другие запросы не выполняются, когда я проверяю это.С другой стороны, когда я выполняю другие команды (например, полный импорт и т. Д.) - все работает отлично.
В dataconfig.xml от Solr:
- У меня readOnly установлен в true для источника данных PostgreSQL.
- deltaImportQuery, deltaQuery, ..на тегах сущностей не блокируют базу данных (простые SELECT)
Журналы веб-приложений (использующие спящий режим):
2012-01-08 18:54:52,403 DEBUG my.package.Class1... Executing method: save
2012-01-08 18:55:26,707 DEBUG my.package.Class1... Executing method: list
Журналы Solr:
INFO: [] webapp=/search path=/dataimport params={debug=query&command=delta-import&commit=true} status=0 QTime=1
2012-01-08 18:54:50 org.apache.solr.handler.dataimport.DataImporter doDeltaImport
INFO: Starting Delta Import
...
2012-01-08 18:54:50 org.apache.solr.handler.dataimport.JdbcDataSource$1 call
INFO: Time taken for getConnection(): 4
...
FINE: Executing SQL: select ... where last_edit_date > '2012-01-08 18:51:43'
2012-01-08 18:54:50 org.apache.solr.core.Config getNode
...
FINEST: Time taken for sql :4
...
INFO: Import completed successfully
2012-01-08 18:54:50 org.apache.solr.update.DirectUpdateHandler2 commit
INFO: start commit(optimize=true,waitFlush=false,waitSearcher=true,expungeDeletes=false)
2012-01-08 18:54:53 org.apache.solr.core.Config getNode
...
2012-01-08 18:54:53 org.apache.solr.update.DirectUpdateHandler2 commit
INFO: end_commit_flush
...
2012-01-08 18:54:53 org.apache.solr.handler.dataimport.DocBuilder execute
INFO: Time taken = 0:0:2.985
Там нет «ВЫБРАТЬ ... ДЛЯ ОБНОВЛЕНИЯ / LOCK / и т. Д."запросы в журналах выше.
Я установил ведение журнала для PostgreSQL - там нет блокировок.Даже сеансы установлены на:
Jan 11 14:33:07 test postgres[26201]: [3-1] <26201> LOG: execute <unnamed>: SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY
Jan 11 14:33:07 test postgres[26201]: [4-1] <26201> LOG: execute <unnamed>: SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Почему это происходит?Это похоже на какую-то блокировку базы данных, но почему тогда, когда импорт завершен (2 секунды), запросы все еще ждут (в течение 30 секунд)?