Внезапно стала выскакивать ошибка при проведении документов в старой базе УТ 10.3 на сервере 1с 8.3.22.2283 СУБД Postgres 15.5 "58P01: Ошибка: не удалось получить состояние транзакции 3232159384 Detail: не удалось открыть файл "pg_xact/0C0A": No such file or directory."
Ошибка такая же появилась второй раз при проведении того же документа, это какая-то системная ошибка. СУБД или платформа. В первый раз выкатили бэкап, сейчас это делать не хочется да и бессмыслено.
(6)по указанному пути находятся системные файлы СУБД(журнал транзакций).
Если не починить, то ошибка будет вываливаться периодически и вы не застрахованы от сбоя, т.е. при сбойном завершении работы Postgre данные во всех БД, обслуживаемых экземпляром СУБД, не возможно будет восстановить.
(8)Точно нет.
Нужно разбираться, возможно, журналы транзакций перетащили на другой диск, а в прежнее место сделали символьную ссылку на каталог(так делают для увеличения быстродействия и безопасности).
И теперь этот другой диск отключили/удалили или еще чего приключилось и СУБД не может записывать данные в нужный ей файл.
(16)WAL - это Write Ahead Log <> Transaction Log
В WAL пишутся ВООБЩЕ ВСЕ действия внутри кластера Pg, в TL - только состояния транзакций соотвественно
Каталог pg_xact есть, но файла 0C0A там нет. Там всего лишь, 15 файлов 0000 - 000E. И в бэкапах системы такого файла нет...
Предположительно, проблема началась после перезагрузки сервера, на сервере сеансовые данные были вынесены в оперативную память. Но, вроде, к такой ошибке потеря сеансовых данных не должна привести...
(35)
Сразу после ошибки. Подсунул левый файл, стал ругаться на другой. Не понимаю, откуда он их берет.
Проблема с временными таблицами?
2024-02-06 10:22:51.248 MSK [1781911] ПОДРОБНОСТИ: Не удалось открыть файл "pg_xact/0BBB": No such file or directory.
2024-02-06 10:22:51.248 MSK [1781911] ОПЕРАТОР: SEL ECT
T1._Q_000_F_000RRef,
T1._Q_000_F_004,
'\\274\\225\\000\\014)\\206\\260\\273\\021\\351\\024\\343\\323\\230\\004\\216'::bytea,
T1._Q_000_F_003,
CASE WHEN (T1._Q_000_F_003 > CAST(0 AS NUMERIC)) THEN CAST(((CAST(CAST((CAST(23.034 AS NUMERIC) * (CAST(100 AS NUMERIC) + T1._Q_000_F_003)) AS NUMERIC(19, 8)) / CAST(100 AS NUMERIC) AS NUMERIC(19, 8))) + CAST(0.49 AS NUMERIC)) AS NUMERIC(15, 0)) ELSE CAST(((CAST(CAST((CAST(10.47 AS NUMERIC) * (CAST(100 AS NUMERIC) + (CAST(120 AS NUMERIC) * (CAST(CAST(((CAST(100 AS NUMERIC) + T1._Q_000_F_003)) AS NUMERIC(17, 8)) / CAST(100 AS NUMERIC) AS NUMERIC(17, 8)))))) AS NUMERIC(25, 10)) / CAST(100 AS NUMERIC) AS NUMERIC(25, 10))) + CAST(0.49 AS NUMERIC)) AS NUMERIC(15, 0)) END
FR OM pg_temp.tt12 T1
WHERE (NOT (('\\274\\225\\000\\014)\\206\\260\\273\\021\\351\\024\\343\\323\\230\\004\\216'::bytea IN
(SELECT
T2._Fld8539RRef AS Q_002_F_000RRef
FR OM _InfoRg8537 T2
WH ERE (date_trunc('day','2024-02-05 00:01:00'::timestamp) >= T2._Period) AND (date_trunc('day','2024-02-05 00:01:00'::timestamp) <= CASE WHEN (T2._Fld8546 = '0001-01-01 00:00:00'::timestamp) THEN (('2024-02-05 00:01:00'::timestamp)::timestamp + ((CAST(1 AS NUMERIC))::int::numeric 'DAY')::interval) ELSE (((((((((((('2000-01-01 00:00:00'::timestamp)::timestamp + ((DATE_PART('YEAR',T2._Fld8546)::int::numeric - 2000)::int::numeric 'YEAR')::interval))::timestamp + ((DATE_PART('MONTH',T2._Fld8546)::int::numeric - 1)::int::numeric 'MONTH')::interval))::timestamp + ((DATE_PART('DAY',T2._Fld8546)::int::numeric - 1)::int::numeric 'DAY')::interval))::timestamp + ((CAST(23 AS NUMERIC))::int::numeric 'HOUR')::interval))::timestamp + ((CAST(59 AS NUMERIC))::int::numeric 'MINUTE')::interval))::timestamp + ((CAST(59 AS NUMERIC))::int::numeric || 'SECOND')::interval) END) AND (T2._Fld8538RRef = '\\\\\\225\\000\\014)\\206\\260\\273\\021\\350\\330\\032\\376iLZ'::bytea) AND (T2._Fld8539RRef IN
(SELECT
T3._REFFIELDRRef AS REFFIELDRRef
FR OM pg_temp.tt5 T3)))))) AND (T1._Q_000_F_002 > CAST(23.034 AS NUMERIC)) AND (T1._Q_000_F_001 <= CAST(23.034 AS NUMERIC)) AND (T1._Q_000_F_003 <> CAST(0 AS NUMERIC)) AND (T1._Q_000_F_003 >= -CAST(100 AS NUMERIC))
ORDER BY (T1._Q_000_F_004) DESC, (T1._Q_000_F_000RRef) DESC LIM IT 1
Решается - перезапуском сервиса, либо поиском спящих сеансов с подвисшими транзакциями и их удалением.
Посмотрел несколько сбоев, проблема наблюдается при выборке во временную таблицу из РС ЦеныНоменклатуры. В разных комбинациях запросов. Иногда проходит, иногда сбоит. Запросы разные.
Странные глюки. Не было таких раньше.
После перезагрузки сервера 1с
2024-02-06 11:38:50.373 MSK [2115] ПОДРОБНОСТИ: Не удалось открыть файл "pg_xact/0A38": No such file or directory.
2024-02-06 11:38:50.373 MSK [2115] ОПЕРАТОР: INS ERT IN TO pg_temp.tt14 (_Q_000_F_000RRef, _Q_000_F_001, _Q_000_F_002) SEL ECT DISTINCT
T1._Fld8539RRef,
T1._Fld8542,
T1._Fld8544
FR OM _InfoRg8537 T1
WHERE (T1._Fld8538RRef = 'L\\223\\000\\014)\\024v\\235\\021\\353\\233\\217W&j+'::bytea) AND (T1._Fld8546 >= '2024-02-06 00:00:00'::timestamp) AND (T1._Period <= '2024-02-06 23:59:59'::timestamp)
(35)
PostgreSQL поддерживает только общую для всех баз кластера кодировку, которая должна совпадать с локальной кодировкой (Настройка переменных локализации в Linux), иначе не будут работать строковые функции сортировки, upper/lower и т.п. Локаль общая для всех процессов сервера - соответственно он не может создать две базы в разных кодировках - кодировка всегда одна для всего сервера и всех его БД.
------------
ОШИБКА: неверное значение для параметра "lc_messages": "en_US.UTF-8"
но вам это не интересно ----------------------------------
Т.е. создать базу в другой кодировке можно, но тогда в ней будут неправильно работать функции обработки строк и сортировка строк.
-----------
ОШИБКА: invalid memory alloc request size 2327838736
ну очень не интересно , да ?
PostgreSQL поддерживает только общую для всех баз кластера кодировку, которая должна совпадать с локальной кодировкой (Настройка переменных локализации в Linux), иначе не будут работать строковые функции сортировки, upper/lower и т.п. Локаль общая для всех процессов сервера - соответственно он не может создать две базы в разных кодировках - кодировка всегда одна для всего сервера и всех его БД.
Мне интересно, даже очень. Но что делать?! База работает, но теперь не бэкапится, регистр сведений раздулся??
pg_dump: ошибка: Ошибка выгрузки таблицы "_inforg7066": сбой в PQgetResult().
pg_dump: подробности: Сообщение об ошибке с сервера: ОШИБКА: invalid memory alloc request size 8589934587
pg_dump: подробности: Выполнялась команда: COPY public._inforg7066 (_period, _recordertref, _recorderrref, _lineno, _active, _fld7067, _fld7068rref, _fld7069rref, _fld7070rref, _fld7071rref, _fld7072_type, _fld7072_rtref, _fld7072_rrref, _fld7073_type, _fld7073_rtref, _fld7073_rrref, _fld7074rref, _fld7075rref, _fld7076rref, _fld7077rref, _fld7078rref, _fld7079_type, _fld7079_rtref, _fld7079_rrref, _fld7080_type, _fld7080_rtref, _fld7080_rrref, _fld7081, _fld7082, _fld7083rref, _fld7084rref, _fld7085rref, _fld7086, _fld7087, _fld7088rref, _fld7089, _fld7090, _fld7091, _fld7092, _fld7093rref, _fld7094rref, _fld7095rref, _fld7096rref, _fld7097_type, _fld7097_rtref, _fld7097_rrref, _fld7098, _fld7099, _fld7100, _fld7101rref, _fld7102rref, _fld7103rref, _fld7104rref, _fld7105rref, _fld7106rref, _fld7107, _fld7108, _fld7109rref, _fld7110rref, _fld7111rref, _fld7112, _fld7113, _fld7114, _fld7115, _fld7116, _fld7117rref, _fld7118rref, _fld7119rref, _fld7120, _fld7121rref, _fld7122, _fld7123_type, _fld7123_rtref, _fld7123_rrref, _fld7124rref, _fld7125rref) TO stdout;
pg_dump: ошибка: рабочий процесс неожиданно прервался
maintenance_work_mem = 256MB - это очень мало на нужные процессы обслуживания
Если позволяют соединения - у вас не более 10клиентов, то work_mem = 512MB увеличить на столько же
Со смартфона пишу, не все могу заметить...
max_connections = 200 - реальное плюс 25-50 %
Там ещё с чекпойнтом и валами но сейчас не готов
В Гугле найдите надстройку для ссд постгрес 1с,точно не помню, потому что использую только хдд под слон.
(39)В рамках обсуждаемой проблемы - не интересно вообще какая там кодировка и что в результате этого может быть.
Памяти процессам Pg не хватает - либо Pg не настраивали, либо проблемы с железом/вирусы.
(13) Файловую на которой база лежит. Из бэкапа базу восстанавливали и она опять ошибками пошла - явно дисковую подсистему проверять надо. И сильно подозреваю, что базу снова из бэкапов поднимать нужно будет
(17)
а вы знаете , как используется хранилище у автора,
какие диски физические,
где находится база
как долго они используют ее и что с питанием системы в целом
(24)да хоть унастраивайтесь таймаутами - файлов для хранения лога транзакций нет, либо он "кривой".
восстановить данные в базах будет невозможно с момента последнего полного бэкапа.
включите в конфиг файле слона нужные опции для просмотра ошибок
или в логах сейчас смотрите, что пишет.
-----------
Ошибка такая же появилась второй раз при проведении того же документа,
-------------------
так она и будет, если файла нет
ТИИС 1с проверяли ?
хотя перед эти точно бекап нужен
или попробуйте младшую версию слона, если есть возможность
pg_dump: ошибка: Ошибка выгрузки таблицы "_inforg7066": сбой в PQgetResult().
pg_dump: подробности: Сообщение об ошибке с сервера: ОШИБКА: invalid memory alloc request size 8589934587
- тема известная. Там есть и объяснения и решение.
Обычно это касалось таблицы config в конфигурациях с возможностью редактирования и сохранением поддержки.
Возможно, в _inforg7066 занеслось что-то большое( в какой-нибудь столбец таблицы) или просто испортилось при каком-то не очень очевидном сбое.
Можно попробовать выгрузить без этой таблицы, в статье по ссылке указано как это сделать, хотя если был сбой, таких таблиц может быть не одна..
Если удастся выгрузить, лучше создать новый кластер Pg (pgsql/data), старый куда-нибудь скопировать, на всякий случай. И в новый восстанавливать данные. Потому что в старом может быть битый не только pg_xact...
Если бы был Linux, можно было бы попробовать выгрузить/загрузить при помощи pg_dumpbinary/pg-restorebinary(ищется в Интернете)
(45)
Спасибо за совет с новым кластером. Базе трындец, но надо понять причины ее падения. База не бэкапируется даже с исключением отдельных таблиц, не вакуумируется, не реиндексируется и не исправляется средствами 1С. Железо нормальное.