У меня есть программа Java, которая обеспечивает доступ к базе данных Postgres через JPA (EclipseLink).
Сначала я разрешил JPA создавать базу данных.
Затем я просматриваю java.sql.Connection (который я получаю от unraw() в менеджере сущностей) скрипт pgsql, который управляет созданной базой данных.
Менеджер сущности настроен на работу с пулом подключений (c3p0).
Часть скрипта отбрасывает ограничения на список таблиц.
По какой-то причине он застревает после того, как сбросил несколько таблиц.
Нет другой активной транзакции (pg_stat_activity), и нет никакой блокировки, которая не была предоставлена (pg_locks).
Я добавил отладочную печать до и после инструкции ограничения на падение, и они оба напечатаны, поэтому кажется, что она застревает в середине цикла. При выборе из pg_stat_activity следующие результаты возвращаются для соответствующей операции:postgres plsql script loop get stuck
Waiting: false
State: Active
Query: Empty
От проверить использование процессора и таких, кажется, процесс Postgres находится в режиме ожидания. Когда я запускаю скрипт из pgAdmin, он не застревает, только когда он запускается из программы Java. Обычно он застревает после 200 итераций цикла, но также застревает в других циклах. Проблема исчезла дважды после перезагрузки кода (true Vodou).
Меня больше интересуют инструменты анализа Postgres для таких сценариев. Любые идеи или техника для решения этого тупика будут оценены.
- Обходной путь, который решил проблему, заключался в том, чтобы открыть новое соединение jdbc и запустить его оттуда, но мне все же интересно понять, как решать такие проблемы в будущем.
Если вы используете Linux, пытались ли вы запустить 'strace -p' из процесса, который застрял? Вы можете увидеть pid, запросив «pg_stat_activity». Кроме того, каково значение столбца «состояние» запроса в 'pg_stat_activity'? –
bma
Я добавил недостающую информацию к вопросу. Благодарю. @bma –
Если на самом деле нет запросов на блокировку, и в db ничего не происходит, завершите процесс. Вот полезный учебник: http://www.hokstad.com/5-simple-ways-to-troubleshoot-using-strace – bma