40P01: ERROR: deadlock detected. PostgreSQL 9.4.8 1C

1. shakmaev 347 26.08.16 13:03 Сейчас в теме
Всем привет.

Скачал по совету конфигурацию СУБД вот тут[postgrespro]:
https://yadi.sk/i/_ERUcGojuWATU
(скрин потому что не знаю, вдруг реклама скажут и удалят)

Мои параметры:
Управление блокировками: Автоматическое
Конфигурация УТ 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 (настраивал в соответствии с рекомендациями на ИТС):
https://yadi.sk/d/ONsnzgKauW9w2

Буду рад, если кто подскажет куда копать, и в чем может быть проблема.
Вознаграждение за ответ
Показать полностью
Найденные решения
2. Xershi 1484 26.08.16 13:09 Сейчас в теме
(1) shakmaev, ТЖ настраивай и смотри кто-то блочит.
Так же в конфигураторе можно поставить более 30 секунд на блокировки.

Ну а далее переписывать конфу и обновлять платформу.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1484 26.08.16 13:09 Сейчас в теме
(1) shakmaev, ТЖ настраивай и смотри кто-то блочит.
Так же в конфигураторе можно поставить более 30 секунд на блокировки.

Ну а далее переписывать конфу и обновлять платформу.
6. starik-2005 3038 28.08.16 10:53 Сейчас в теме
(1) shakmaev, как вариант, можно попробовать поменять данный параметр:
synchronous_commit = off
на
synchronous_commit = on

Собственно, при записи контрагента блокируется вся таблица контрагентов. В итоге получается, что первый процесс блокирует таблицу 1, а второй процесс таблицу 2, после чего первый пытается заблокировать таблицу 2 (ее уже заблокировал процесс 2), а второй - таблицу 1 (которую заблокировал первый). Нужно найти взаимоблокирующиеся таблицы и переписать код, чтобы порядок блокировки был всегда один и тот же (1, 2, ...N).
8. savflint 29.08.16 15:30 Сейчас в теме
(6) starik-2005, боюсь что включение этого параметра скажется на производительности. Пока помогло увеличение срока ожидания
9. shakmaev 347 29.08.16 15:32 Сейчас в теме
(6), (8) , спасибо, ребята. Конфиг пока не менял. Сделал время ожидания больше, вроде ошибки нет
10. Xershi 1484 29.08.16 15:48 Сейчас в теме
(9) shakmaev, ждем тогда вознаграждение))
11. oldfornit 29.08.16 15:53 Сейчас в теме
(1) shakmaev,
1. Рекомендую перенести слоника на linux/bsd/etc - к сожалению, на ntfs падение пароизводительности просто ужасающе.
2. Включите более детальные логи и периодически мониторьте. Слоник сам подскажет, что в конфиге можно будет улучшить.
3. Если есть УПС (а на сервере СУБД он должен быть), то можно попробовать включить асинхронный режим записи.
12. shakmaev 347 30.08.16 17:10 Сейчас в теме
(11) oldfornit, linux в планах, к сожалению вместе с СУБД сервер также обслуживает AD. УПС есть, вот только вопрос в том, что очень часто бывают отключения когда меня нет. Да и рейд без BBU, так что сейчас пока fsync.
Буду признателен, если подскажете как включить логи.
13. oldfornit 31.08.16 08:57 Сейчас в теме
(12) shakmaev, вот тут можно посмотреть документацию на постгрес на русском, а это - подробная информация о логировании
3. Fragster 1139 26.08.16 14:45 Сейчас в теме
УТ 10.3 вроде уже умеет в управляемом режиме блокировок работать, нет?
в любом случае надо смотреть техножурнал.
4. roman77 332 26.08.16 16:56 Сейчас в теме
(3) Fragster,

УТ 10.3 вроде уже умеет в управляемом режиме блокировок работать, нет?


Нет, это Ут 11 умеет. Или переписывать конфу, или переходить на 11, или обратно на MS SQL.
herfis; ipoloskov; +2 Ответить
5. ansh15 27.08.16 00:20 Сейчас в теме
Автор темы, думается, не просто так прислушался к совету о PostgreSQL, наверное из-за ограничений Express-а перестало хватать весьма ощутимо. Так что, "обратно" не получится, нужен MS SQL Standard за соответствующие деньги.
Переход на УТ 11 или перевод на управляемые блокировки УТ 10 также будут требовать определенных затрат(умственных или/и финансовых).
7. savflint 29.08.16 15:07 Сейчас в теме
Примерно похожее было, решил так: Конфигуратор -> Администрирование -> Параметры ИБ. Увеличил время ожидания до 40 сек. Все таки переход на 11 в данном случае, лучший вариант
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот