Postgres.exe вылетает и разрывает все приложения, восстанавливается и снова запускается

#postgresql

Вопрос:

Я запускаю приложение с примерно 20 процессами, подключенными к базе данных postgres (10.0) в Windows server 2016.

Примерно с месяца у меня случаются неожиданные сбои postgres.exe. Чтобы изолировать проблему, я расширил ведение журнала, установив log_min_duration_statement = 0

Это создает более подробный файл журнала. Что я могу видеть, так это:

 LOG:  server process (PID xxxxx) was terminated by exception
0xFFFFFFFF DETAIL:  Failed process was running: COMMIT HINT:  See C
include file "ntstatus.h" for a description of the hexadecimal value.
 

Затем он разрушает все 20 процессов, подобных этому:

 LOG:  terminating any other active server processes
WARNING:  terminating connection because of crash of another server process
DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
HINT:  In a moment you should be able to reconnect to the database and repeat your command.
WARNING:  terminating connection because of crash of another server process
DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.Then DB recovers:
HINT:  In a moment you should be able to reconnect to the database and repeat your command.
LOG:  all server processes terminated; reinitializing
LOG:  database system was interrupted; last known up at 2021-06-11 18:17:18 CEST
 

БД переходит в режим восстановления

 FATAL:  the database system is in recovery mode
FATAL:  the database system is in recovery mode
FATAL:  the database system is in recovery mode
FATAL:  the database system is in recovery mode
LOG:  database system was not properly shut down; automatic recovery in progress
...
LOG:  redo starts at 1B2/33319E58
FATAL:  the database system is in recovery mode
LOG:  invalid record length at 1B2/33D29930: wanted 24, got 0
LOG:  redo done at 1B2/33D29908
LOG:  last completed transaction was at log time 2021-06-11 18:21:39.830526 02
FATAL:  the database system is in recovery mode
...
FATAL:  the database system is in recovery mode
LOG:  database system is ready to accept connections
 

Теперь он снова работает как обычно

Разбившийся PID xxxxx, который я могу идентифицировать с postgres.exe выполняется для одного из 20 прикладных процессов. Это не всегда одно и то же. Это происходит примерно каждые 5-10 дней.

Кто-нибудь может дать мне несколько советов, как отследить причину этой аварии?

Используемые расширения:

 oracle_fdw 2.0.0, PostgreSQL 10.0, Oracle client 11.2.0.3.0, Oracle server 11.2.0.2.0
 

Крашдамп:

Перейдите по ссылке : https://wiki.postgresql.org/wiki/Getting_a_stack_trace_of_a_running_PostgreSQL_backend_on_Windows

Хотя пользователь postgres имеет «полный контроль» над папкой crashdump на вкладке безопасность, он ничего не пишет. Папка остается пустой.

Продолжение комментария @Laurenz Albe: Фиксация не является причиной сбоя. Это последняя успешно выполненная команда сеанса. Объяснено на следующем примере:

Процесс получает работу и начинает выполнять свою работу

 2021-06-15 16:27:51.100 CEST [25604] LOG:  duration: 0.061 ms  statement: DISCARD ALL
2021-06-15 16:27:51.100 CEST [25604] LOG:  duration: 0.012 ms  statement: BEGIN
2021-06-15 16:27:51.100 CEST [25604] LOG:  duration: 0.015 ms  statement: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
 

сейчас много действий происходит в рамках сеанса 25404
и, среди прочего, в oracle foreign datawrapper

 2021-06-15 16:28:13.792 CEST [25604] LOG:  duration: 0.016 ms  execute <unnamed>: FETCH ALL FROM "<unnamed portal 689>"
 

успешно завершает действие (данные транзакции в базе данных)

 2021-06-15 16:28:13.823 CEST [25604] LOG:  duration: 0.059 ms  statement: COMMIT
 

много действий происходит в разных сеансах
, в том числе в oracle foreign datawrapper

еще через 7 минут после этого запрашивается следующее задание, и теперь postgres.exe крушение

 2021-06-15 16:36:01.524 CEST [17904] LOG:  server process (PID 25604) was terminated by exception 0xFFFFFFFF
 

Процесс не ОТМЕНЯЕТ ВСЕ, НЕ НАЧИНАЕТ и не УСТАНАВЛИВАЕТ УРОВЕНЬ ИЗОЛЯЦИИ ТРАНЗАКЦИЙ ЧТЕНИЕ ЗАФИКСИРОВАНО
Он немедленно выходит из строя

Мой вывод: «возможно, поврежденная общая память» была инициирована одним из предыдущих процессов. Это означает, что между последней успешной фиксацией и новым запросом. Это 7-минутный промежуток времени, в течение которого возникает проблема.

Какие-то отзывы по этому выводу?

Комментарии:

1. Если a COMMIT терпит крах, это плохо. Какие расширения установлены?

2. Возможно, это уже исправленная ошибка. Текущая незначительная версия 10-10.17. Не запускайте программное обеспечение с почти 4-летними нефиксированными известными ошибками.

3. Есть ли запущенная антивирусная программа? Если да, отключите его — по крайней мере, для каталога данных Postgres

4. @jjanes: Я не нашел никакой информации в документах postgres.

5. @a_horse_with_no_name: Я тоже нашел это в документах posgres: Там не работает антивирусный сканер