40P01: ERROR: deadlock detected. PostgreSQL 9.4.8 1C
Всем привет.
Скачал по совету конфигурацию СУБД вот тут[postgrespro]:
(скрин потому что не знаю, вдруг реклама скажут и удалят)
Мои параметры:
Управление блокировками: Автоматическое
Конфигурация УТ 10.3, толстый клиент, обычные формы.
Платформа 8.3.8.1933.
Сервер Win 2008 R2 x64, Intel, 32Gb, 2x3.14Ghz, Raid 1 без BBU (10 Raid прошу не рекомендовать, корзина слишком мала)
Переносил с MSSQL Express 2008, выгрузкой/загрузкой dt.
Проблема:
Как только стало работать около 10 человек, ИНОГДА стала появляться проблема при записи нового контрагента:
Файл конфигурации PostgreSQL (настраивал в соответствии с рекомендациями на ИТС):
Буду рад, если кто подскажет куда копать, и в чем может быть проблема.
Скачал по совету конфигурацию СУБД вот тут[postgrespro]:
(скрин потому что не знаю, вдруг реклама скажут и удалят)
Мои параметры:
Управление блокировками: Автоматическое
Конфигурация УТ 10.3, толстый клиент, обычные формы.
Платформа 8.3.8.1933.
Сервер Win 2008 R2 x64, Intel, 32Gb, 2x3.14Ghz, Raid 1 без BBU (10 Raid прошу не рекомендовать, корзина слишком мала)
Переносил с MSSQL Express 2008, выгрузкой/загрузкой dt.
Проблема:
Как только стало работать около 10 человек, ИНОГДА стала появляться проблема при записи нового контрагента:
40P01: ERROR: deadlock detected
DETAIL: Process 1372 waits for ApplicationExclusiveLock on relation 334299 of database 321868; blocked by process 2520.
Process 2520 waits for ApplicationShareLock on relation 334551 of database 321868; blocked by process 1372.
HINT: See server log for query details.
Файл конфигурации PostgreSQL (настраивал в соответствии с рекомендациями на ИТС):
Буду рад, если кто подскажет куда копать, и в чем может быть проблема.
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) shakmaev, как вариант, можно попробовать поменять данный параметр:
Собственно, при записи контрагента блокируется вся таблица контрагентов. В итоге получается, что первый процесс блокирует таблицу 1, а второй процесс таблицу 2, после чего первый пытается заблокировать таблицу 2 (ее уже заблокировал процесс 2), а второй - таблицу 1 (которую заблокировал первый). Нужно найти взаимоблокирующиеся таблицы и переписать код, чтобы порядок блокировки был всегда один и тот же (1, 2, ...N).
synchronous_commit = off
на synchronous_commit = on
Собственно, при записи контрагента блокируется вся таблица контрагентов. В итоге получается, что первый процесс блокирует таблицу 1, а второй процесс таблицу 2, после чего первый пытается заблокировать таблицу 2 (ее уже заблокировал процесс 2), а второй - таблицу 1 (которую заблокировал первый). Нужно найти взаимоблокирующиеся таблицы и переписать код, чтобы порядок блокировки был всегда один и тот же (1, 2, ...N).
(1) shakmaev,
1. Рекомендую перенести слоника на linux/bsd/etc - к сожалению, на ntfs падение пароизводительности просто ужасающе.
2. Включите более детальные логи и периодически мониторьте. Слоник сам подскажет, что в конфиге можно будет улучшить.
3. Если есть УПС (а на сервере СУБД он должен быть), то можно попробовать включить асинхронный режим записи.
1. Рекомендую перенести слоника на linux/bsd/etc - к сожалению, на ntfs падение пароизводительности просто ужасающе.
2. Включите более детальные логи и периодически мониторьте. Слоник сам подскажет, что в конфиге можно будет улучшить.
3. Если есть УПС (а на сервере СУБД он должен быть), то можно попробовать включить асинхронный режим записи.
(11) oldfornit, linux в планах, к сожалению вместе с СУБД сервер также обслуживает AD. УПС есть, вот только вопрос в том, что очень часто бывают отключения когда меня нет. Да и рейд без BBU, так что сейчас пока fsync.
Буду признателен, если подскажете как включить логи.
Буду признателен, если подскажете как включить логи.
УТ 10.3 вроде уже умеет в управляемом режиме блокировок работать, нет?
в любом случае надо смотреть техножурнал.
в любом случае надо смотреть техножурнал.
Автор темы, думается, не просто так прислушался к совету о PostgreSQL, наверное из-за ограничений Express-а перестало хватать весьма ощутимо. Так что, "обратно" не получится, нужен MS SQL Standard за соответствующие деньги.
Переход на УТ 11 или перевод на управляемые блокировки УТ 10 также будут требовать определенных затрат(умственных или/и финансовых).
Переход на УТ 11 или перевод на управляемые блокировки УТ 10 также будут требовать определенных затрат(умственных или/и финансовых).
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот