Я пытаюсь понять, почему у меня в журнале postgresql появляются странные записи после перезапуска:
2010-05-14 11:30:25 EEST LOG: database system was shut down at 2010-05-14 11:30:22 EEST
2010-05-14 11:30:25 EEST LOG: autovacuum launcher started
2010-05-14 11:30:25 EEST LOG: database system is ready to accept connections
2010-05-14 11:30:25 EEST LOG: incomplete startup packet
2010-05-14 11:30:40 EEST WARNING: there is already a transaction in progress
2010-05-14 11:30:40 EEST LOG: could not receive data from client: Connection reset by peer
2010-05-14 11:30:40 EEST LOG: unexpected EOF on client connection
Во-первых, есть 2010-05-14 11:30:25 EEST LOG: incomplete startup packet
что меня беспокоит. Кто-нибудь знает, почему это происходит?
А еще это очень странно: 2010-05-14 11:30:40 EEST WARNING: there is already a transaction in progress
...
incomplete startup packet
означает, что соединение было установлено, но сервер Postgres не получил ожидаемого рукопожатия (я получаю тонну этого, поскольку моя система мониторинга проверяет, открыт ли порт 5432, но недостаточно умен, чтобы войти в систему и запросить БД).
Независимо от того, является ли это проблемой, зависит от того, ожидаете ли вы, что что-то будет подключаться, а не рукопожатие: для меня это не проблема, если вы этого не ожидаете, но если вы этого не ожидаете, это сообщение может быть признаком того, что вы Сканируем порт.
WARNING: there is already a transaction in progress
означает именно то, что он говорит: кто-то пытался начать транзакцию, уже находясь в транзакции (BEGIN ... BEGIN
).
Если вы часто это видите, кто-то написал плохой SQL в программе, и вы должны найти / исправить его, потому что соответствующий COMMIT
и ROLLBACK
утверждения могут не делать то, что вы ожидаете. Если вы видите это один раз и больше никогда, кто-то, вероятно, натолкнулся на транзакцию в psql.
В нашей среде неполный стартовый пакет вызван тем, что haproxy отправляет контрольный сигнал с программируемым интервалом (для нас каждые 600000 миллисекунд). Мы используем haproxy в режиме TCP для ретрансляции запросов бизнес-пользователей на повторный запуск отчетов postgres.