Скачал по совету конфигурацию СУБД вот тут[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.
(1) shakmaev, как вариант, можно попробовать поменять данный параметр:
synchronous_commit = off
на
synchronous_commit = on
Собственно, при записи контрагента блокируется вся таблица контрагентов. В итоге получается, что первый процесс блокирует таблицу 1, а второй процесс таблицу 2, после чего первый пытается заблокировать таблицу 2 (ее уже заблокировал процесс 2), а второй - таблицу 1 (которую заблокировал первый). Нужно найти взаимоблокирующиеся таблицы и переписать код, чтобы порядок блокировки был всегда один и тот же (1, 2, ...N).
(1) shakmaev,
1. Рекомендую перенести слоника на linux/bsd/etc - к сожалению, на ntfs падение пароизводительности просто ужасающе.
2. Включите более детальные логи и периодически мониторьте. Слоник сам подскажет, что в конфиге можно будет улучшить.
3. Если есть УПС (а на сервере СУБД он должен быть), то можно попробовать включить асинхронный режим записи.
(11) oldfornit, linux в планах, к сожалению вместе с СУБД сервер также обслуживает AD. УПС есть, вот только вопрос в том, что очень часто бывают отключения когда меня нет. Да и рейд без BBU, так что сейчас пока fsync.
Буду признателен, если подскажете как включить логи.
Автор темы, думается, не просто так прислушался к совету о PostgreSQL, наверное из-за ограничений Express-а перестало хватать весьма ощутимо. Так что, "обратно" не получится, нужен MS SQL Standard за соответствующие деньги.
Переход на УТ 11 или перевод на управляемые блокировки УТ 10 также будут требовать определенных затрат(умственных или/и финансовых).
Примерно похожее было, решил так: Конфигуратор -> Администрирование -> Параметры ИБ. Увеличил время ожидания до 40 сек. Все таки переход на 11 в данном случае, лучший вариант