PostgreSQL +1C

 Что такое Postgre?

POSTGRESQL - это opensource СУБД, созданная группой разработчиков со всего мира. При модификации патчами от 1С работает   с  1С:Предприятие 8.1. PostgreSQL бесплатен, но услуги по его обслуживанию платны (обычно).
Прелесть системы управления базами данных PostgreSQL для 1С:Предприятие 8 в работе как под Windows, так и под Linux.
PostgreSQL – открытая бесплатная система управления базами данных. И хотя 1С:Предприятие 8 использует модифицированную версию PostgreSQL, которая включена в комплект поставки, преимущества лицензии BSD означают бесплатность.
1С:Предприятие 8 имеет некоторые особенности работы с СУБД PostgreSQL, связанные с использованием транзакционных блокировок:

Это означает, что до полной адаптации текущих релизов под управляемые блокировки, СУБД не будет использовать все свои возможности. Однако Вы всегда можете задействовать в своем коде управляемые блокировки.

 
НЕЧТО, что живет в умах
«Какую лучше выбрать версию Линукса из соображений стабильности? Правильно ли я понимаю, что 1С под Линуксом будет работать стабильнее, чем под виндами?» - вот те вопросы, которые характерны для «новичков», работающих с 1С:Предприятие. Тут важно разделять «котлеты от мух». Стабильность СУБД и стабильность системы вцелом – это не одно и тоже. Впрочем, как и различать «религиозный» выбор СУБД от оценки совокупной стоимости владения.
Обзор тенденций и прогнозы
 
Давать прогнозы дело рискованное. Но все же.
Факт. 16 января 2008 года Sun Microsystems объявила о договоренности приобрести MySQL за $1 млр., сделка должна завершится в 3-4 квартале 2008 финансового года. 
Предположение. Это обещает в умах свободолюбивых энтузиастов, прежде всего вновь присоединившихся к свободному содружеству.
Совместимость с различными версиями Linux
 
Прежде пару слов о дистрибутивах стандартного PostgreSQL, идущих в дистрибутивах Linux.  Начинающим администраторам лучше эти дистрибутивы не устанавливать, а использовать, размещенный на сайте 1С или дисках ИТС. 
Фирма 1С в настоящий момент издает PostgreSQL под Fedora Core. Т.е. в более привилегированном в смысле проверенности патчей  явлются RHEL, ASP Linix, Сentos и другие диструбитивы, основные на RedHat-овском ядре. Однако известные успешные инсталяции и в SUSE-семействе (продвигаемые Novell), и UBUNTU.
Текущая готовность PostgreSQL
 
Мы уже упоминали некую «стабильность». И все же, насколько задекларированная работоспособность соответствует реальной. Ответы могут быть противоположными, так как здесь важно оговорить критерии, что считать работоспособным – выполняются критичные для бизнеса операции или например, есть ли ошибки, их количество.
Наконец, надо сказать, как определить текущую версию. Есть команда:
SELECT version();
Результат работы может выглядеть так:
версия
или
версия
Вообще то на сайте 1С также приводится ряд особенностей, и прежде всего это касается некоторых конструкций в запросах, которые отличны от исполнения на других СУБД.
Где можно получить информацию о PostgreSQL
- официальный сайт (но скорее документация на английском) http://www.postgresql.org/docs/ (надо отметить, что самая актуальная информация по PostgreSQL не будет на русском, частично этой статьей авторы пытаются решить эту проблему).
-  википедия http://ru.wikipedia.org/wiki/Postgresql
- видение PostgreSQL одним из разработчиков http://www.sai.msu.su/~megera/postgres/talks/what_is_postgresql.html
- блог разработчика http://nikolay.samokhvalov.com/category/dev/databases/postgresql/
- электронная документация 1С С:\Program Files\1cv81\AddDoc\RU\V8AddDoc81.htm 
- сайт 1С http://v8.1c.ru/overview/postgresql.htm
Как устроен PostgreSQL
Как и любая СУБД PostgreSQL должна обслуживать запросы sql и возвращать результаты клиентским приложениям (в данном случаи серверу 1С:Предприятие). Для этого механизм СУБД оптимизатор запросов принимает решение об оптимальном использовании ресурсов и строит план запроса. При этом он может опереться на используемых механизмы ускорения работы (индексов, кэшей в памяти, ресурсам процессора, данные статистики («опыт использования») и т.д.).
Результаты запросов возвращаются клиентским подключениям (в данной роли выступает рабочий сервер приложений 1С:Предприятие).
explorer
В Windows управляет всем файл службы pg_ctl.exe (останавливает, запускает, перезапускает).
Сам движок базы – это postgres.exe.
Оптимизатор запросов мало подвержен управлению со стороны разработчиков, поэтому к нему вернемся лишь косвенно в разделе анализа быстродействия.
Зато управление дисковым пространством имеет весомое значение. Как и в любой СУБД, для баз данных PostgreSQL лучше использовать RAID 10 для баз данных и отдельный дисковый массив под логии. Применение STORAGE систем может также положительно сказаться на всем быстродействии. Еще одна фича, ускоряющая работу за счет расположения данных на разных дисках, это табличные пространства (tablespaces).  Критически важные для администраторов многогигабайтных хранилищ данных, табличные пространства позволяют размещать большие таблицы и индексы на отдельных дисках или массивах, что повышает производительность запросов. 
У PostgreSQL есть особенность в реализации хранения – это так называемый «кластер». В данном случаи речь идет месте расположения каталога для баз данных. Плюс PostgreSQL  организует  единую  файловую структуру, в которой  отдельные файлы не соответствуют непосредственно таблицам или другим  объектам  базы  данных.
При установке вы указываете «кластер» (читай каталог).
pgadmin
При установке PostgreSQL создает системную базу postgres и базу template1 как шаблон настроек для всех новых баз. Обычно в Linux-среде  в каталоге /var/postgres/data находится некоторое количество служебных файлов для PostgreSQL, а в каталоге /var/postgres/data/base размещаются базы данных, каждая в своем отдельном каталоге.
 
К сожалению, реализованный в PostgreSQL способ хранения данных требует  дополнительного обслуживания  -  периодической  дефрагментации  базы  данных  командой VACUUM. 
Примечание. Материализованные запросы (представления пользователя) view платформой не используются.
Штатная утилита администрирования баз данных PostgreSQL
 

оснастка

Удобно администрировать Postgre c помощью pgAdmin. Кстати, совет, скачайте утилиту посвежее. На момент написании это была под Windows http://wwwmaster.postgresql.org/redir?setmir=295&typ=h&url=http://ftp2.ru.postgresql.org/pub/databases/postgresql//pgadmin3/release/v1.8.2/win32/pgadmin3-1.8.2-2.zip .
Где хранятся настройки
конфигурация
postgresql.conf отвечает за общую конфигурацию.
pg_hba.conf за авторизацию пользователей с различных компьютеров.
Особенности настройки
Важно отметить, что платформа абстрагирует разработчика 1С от прямого управления кодом SQL, поэтому здесь преимущественно будут рассматривать лишь некоторые эффективные аспекты с точки зрения платформы. Итак, суть Правильной настройка Postgresql заключается в том, чтоб хранить максимально большой объем данных в оперативной памяти до такой степени, пока это не начнет неблагоприятно влиять на другие области операционной системы.
Пример  postgresql.conf  основан на конфигурации с RAM 2 GB (без сервера 1С:Предприятие). Тут требуется проработка описания параметров!!!
shared_buffers = 256MB
Общие буферы (shared buffers) – это блоки памяти, используемые для хранения
результатов, пока ядро может формировать ответ и управлять данными. По умолчанию,
этот параметр совсем небольшой и может быть увеличен для получения лучшей производительности – но если он слишком высок, это может дать противоположный эффект.
оптимальное значение зависит от вашей конфигурации: 4 Мб (512 разделяемых буфе-
ров подойдет для компьютера разработчика; от 16 до 32 Мб (от 2048 до 4096) хорошо
работает на компьютере с объемом оперативной памяти от 256 до 512 Мб, использую-
щем набор данных среднего размера; для систем высокого класса (1 Гб памяти и более)
лучше установить что-то между 64 и 256 Мб (от 8192 до 32768 буферов).
Кстати, основное кэширование данных происходит в буферах операционной системы.
* temp_buffers = 20MB
* work_mem = 10MB
* maintenance_work_mem = 60MB
* max_fsm_pages = 1024000
* max_fsm_relations = 5000
* fsync = on
оставлено включенным, т.к. используется кэширующий write-back контроллер SCSI
На производительность PostgreSQL оказывает существенное влияние производительность дисковой системы, поскольку по умолчанию, параметр fsync включен. Это означает, что при выполнении операции COMMIT данные сразу переписываются из кеша операционной системы на диск, тем самым гарантируется консистентность при возможном аппаратном сбое. Обратной стороной этого является снижение производительности операций записи на диск, поскольку при этом не используются возможности отложенной записи данных операционной системы. 
В версии 8.3 реализован механизм «асинхронных транзакций»,не заменяющий механизм fsync, но также ускоряющий работу и включается так:
SET synchronous_commit TO OFF;
    * full_page_writes = off
т.к. используется кэширующий write-back контроллер SCSI
* wal_buffers = 512kB
* checkpoint_segments = 12
* checkpoint_timeout = 15min
* random_page_cost = 1.5
т.к. оперативной памяти на сервере достаточно для эффективного кэширования чтения используемых областей базы данных + быстрая дисковая система
 
* effective_cache_size = 256MB
Работа оптимизатора в PostreSQL 8.2 существенно зависит от размера выделенной PostreSQL оперативной памяти. При использовании PostgreSQL 8.2 при работе с 1С:Предприятием 8.1 рекомендуется увеличить значение параметра. Значение этого параметра рекомендуется устанавливать не менее половины объема оперативной памяти установленной на компьютере.
* max_connections = 100
Количество соединений с СУБД, по умолчанию равно 100 клиентских соединений.
Если задать параметр enable_nestloop = off" , пробовал, у клиента 30 человек с бух работают, блокировки возрастают
Подключения по сети
PostgreSQL использует по-умолчанию для подключения порт 5432.
Особенности взаимодействия с 1С:Предприятие
Применение табличных блокировок в PostgreSQL в автоматическом режиме не является искусственным. 1С:Предприятие 8 в автоматическом режиме блокировок реализует подход неизменности прочитанных в рамках транзакции данных. PostgreSQL, как типичный версионник, не накладывает никаких блокировок на прочитанные данные (в отличие от DB2 или SQL Server - блокировочников), то для обеспечения идентичной функциональности приходится использовать эти самые табличные блокировки.
В управляемом режиме блокировок управление целостностью данных в транзакции отдано на откуп разработчику конфигурации. Там, соответственно, табличные блокировки не используются. Конечно, блокировка на уровне таблицы - это довольно грубо. Но в данном случае было решено принести в жертву параллельность для того, чтобы обеспечить идентичную функциональность.
В патче PostgreSQL для 1С:Предприятия 8 реализован особый вид табличных блокировок, называемах APPLICATION SHARED и APPLICATION EXCLUSIVE. Эти блокировки не накладываются автоматически при выполнении операций чтения/записи. Они просто умеют конфликтовать друг с другом. Данный механизм был разработан по той причине, что штатный механизм блокировок PostgreSQL конфликтует с процессом autovacuum. А если над базой данных не проводить этот autovacuum, то не происходит своевременного обновления статистики и производительность выполнения операций с базой данных начинает существенно деградировать.
Регламентные процедуры
Backup можно сделать примерно такой командой:
pg_dump -h localhost -U postgres -Fc -Z9 -c -f Database.bakups Database
И восстановить:
pg_restore -h localhost -U postgres -c -d Database -Fc Database.bakups
где "Database" - имя вашей базы в кластере.
Также чтобы не вводить пароль при выполнении этих команд, в каталоге пользователя от имени которого они запускаются положить файл .pgpass:
*:*:*:postgres:password
Переход с PostgreSQL 8.1 на 8.2
При переходе с версии 8.1 на 8.2 мы делали примерно следующее:
1. Сделали полный дамп баз данных:
pg_dumpall > AllDatabase.backup
2. Останавливаем сервис:
/etc/init.d/postgresql stop
3. Удаляем старый постгрес
rpm -e postgresql*
4. Устанавливаем новый (по инструкции 1С):
rpm -i postgresql*
5. Запускаем:
LANG=ru_RU.utf-8 /etc/init.d/postgresql start
6. Восстанавливаем базы:
/usr/local/pgsql/bin/psql -d postgres -f AllDatabase.backup
Анализ быстродействия
Обновление статиски - команда Analyze.
План выполнения запроса - PGAdmin - команда Explain.
Файлы
Материалы для сборки версии СУБД PostgreSQL, поддерживаемой 1С:Предприятием 8, состоят из набора патчей к оригинальным исходным текстам СУБД PostgreSQL.
Версия 8.1.5
1c_FULL_81-0.14.patch патч содержит дополнительные модули расширения и необходимые изменения к СУБД, добавляющие функциональность, необходимую для работы с сервером 1С:Предприятия 8.1
block-0.1_8.1.5.patch патч, исправляющий ошибки зависания PostgreSQL 8.1.5 для Windows
postgresql-1c-8.1.5.patch патч модифицирующий скрипт запуска/останова и конфигурационных файлов PostgreSQL для повышения производительности при работе с сервером 1С:Предприятия 8.1
applock-1c-8.1.5.patch патч устраняющий проблему блокировок при использовании AUTOVACUUM.
postgresql-8.1.5-14.1C.src.rpm RPM-пакет c исходными кодами PostgreSQL версии 8.1.5, включающий все необходимые патчи для обеспечения совместимости с сервером 1С:Предприятия 8.1, а также патч applock-1c-8.1.5.patch.
При создании данного пакета использовался оригинальный пакет исходных кодов postgresql-8.1.1-1PGDG, взятый из дистрибутива Fedore Core 4
Версия 8.2.4
1c_FULL_82-0.14.patch патч содержит дополнительные модули расширения и необходимые изменения к СУБД, добавляющие функциональность, необходимую для работы с сервером 1С:Предприятия 8.1
postgresql-1c-8.2.patch патч модифицирующий скрипт запуска/останова и конфигурационных файлов PostgreSQL для повышения производительности при работе с сервером 1С:Предприятия 8.1
applock-1c-8.2.4.patch патч устраняющий проблему блокировок при использовании AUTOVACUUM.
postgresql-8.2.4-3.1C.src.rpm RPM-пакет c исходными кодами PostgreSQL версии 8.2.4, включающий все необходимые патчи для обеспечения совместимости с сервером 1С:Предприятия 8.1
При создании данного пакета использовался оригинальный пакет исходных кодов postgresql-8.2.4-1PGDG
 Данные патчи предназначены для использования с исходными кодами PostgreSQL версии 8.1.5 (http://www.postgresql.org/ftp/source/v8.1.5/). 
Патчи 1c_FULL_81-0.14.patch1c_FULL_82-0.14.patch и block-0.1_8.1.5.patch подготовлены членами команды разработчиков PostgreSQL Олегом Бартуновым и Федором Сигаевым.
Необходимые компоненты: 
библиотека ICU (http://icu.sourceforge.net) - необходима для работы версии PostgreSQL, совместимой с сервером 1С:Предприятия 8.1 (возможно также использование динамических библиотек ICU, входящих в комплект поставки платформы 1С:Предприятие 8.1) 
Ресурс для скачивания модифицированного PostgreSQL: 
  http://users.v8.1c.ru/Platform_8_2_4_31C.aspx

Опубликованная версия PostgreSQL 8.3.3 адаптирована для работы с сервером 1С:Предприятия 8, начиная с версии 8.1.12.

Подробности о версии PostgreSQL 8.3.3 и особенности перехода на данную версию можно прочитать по адресу:http://www.postgresql.org/docs/current/static/release-8-3.html
Оригинал исходных текстов СУБД PostgreSQL версии 8.3.3 можно получить по адресу:http://www.postgresql.org/ftp/source/v8.3.3/
 
Полезные ссылки:
Материалы Что такое PostgreSQL ?.
Материалы Статья о PostgreSQL
Настраиваем PostgreSQL

# cd /disk/psql/ # mkdir data # chown postgres data # su — postgres $ *LANG=ru_RU.UTF-8 **/disk/psql/bin/initdb -D /disk/psql/data*На экран будет выведено следующее сообщение:

Success. You can now start the database     
server using:  
/disk/psql/bin/postmaster -D /disk/psql/data  
or  /disk/psql/bin/pg_ctl -D /disk/psql/data -l /disk/psql/data/logfile start

Необходимо также изменить некоторые настройки в файле /disk/psql/data/postgresql.conf:

default_with_oids = on  stats_row_level = off  listen_addresses = '*'

В конец файла /disk/psql/data/pg_hba.conf добавляем

host all all 0.0.0.0/0 md5

Запускаем PostgreSQL от имени пользователя postgres и устанавливаем пароль администратора в примере postgres

$ LANG=ru_RU.UTF-8 /disk/psql/bin/pg_ctl    
-D /disk/psql/data -l /disk/psql/data/    
logfile start  
$ cd /disk/psql/bin/  
$ ./psql -h localhost postgres postgres  
Welcome to psql 8.1.5, the PostgreSQL    
interactive terminal.  
Type: \copyright for distribution terms  
\h for help with SQL commands  
\? for help with psql commands  
\g or terminate with semicolon to execute    
query  \q to quit  
postgres=# ALTER USER postgres PASSWORD    'postgres';

Все. Система готова к созданию вашей базы.

Особенности использования PostgreSQL 8.2

В PostreSQL 8.2 изменена работа оптимизатора существенно зависит от размера выделенной PostreSQL оперативной памяти. При использовании PostgreSQL 8.2 при работе с 1С:Предприятием 8.1 рекомендуется увеличить значение параметра effective_cache_size в конфиргурационном файле postgresql.conf. Значение этого параметра рекомендуется устанавливать не менее половины объема оперативной памяти установленной на компьютере.

Особенности использования параметра FSYNC при настройке параметров Write Ahead Log PostgreSQL
На производительность PostgreSQL оказывает существенное влияние производительность дисковой системы, поскольку по умолчанию, параметр fsync включен. Это означает, что при выполнении операции COMMIT данные сразу переписываются из кеша операционной системы на диск, тем самым гарантируется консистентность при возможном аппаратном сбое. Обратной стороной этого является снижение производительности операций записи на диск, поскольку при этом не используются возможности отложенной записи данных операционной системы.
Повышение производительности возможно при использовании многодисковых RAID-массивов, созданных на основе кэширующих RAID-контроллеров с энергонезависимой кэш-памятью и использования источников бесперебойного питания(UPS). В этом случае задачу по обеспечению консистентности данных при аппаратном сбое берут на себя описанные выше устройства, поэтому появляется возможность отключения параметра fsync и увеличения производительности операций записи на диск.
Следует отметить, что увеличение количества дисков в RAID-массиве и объема кеша RAID-контроллера само по себе позволяет компенсировать снижение производительности, обусловленное включением параметра fsync.
Что надо знать еще:
postgresql.conf отвечает за общую конфигурацию
pg_hba.conf за авторизацию пользователей с различных компьютеров, причем рекомендуемая запись полностью попирает всю безопасность
а, еще более точно по файлам так
Путь к команде psql: /usr/bin/psql
Путь к разделяемым библиотекам PostgreSQL: /usr/lib/postgresql
Начальная база данных PostgreSQL: template1
Команда для запуска PostgreSQL: /etc/rc.d/postgresql start
Команда для остановки PostgreSQL: /etc/rc.d/postgresql stop
Путь к файлу PID postmaster: /var/lib/postgres/data/postmaster.pid
Путь к файл настроек доступных узлов: /var/lib/postgres/data/pg_hba.conf
Path to pg_dump command: /usr/bin/pg_dump
Path to pg_restore command: /usr/bin/pg_restore
Утилита управления сервисами вызывается командой:
system-config-services
Бэкап:
"C:\Program Files\PostgreSQL\8.2.4-2.1C\bin\pg_dump.exe" -i -h localhost -p 5432 -U postgres -c -Fc -f "Database.backup" "Database"
или
"C:\Program Files\PostgreSQL\8.2.4-2.1C\bin\pg_dump.exe" -h localhost -U postgres -Fc -f "Database.bakups" "Database"
 
Восстановление:
"C:\Program Files\PostgreSQL\8.2.4-2.1C\bin\pg_restore.exe" -i -h localhost -p 5432 -U postgres -c -d "Database" "Database.backup"
Для бета версии 1С:Предприятие смотрите мою статью Гилев Вячеслав - Установка 1С:Предприятие 8.1 бета в картинках
Для работы с новой версией PostgreSQL 8.2.4-6.1c требуется использовать релиз 8.1.10. При использовании релиза 8.1.9 или меньше будет невозможно создать новую информационную базу.
Другие настройки здесь и здесь.

style="display:inline-block;width:728px;height:15px"
data-ad-client="ca-pub-4493870272388852"
data-ad-slot="6622567932">