Всем привет.
Написать эту статью, а может быть даже и серию статей посвященных Postgres, меня вынудил информационный голод о СУБД Postgres, тем более в связке с 1С.
Что мне показалось странным? Многое что здесь описано есть везде! А хочется нюансов.
Нюанс 1. Установка.
Я использую Linux CentOS 5.x, хотя процес не должен принципиально отличатся от других вендоров.
Процесс наложения патчей от 1С описывать не буду, есть везде (например http://habrahabr.ru/blogs/linux/107321/)
Я использую стандартные .rpm от самой 1С.
Перед установкой вы должны понимать как этот сервер будут использоваться. Если речь идет о базе центрального офиса, куда будет стекаться информация из других подразделений, а также строится всевозможная аналитика, то лучше чтобы сервер был выделен только под СУБД.
Важно знать, что Postgres не умеет задавать разные кодировки для отдельных баз! Поэтому не забудьте сделать следующее:
#su - postgres
#initdb --locale=uk_UA.UTF8 --encoding=UTF8 /path/to_your/data/
Этой коммандой вы инициализурете хранилище в кодировке UTF8 для локали uk_UA - у 1С это Украинский(Украина).
Далее, не забудьте проверить кол-во разделяемой памяти, т.е. shared memory:
#cat /proc/sys/kernel/shmall
#cat /proc/sys/kernel/shmmax
Вы получите на экран о количестве разделяемой памяти в байтах. Разделив на 1024 дважы вы получите размер в МБ. Это размер разделяемой между процессами PostgreSQL памяти, которая нужна для выполнения активных операций.
Параметр shared_buffers, в файле /path/to_your/data/postgresql.conf должен быть min 1/8 - max 1/4 RAM.
Если полученное вами значение превосходит стандартные значения shmall и shmmax, то их следует увеличить, например так:
#echo 68719476736 >/proc/sys/kernel/shmmax
#echo 4294967296 >/proc/sys/kernel/shmmax
Все. Теперь все доложно стартовать и работать.
Нюанс 2. Каталоги Postgres
Никогда не удаляйте файлы созданные постгрес вручную, делайте это только штатными утилитами или если точно знаете, что это можно делать.
Важные каталоги:
$PG_HOME/data - все хранится здесь
$PG_HOME/data/base - наши БД
$PG_HOME/data/pg_xlog - логи транзакций
$PG_HOME/data/pg_clog - логи коммитов
Размер каталога pg_xlog зависит от парамтеров:
checkpoint_segments и checkpoint_timeout
checkpoint_segments - определяет МАКСИМАЛЬНОЕ количество сегментов (каждый по 16 МБ) лога транзакций между контрольными точками, checkpoint_timeout - определяет количество секунд между контрольными точками, сработает тот параметр, который наступит первым.
Поэтому считайте (checkpoint_segments * 2 + 1) * 16 МБ и убедитесь, что у вас достаточно свободного места для pg_xlog. Учтите, чем больше операций записи в вашей БД, тем больше нужно выставить checkpoint_segments, тогда в случае краха, постгресу понадобиться меньше времени на восстановление.
Если произошел сбой, вы восстановились и логи транзакций вам не нужны, смотрите в сторону pg_resetxlog.
Нюанс 3. Подключение 1С
Надеюсь все кто хочет использовать 1С + Postgres понимают архитектуру трехзвенки или MVC?
Если нет, напомню. MVC - это модель, вид, контроллер.
Контроллер - это наша 1С, с заложенной конфигурацией, которая описывает ту или иную бизнесс логику.
Вид - это наш клиент 1С, который отображает все то, что посылает нам сервер 1С (кстати тотлько в 8.2 можно полностью отделить бизнесс логику от клиента)
Модель - это наша БД, где 1С хранит все свои данные
Так вот, прописывая базу в кластере 1С укажите именно тот сервер, где расположена Ваша БД.
Работая с моделью, один кластер 1С, использует одного пользователя для подключение к БД. Поэтому отследить на уровне СУБД, какой "подлец" запустил тот или иной запрос к БД, вам не удастся :( Но всеравно иметь утилиту pg_top полезно!
Итак, что нам нужно указать в /path/to_your/data/postgresql.conf:
listen_addresses = '*' # слушаем подключения на всех сетевых интерфейсах сервера
max_connections = 200 # сколько всего пользователей сможет подключится к базе
И незабыть про /path/to_your/data/pg_hba.conf:
host all all 127.0.0.1/32 trust
pg_hba.conf отвечает за безопаность подключений, в данном примере мы указали, что разрешаем подключаться только с localhost.
Если вы все сделали правильно, 1С подключится без проблем.
Жду Ваших комментариев.
Если Postgres интересен Вам, я могу подготовить статьи на темы:
Тюнинг, Бекап, Ваккум, Репликация, Кластер, Статистика, Партиционирование и др.