При настройке СУБД PostgreSQL под требования платформы 1С:Предприятие часто применяются рекомендации из методических материалов ИТС. Однако после внесенных изменений в файл postgresql.conf системные администраторы могут столкнуться со следующей ситуацией: служба PostgreSQL отказывается стартовать, выдавая системное сообщение Windows:
«Служба PostgreSQL на Локальный компьютер была запущена и затем остановлена. Некоторые службы автоматически останавливаются, если они не используются другими службами.»
При этом встроенные журналы СУБД (каталог pg_log или log) часто остаются полностью пустыми и не содержат записей о новых попытках запуска. Рассмотрим подробно причины возникновения этой ошибки и шаг за шагом разберем способы восстановления работоспособности базы данных.
Проанализируем конфигурационный файл postgresql.conf. Одной из частых причин аварийной остановки службы при старте является параметр effective_io_concurrency.
В методических материалах по оптимизации PostgreSQL для 1С часто советуют включать асинхронный ввод-вывод (например, выставлять значение effective_io_concurrency = 2 или выше). Однако этот параметр опирается на системные вызовы POSIX (posix_fadvise), которые отсутствуют в операционных системах Windows.
В сборках PostgreSQL для Windows данный параметр не поддерживается и должен оставаться равным 1 (или 0 в некоторых версиях), либо быть полностью закомментирован. Если задать значение больше 1, ядро PostgreSQL при инициализации завершает работу с ошибкой еще до того, как успеет открыть собственный журнал логов.
Для исправления ситуации выполним следующие шаги:
postgresql.conf в текстовом редакторе.effective_io_concurrency.# или установим значение по умолчанию:
# effective_io_concurrency = 1
Если служба PostgreSQL не записывает данные в собственный лог-файл pg_log, выяснить точную причину можно через штатный системный оснасток Windows. Проанализируем системные логи операционной системы:
eventvwr.msc и нажмем Enter.В журнале приложений Windows вы увидите точную запись с синтаксической ошибкой или именем некорректного параметра, с указанием номера строки в файле postgresql.conf, из-за которой СУБД не смогла запуститься.
Ещё одна распространённая причина падения службы при старте — сохранение файла postgresql.conf в неправильной кодировке. Если редактировать файл через стандартный Блокнот Windows (Notepad), редактор может добавить в начало файла маркер последовательности байтов (BOM — Byte Order Mark).
СУБД PostgreSQL не может распознать символы BOM на первой строке конфигурационного файла, расценивает их как синтаксическую ошибку и немедленно останавливает службу. Чтобы избежать этой проблемы:
Убедимся, что служба запускается от имени пользователя, имеющего правильные права на каталоги СУБД:
postgres или USR1CV8), должна иметь полный доступ к каталогу данных data и всем входящим в него вложенным папкам.Вход в качестве службы (SeServiceLogonRight) в политиках безопасности Windows.При решении проблем с падением базы данных из-за нехватки памяти (ошибки Out of Memory) системные администраторы иногда пытаются принудительно отключить соединение методом слияния, устанавливая параметр enable_mergejoin = off. Разберем, почему это не всегда эффективно и как правильно настроить параметры СУБД:
work_mem. Этот объем памяти выделяется на каждую операцию сортировки или группировки в рамках каждого запроса. При большом количестве параллельных сеансов 1С суммарное потребление памяти может превысить объем физической ОЗУ сервера. Рассчитывайте work_mem с учетом общего размера оперативной памяти и максимального количества соединений max_connections.
random_page_cost = 1.1–1.5
seq_page_cost = 1.0
150–250:
max_locks_per_transaction = 150
Соблюдение этих правил позволит быстро вернуть службу PostgreSQL в рабочее состояние на операционных системах Windows и обеспечит стабильную работу баз данных 1С:Предприятие.