PostgreSQL 8.1 — новая версия открытой СУБД


Оглавление (нажмите, чтобы открыть):

Установка 1С 8.2 и 8.3 на бесплатную СУБД PostgreSQL

С появлением новых версий MS SQL и изменение политики лицензирования «на каждое ядро» , а также «не детской» стоимостью самих лицензий, многие специалисты начинают искать обходные пути для решения данной проблемы. Конечно, если деньги позволяют, то можно прикупить MS SQL и работать себе спокойно, но при их отсутствии некоторые начинают использовать бесплатные версии СУБД, такие как: PostgreSQL и IBM DB2, точнее IBM DB2 Express-C.

Данные СУБД хорошо зарекомендовали себя в различных областях. Недаром компания 1С выбрала их в качестве поддерживаемых. Безусловно в каждой из них есть свои преимущества и недостатки. Так как в данной статье мы рассматриваем PostgreSQL, то его основные плюсы и минусы:

+ Абсолютно бесплатная СУБД
+ Инсталляционные дистрибутивы как под Windows так и под Linux.
+ Нет ограничений на использовании CPU и RAM
+ Поддержка отказоустойчивых кластеров

— Медленно и некорректно работает с автоматическими блокировками (используйте только управляемые блокировки)
— Сортировка Null работает наоборот
— Некоторые операторы запросов 1С очень медленно отрабатывают
— Отсутствует автоматическая реиндексация(ручной Reindex)

Но для большинства информационных баз 1С данная СУБД подойдет идеально. Особенно в приоритете тот факт, что она БЕСПЛАТНАЯ. Давайте рассмотрим собственно пошаговую установку . Нам понадобится: PostgreSQL 9.4.2-1.1C, Сервер 1С Предприятия (х86-64). Дистрибутивы берем с официального сайта поддержки 1С

1.Установка сервера 1С Предприятие

  • Распаковываем архив с технологической платформой и запускаем setup.exe. Следует заметить, что установка сервера 1С мало чем отличается от установки обычной тех. платформы, за исключением того, что необходимо включить некоторые компоненты.
  • Выбираем для установки дополнительные компоненты.Первые три пункта мы не трогаем и они нас не интересуют. Это различные варианты клиентов для работы с 1С. Если вы планируете использовать веб-сервер или тонкий клиент через интернет, то следует выбрать установку «Модуль расширения веб-сервера». Администрирование сервера 1С устанавливать не обязательно, его можно установить на компьютере администратора баз данных.

P.S Не рекомендуется совмещать роль терминального сервера и роль сервера 1С.

  • Указываем под каким пользователем будет запускаться приложение. Рекомендуется создать нового пользователя USR1Cv8 с соответствующими правами. Создавая пароль следует учесть, что он должен соответствовать политики безопасности, иначе получите ошибку 8007056B / 800708C5. После чего жмем «Установить».
  • После установки сервера 1С не забываем обновить версии платформ на клиентских машинах, иначе вы получите информационное сообщение о различии версий.

2.Установка PostgreSQL

  • Распаковываем архив и запускаем установщик, в зависимости от разрядности вашей операционной системы. Оставляем практически все по умолчанию. Выбираем нужный язык и жмем далее.
  • СУБД PostgreSQL следует установить как сервис . Система по умолчания создаст нового пользователя от имени которого будет запускаться служба и предложит ввести пароль к нему.
  • Далее последует настройка кластера 1С и указать пароль. Обязательно для полноценной работы должна быть запущена служба «Вторичный вход в систему». Далее ничего не выбираем и оставляем все настройки по умолчанию.

1С и Linux

Пишу для себя, чтобы не забыть как делал. 95 % рабочее. На комментарии отвечаю, когда увижу.

вторник, 30 июля 2020 г.

Тестирование PostgreSQL, версия 10.8-13.1C

В данной статье опишем установку сервера СУБД PostgreSQL версия 10.5-24.1C на ubuntu server 16.04.6.
Драйверы hasp берем etersoft
1. Установка ubuntu 16.04.6
Устанавливаем ubuntu 16.04.6 без swap файла, т.е. размечаем вручную весь диск ext4 root.
RAM (16 GB) монтируем диск для backup /backup

Настройки ubuntu пользователь (привязка в скриптах) user пароль 12345, имя компьютера u1604, позже мы его сменим скриптом, как и ip адрес.

После установки, Ctrl +Alt + T (окно терминала)
$ sudo apt update -y
$ sudo apt upgrade -y
$ sudo apt autoremove -y
$ sudo apt install mc ssh samba -y

Возможно sudo apt upgrade -y не пройдет из за блокировки, тогда sudo reboot и повторите с начала.

2. Настройка сети

Тестовый сервер будет использовать dhcp

Смотрим:
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 u1604

$ sudo nano /etc/hosts

127.0.0.1 localhost test2

$ cat /proc/cpuinfo | grep MHz
cpu MHz : 800.111
cpu MHz : 800.028
cpu MHz : 800.377
cpu MHz : 800.190

3. Тюнинг остального:

Сделаем еще один скрипт для настройки остального:

#!/bin/bash
# отключим ipv6
sudo /bin/su -c «echo ‘net.ipv6.conf.all.disable_ipv6 = 1’ >> /etc/sysctl.conf»
sudo /bin/su -c «echo ‘net.ipv6.conf.default.disable_ipv6 = 1’ >> /etc/sysctl.conf»
sudo /bin/su -c «echo ‘net.ipv6.conf.lo.disable_ipv6 = 1’ >> /etc/sysctl.conf»
#sudo /bin/su -c «echo ‘net.ipv4.ip_forward = 1’ >> /etc/sysctl.conf»
#тюнинг postgresql
#add a swap file to an Ubuntu 16.04
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo cp /etc/fstab /etc/fstab.bak
sudo echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab
sudo /bin/su -c «echo ‘vm.swappiness=1’ >> /etc/sysctl.conf»
sudo /bin/su -c «echo ‘kernel.sched_migration_cost_ns = 5000000’ >> /etc/sysctl.conf»
sudo /bin/su -c «echo ‘kernel.sched_autogroup_enabled = 0’ >> /etc/sysctl.conf»
sudo /bin/su -c «echo ‘vm.dirty_background_bytes = 67108864’ >> /etc/sysctl.conf»
sudo /bin/su -c «echo ‘vm.dirty_bytes = 536870912’ >> /etc/sysctl.conf»
sudo /bin/su -c «echo ‘vm.zone_reclaim_mode = 0’ >> /etc/sysctl.conf»
sudo sysctl -p
# перезагрузим сеть
#sudo systemctl restart networking.service
#sudo systemctl start networking.service
#sudo systemctl enable networking.service
# Настройка sudo journalctl -b sudo journalctl -b -1 sudo journalctl —list-boots
sudo sed -i ‘s/#Storage=auto/Storage=persistent/’ /etc/systemd/journald.conf
# Отключение уведомлений службы Apport (/var/crash)
sudo sed -i ‘s/enabled=1/enabled=0/’ /etc/default/apport
# Отключим службу ondemand# (для разгона cpu)
# cat /proc/cpuinfo | grep MHz
# systemctl status ondemand
sudo systemctl stop ondemand
sudo systemctl disable ondemand
# shutdown -r now

Сохраним файл tuning .sh

После перезагрузки по сети можно подключиться MobaXterm

$ cat /proc/cpuinfo | grep MHz
cat /proc/cpuinfo | grep MHz
cpu MHz : 4000.489
cpu MHz : 4000.162
cpu MHz : 4000.980
cpu MHz : 4002.072

$ free
total used free shared buff/cache available
Память: 16284616 95512 15944100 1312 245004 15870784
Подкачка: 1048572 0 1048572

Установка СУБД PostgreSQL версия 10.8-13.1C

$ mkdir /home/user/test
В папку /test положить файлы:

$ wget —quiet -O — https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add —
$ sudo sh -c ‘echo «deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main» >> /etc/apt/sources.list.d/postgresql.list’
$ sudo apt update -y
$ sudo apt-get install postgresql-common libtcl8.6 -y
$ dpkg -l | grep postgres | awk -F’ ‘ ‘‘ | sudo xargs apt-mark hold
#pgdg-keyring помечен как зафиксированный.
#postgresql-client-common помечен как зафиксированный.
#postgresql-common помечен как зафиксированный.
$ dpkg -l | grep libtcl8.6 | awk -F’ ‘ ‘‘ | sudo xargs apt-mark hold
#libtcl8.6 помечен как зафиксированный.
$ mkdir -p /tmp/post
$ cp /home/user/test/postgresql_10.8_13.1C_amd64_deb.tar.bz2 /tmp/post/
$ cp /home/user/test/postgresql_10.8_13.1C_amd64_addon_deb.tar.bz2 /tmp/post/
$ cd /tmp/post
$ tar -xvf postgresql_10.8_13.1C_amd64_deb.tar.bz2
$ ls
$ cd postgresql-10.8-13.1C_amd64_deb
$ ls
# список файлов:
#libpq5_10.5-24.1C_amd64.deb postgresql-10_10.5-24.1C_amd64.deb postgresql-client-10_10.5-24.1C_amd64.deb
$ sudo dpkg -i *.deb
# ниже можно не ставить:
$ cd /tmp/post/
$ tar -xvf postgresql_10.8_13.1C_amd64_addon_deb.tar.bz2
$ ls
$ cd postgresql-10.8-13.1C_amd64_addon_deb
$ sudo dpkg -i *.deb
# конец не ставить
$ dpkg -l | grep 10.8-13.1C | awk -F’ ‘ ‘‘ | sudo xargs apt-mark hold
#libecpg-compat3 помечен как зафиксированный.
#libecpg-dev помечен как зафиксированный.
#libecpg6 помечен как зафиксированный.
#libpgtypes3 помечен как зафиксированный.
#libpq-dev помечен как зафиксированный.
#libpq5 помечен как зафиксированный.
#postgresql-10 помечен как зафиксированный.
#postgresql-10-dbg помечен как зафиксированный.
#postgresql-client-10 помечен как зафиксированный.
#postgresql-doc-10 помечен как зафиксированный.
#postgresql-plperl-10 помечен как зафиксированный.
#postgresql-plpython-10 помечен как зафиксированный.
#postgresql-plpython3-10 помечен как зафиксированный.
#postgresql-pltcl-10 помечен как зафиксированный.
#postgresql-server-dev-10 помечен как зафиксированный.

$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
10 main 5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log

$ sudo pg_dropcluster —stop 10 main

$ sudo pg_createcluster —locale ru_RU.UTF-8 10 main — —data-checksums

$ sudo pg_ctlcluster 10 main start

$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
10 main 5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log

$ sudo -u postgres psql -U postgres -c «alter user postgres with password ‘pass’;»
$ sudo cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak

#Делаем проверки
$ sudo systemctl status postgresql.service
$ ss -tunpl | grep 5432
tcp LISTEN 0 128 *:5432 *:*
tcp LISTEN 0 128 . 5432 . *
$ ps aux | grep postgres | grep — -D
postgres 4914 0.0 0.1 320972 28864 ? S 08:37 0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf

Настройка postgresql.conf для 1С Total Memory (RAM): 16 GB

$ sudo nano /etc/postgresql/10/main/postgresql.conf
Добавить в конец:

# DB Version: 10
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 16 GB
# Data Storage: ssd

max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 8GB # 4GB for 1c
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB

default_statistics_target = 100
effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = ‘%t [%p]: [%l-1] user=%u,db=%d,client=%h ‘
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
lc_messages=’C’
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = ‘on’
online_analyze.table_type = ‘temporary’
online_analyze.verbose = ‘off’

Установка pg_probackup

$ sudo su -c «echo ‘deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)’ > /etc/apt/sources.list.d/pg_probackup.list»
$ sudo su -c «wget -O — http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | apt-key add -»
$ sudo apt-get update
$ sudo apt-get install pg-probackup-10
$ dpkg -l | grep pg-probackup-10 | awk -F’ ‘ ‘‘ | sudo xargs apt-mark hold
#pg-probackup-10 помечен как зафиксированный.

Инициализация каталога резервных копий 1 экземпляр на примонтированом HDD

Каталог резервных копий /backup/pg_probackup расположено на hdd диске, в нем будем ежедневно сохранять backup за 30 дней без непрерывного архивирования.
Если нет дополнительного диска, выполняем закомментированые команды
$ sudo pg_probackup-10 init -B /backup
$ sudo mkdir /backup/copy
$ sudo mkdir /backup/log
$ sudo mkdir /backup/pg_dump
$ sudo chown -R postgres:postgres /backup/
#$ sudo chmod -R 777 /backup/pg_probackup

Определение копируемого экземпляра
$ sudo -u postgres pg_probackup-10 add-instance -B /backup -D /var/lib/postgresql/10/main —instance main

$ sudo nano /etc/postgresql/10/main/postgresql.conf

max_wal_senders = 10
wal_level = replica
unix_socket_directories=’/var/run/postgresql’
# Для настройки архивного резервного копирования разкомментировать:
archive_mode = on
#archive_command =’test ! -f /wal/%f && cp %p /wal/%f’
archive_command = ‘/usr/bin/pg_probackup-10 archive-push -B /backup —compress —instance main —wal-file-path %p —wal-file-name %f’

$ sudo systemctl restart postgresql.service

Настройка политики сохранения 5 резервных копий

$ sudo -u postgres nano /backup/backups/main/pg_probackup.conf


Создание полной автономной резервной копии:

$ sudo -u postgres pg_probackup-10 backup -B /backup —instance main -b FULL —stream —compress —delete-wal —expired

$ sudo -u postgres pg_probackup-10 show -B /backup

Проверка файлов:
$ sudo -u postgres pg_probackup-10 checkdb -B /backup —instance main
INFO: Start checking data files
INFO: Data files are valid

Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup
INFO: Validate backups of the instance ‘main’
INFO: Validating backup PUVU29
INFO: Backup PUVU29 data files are valid
INFO: Backup PUVU29 WAL segments are valid
INFO: Validating backup PUVTUX
INFO: Backup PUVTUX data files are valid
INFO: Backup PUVTUX WAL segments are valid
INFO: All backups are valid

Пример восстановления из полной автономной резервной копии (замена кластера на резервную копию)

Сделали копию:
$ sudo -u postgres pg_probackup-10 backup -B /backup —instance main -b FULL —stream —compress —expired

$ sudo -u postgres pg_probackup-10 show -B

Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup

INFO: Validate backups of the instance ‘main’
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid

Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c «rm -rf /var/lib/postgresql/10/main/*»

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup —instance main -i PRP29I
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
INFO: Backup PRP29I is valid.
INFO: Restore of backup PRP29I completed.

Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service

Пример восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)

$ sudo -u postgres pg_probackup-10 backup -B /backup —instance main -b FULL —stream —compress —delete-wal —expired

$ sudo -u postgres pg_probackup-10 show -B /backup

Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup

INFO: Validate backups of the instance ‘main’
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
Можно восстанавливать, но проверим непрерывность архивирования:

Войти в 1с создать документ, провести, выйти из 1с.

$ sudo -u postgres pg_probackup-10 val
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
WARNING: Thread [1]: Could not read WAL record at 1/88000000
ERROR: Thread [1]: WAL segment «/backupwal/wal/main/000000010000000100000088» is absent
WARNING: Recovery can be done up to time 2020-05-18 14:36:30+03, xid 0 and LSN 1/2A000198
ERROR: Not enough WAL records to time 2042-04-16 12:26:00+03

Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c «rm -rf /var/lib/postgresql/10/main/*»

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup —instance main -i PRP6Q5 —recovery-target=’latest’

INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
INFO: Backup PRP6Q5 is valid.
INFO: Restore of backup PRP6Q5 completed.

Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service

Для проверки стандартной wal архивации:

$ sudo mkdir -p /wal
$ sudo chown -R postgres:postgres /wal

Мастер Йода рекомендует:  Как легко добавить CSS анимацию в WordPress

$ sudo nano /etc/postgresql/10/main/postgresql.conf

расскоментировать:
archive_command =’test ! -f /wal/%f && cp %p /wal/%f’

$ sudo systemctl restart postgresql.service

В папку /test положить файлы:
deb64_8_3_15_1565.tar.gz

# установка 1с
$ mkdir -p /tmp/1ctmp
$ cd /tmp/1ctmp
$ sudo apt install imagemagick -y
#$sudo apt install -y unixodbc libgsf-1-114 libglib2.0
$ sudo apt install libfreetype6 libgsf-1-common unixodbc glib2.0
#ubuntu
$ sudo apt install -y xfonts-utils cabextract
$ sudo apt install ttf-mscorefonts-installer -y
$ ls /home/user/test/
$ cp /home/user/test/deb64_8_3_15_1565.tar.gz /tmp/1ctmp
$ tar xvzf deb64_8_3_15_1565.tar.gz
$ sudo dpkg -i 1c-enterprise83-common_8.3.15-1565_amd64.deb
$ sudo dpkg -i 1c-enterprise83-server_8.3.15-1565_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-ws_8.3.15-1565_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-crs_8.3.15-1565_amd64.deb
#$ sudo apt -f -y install
$ sudo chown -R usr1cv8:grp1cv8 /opt/1C
$ sudo echo -e «pass\npass\n» | sudo passwd usr1cv8
$ sudo service srv1cv83 start
$ sudo service srv1cv83 status
#$ sudo usermod -aG sudo usr1cv8

$ sudo apt install -y libc6-i386
$ mkdir /tmp/hasp
$ cd /tmp/hasp
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/16.04/haspd-modules_7.90-eter2ubuntu_amd64.deb
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/16.04/haspd_7.90-eter2ubuntu_amd64.deb

$ sudo dpkg -i *.deb
#$ sudo apt-get install -f -y
$ sudo service haspd start
$ sudo service haspd status
$ sudo reboot

$ sudo service srv1cv83 status
$ ss -tlnp | grep :15
LISTEN 0 128 *:1560 *:*
LISTEN 0 128 *:1540 *:*
LISTEN 0 128 *:1541 *:*
LISTEN 0 128 . 1560 . *
LISTEN 0 128 . 1540 . *
LISTEN 0 128 . 1541 . *

Не встал скриптом imagemagick?
Без строчки ниже будет ругаться при входе в 1с
$ sudo apt-get install imagemagick -y

Для программной лицензии (прявязанной к hasp)

в /var/1C/licenses
Положить лицензию

$ sudo mv 20200207114003.lic /var/1C/licenses

PostgreSQL 8.1 — новая версия открытой СУБД

Пожалуйста, ответьте на вопросы для выбора подходящей сборки PostgreSQL

Назад
Далее
Последний вопрос

Сайт создан компанией Postgres Professional
для сообщества пользователей 1С

PostgreSQL: вчера, сегодня, завтра

К сегодняшнему дню вокруг полнофункциональной СУБД с открытым кодом PostgreSQL сформировалась экосистема создания и развертывания высокопроизводительных решений, позволяющая рассматривать эту СУБД как реальную альтернативу коммерческим продуктам.

Полнофункциональная СУБД с открытым кодом PostgreSQL образовала вокруг себя экосистему построения и эксплуатации высокопроизводительных решений и сегодня эту систему можно рассматривать как альтернативу коммерческим продуктам.

Корни PostgreSQL уходят в проект POSTGRES Майкла Стоунбрейкера, профессора Калифорнийского университета в Беркли, получивший развитие как одна из трех ветвей реляционных баз данных. Первая выросла из System R, продвигаемой IBM в начале 70-х, вторая — это проект Ingres Стоунбрейкера и третья — Oracle. СУБД Ingres развивалась в духе Беркли как открытая база, коды которой распространялись на лентах по цене почтовых отправлений. Система разрабатывалась для операционной системы UNIX PDP 11, что и предопределило ее популярность, а либеральная лицензия BSD и харизма Стоунбрейкера способствовали как развитию Ingres, так и появлению большого количества реляционных СУБД.

Проект Postgres стал результатом осмысления опыта Ingres и желания преодолеть ограниченность типов данных за счет возможности определения новых типов. Работа над проектом началась в 1985 году; в период с 1985 по 1988 год появились описание модели данных, язык запросов POSTQUEL и хранилище, однако уже тогда отмечалась ограниченность реляционной модели, вытекающая из ее простоты. Первая версия постреляционной СУБД Postgres вышла в 1989 году, причем коды Ingres и Postgres не имели ничего общего. После выпуска в 1993 году версии 4.2 проект был закрыт, однако открытый код и лицензия BSD подвигли выпускников Беркли Эндрю Ю и Джолли Чена в 1994 году взяться за его дальнейшее развитие. После замены языка запросов POSTQUEL на стандартный SQL проект, получивший название Postgres95, сразу привлек к себе множество последователей.

В 1996 году проект получил название PostgreSQL, чтобы подчеркнуть связь с оригинальным проектом POSTGRES и SQL, а управление им взяла на себя инициативная группа пользователей и разработчиков PGDG (PostgreSQL Global Development Group). Все решения о планах развития и выпусках новых версий принимаются управляющим комитетом (Core team), состоящим из шести человек. Помимо этого, выделяется группа основных (major) разработчиков (около 20 человек, из которых трое из России), внесших существенный вклад в развитие PostgreSQL, а также просто разработчиков.

Разработка и поддержка

Цикл работы над очередной «мажорной» версией PostgreSQL обычно составляет около года, в течение которого любой желающий может отправить на рассмотрение свои рекомендации (патчи). Для их обсуждения используется список рассылки pgsql-hackers, и если патч прошел обязательную процедуру проверки другими разработчиками, то он включается в новый релиз (на сайте commitfest.postgresql.org организована процедура отслеживания статуса предложенных рекомендаций). В ходе подготовки релиза появляются бета-версии, выпуск которых обычно совмещается с проведением конференций PGDG.

В некоторый момент объявляется этап замораживания кода (code freeze), в течение которого рекомендации с новой функциональностью не принимаются, а допускается только исправление или улучшение кода. Иногда в процессе работы над новой версией вскрываются или исправляются ошибки предыдущих версий (backporting), и по мере накопления таких исправлений принимается решение о выпуске новой стабильной версии, совместимой со старой. Например, 9.4.4 — это исправленная версия (bugfix) стабильной версии 9.4. Ближе к концу цикла выпускается Release Candidate, а затем выходит и новая мажорная версия PostgreSQL.

Через списки рассылки PGDG выполняет поддержку мажорных версий на протяжении пяти лет с момента ее выпуска, причем корректно оформленное сообщение об ошибке имеет все шансы на скорейшее рассмотрение и нередки случаи, когда исправления выпускаются в течение суток. Помимо поддержки сообществом разработчиков, ведется и коммерческая поддержка PostgreSQL, которую осуществляют ряд компаний: EnterpriseDB в Северной Америке, 2ndQuadrant, Dalibo и другие в Европе и «Постгрес Профессиональный» в России.

Российский след PostgreSQL

Одним из первых разработчиков PostgreSQL (1996 год) был Вадим Михеев из Красноярска. Он автор таких частей СУБД, как: многоверсионное управление одновременным доступом (multiversion concurrency control, MVCC), на которой в современном PostgreSQL базируются управление транзакциями и поддержка целостности данных; система очистки (Vacuum); журнал транзакций (WAL); вложенные запросы и триггеры. Сегодня среди основных разработчиков проекта PostgreSQL три представителя из России: научный сотрудник ГАИШ МГУ Олег Бартунов, выпускник физфака МГУ Федор Сигаев и Александр Коротков (МИФИ). Ими выполнена локализация PostgreSQL (поддержка национальных кодировок, включая Unicode), создана система полнотекстового поиска и работы со слабоструктурированными данными (hstore, json, jsonb), а также предложены новые методы индексации (GiST, GIN, SP-GiST).

Бартунов и Сигаев входили в команду разработчиков портала «Рамблер» (лидера Рунета начала 2000-х), для которого потребовалось создать систему управления контентом и платформу для разработки контентных проектов, сочетающую высокую производительность и гибкость. Именно тогда возникла идея организовать средствами СУБД быстрый поиск по массивам, однако на тот момент в PostgreSQL поддерживалась работа с индексами типов B-tree и R-tree, что плохо подходило для данной задачи, поэтому разработчики обратили внимание на инфраструктуру обобщенных индексных деревьев Generalized Search Tree (GiST).

Первоначально система GiST была исследовательским проектом — обобщением над R-tree и его вариациями (RD-tree, signature-tree и т. д.), а реализация GiST для PostgreSQL, предложенная авторами GiST, имела много ограничений (ключи только фиксированного размера, отсутствие поддержки восстановления и т. д.), не позволяющих говорить о промышленном использовании. Бартунов и Сигаев модернизировали GiST, которая стала полноценным компонентом PostgreSQL, — на ее базе были разработаны индексы для быстрого поиска по массивам, система полнотекстового поиска OpenFTS и индексы для поиска по деревьям и графам ltree. Реализация R-tree с помощью GiST заменила отдельную реализацию R-tree в PostgreSQL.

В 2011 году Александр Коротков, будучи аспирантом МИФИ, в рамках программы Google Summer of Code разработал реализацию алгоритма построения GiST на дисковом пространстве и представил ее на конференции PGConf.EU 2011 (https://wiki.postgresql.org/images/0/07/Fast_GiST_index_build.pdf). Затем он предложил новый алгоритм разделения узла для R-tree, который был использован в различных применениях GiST: для встроенных геометрических типов данных, диапазонов, pgSphere, типа geometry в PostGIS.

Система полнотекстового поиска PostgreSQL является одним из главных достоинств этой СУБД: возможность включать полнотекстовые критерии поиска в произвольные SQL-запросы выгодно отличает поиск в PostgreSQL от специализированных поисковых движков типа Solr или Sphynx. Сигаев и Коротков разработали систему нечеткого поиска по текстам, действующую на основе разложения на триграммы, — модуль pg_trgm, добавивший возможность индексного поиска по условиям LIKE/ILIKE, а также по регулярным выражениям. Индексный поиск по регулярным выражениям pg_trgm был представлен на международной конференции PGCon 2012 (http://www.pgcon.org/2012/schedule/attachments/248_Alexander%20Korotkov%20-%20Index%20support%20for%20regular%20expression%20search.pdf). Однако для эффективного полнотекстового поиска и поиска по масcивам производительности GiST-индексов не хватало — требовался обратный индекс. По аналогии с GiST такой индекс был реализован: Generalized Inverted iNdex (GIN) позволяет осуществлять индексирование сложных объектов с произвольным разбиением на ключи. GIN был представлен на PostgreSQL Anniversary Summit в Торонто в 2006 году (http://www.sai.msu.su/

megera/postgres/talks/Gin-toronto-2006.pdf). В результате СУБД PostgreSQL может сегодня конкурировать со специализированными системами полнотекстового поиска. Дальнейшим развитием GiST стала технология поиска ближайших соседей (KNN), позволяющая организовывать эффективный поиск как ближайших геометрических объектов, так и похожих изображений и других сложных массивов данных.

Одно из самых популярных расширений PostgreSQL — модуль PostGIS, поддерживающий стандарт OpenGIS и все ГИС-проекции для работы с геометрическими данными в пространствах от двух до пяти измерений. В PostGIS включен разработанный Коротковым алгоритм разделения узла для типа geometry, что увеличило скорость поиска от трех до десяти раз.

Начиная с версии 8.2 (2006 год) в PostgreSQL появилось расширение Hstore, реализующее тип данных для хранения набора пар «ключ — значение», и с ростом востребованности документоориентированных СУБД возникла идея добавить в Hstore поддержку вложенности, типов и массивов. Прототип был представлен Бартуновым и Сигаевым на конференции PGCon 2013. Впоследствии на основе этой работы был создан тип данных jsonb, реализующий эффективное бинарное хранение json-объектов, что стало одной из ключевых особенностей версии PostgreSQL 9.4.

Современная СУБД PostgreSQL

За более чем 20-летнюю историю своего развития PostgreSQL из академической разработки превратилась в полноценную СУБД корпоративного уровня, составляющую реальную альтернативу коммерческим базам. Лицензия PostgreSQL разрешает ее неограниченное использование, модификацию кода, а также включение в состав других продуктов, в том числе закрытых и коммерческих.

Надежность и безопасность

Вопросы обеспечения надежности особенно важны в приложениях уровня предприятия при работе с критически важными данными. СУБД PostgreSQL дает возможность настраивать горячее резервирование и восстановление на заданный момент времени в прошлом, а также поддерживает различные виды репликации (синхронную, асинхронную и каскадную). Все это позволяет строить отказоустойчивые системы с «теплым» или «горячим» резервированием, а также создавать надежные кластерные решения.


Особое внимание в PostgreSQL уделено обеспечению безопасности — СУБД предоставляет различные методы аутентификации: по паролю в открытом или зашифрованном (md5) виде, с помощью серверов LDAP, RADIUS или подключаемых модулей (PAM); по внешней аутентификации (ident, peer, cert — сертификатSSL, gss — Kerberos по протоколу GSSAPI, sspi — Kerberos/NTLM для Windows). При управлении пользователями и доступом к объектам базы данных имеется возможность выделять отдельных пользователей и роли, которые могут быть вложенными; доступ к объектам базы (grant/revoke) может осуществляться как напрямую пользователями, так и косвенно через роли; в версии 9.5 появится разделение доступа на уровне столбцов и строк (Row Level Security); реализована поддержка SELinux через встроенную функциональность SE-PostgreSQL (мандатный доступ).

По мере развития стандарта ANSI SQL его поддержка осуществлялась и в PostgreSQL: SQL-92, SQL:1999, SQL:2003, SQL:2008 и SQL:2011. Версия PostgreSQL 9.4 поддерживает 160 из 179 обязательных возможностей SQL:2011.

СУБД PostgreSQL обеспечивает полную поддержку свойств ACID и гарантирует изоляцию транзакций благодаря механизму многоверсионного управления одновременным доступом — транзакции на чтение никогда не блокируют транзакции на запись, и наоборот. Это справедливо и для самого строгого уровня изоляции SERIALIZABLE, который использует инновационную систему SSI (SERIALIZABLE SNAPSHOT ISOLATION) и обеспечивает полную изоляцию транзакций, гарантирующую, что результат работы одновременных транзакций будет такой же, как и при их последовательном исполнении.

Возможности для разработчиков

Разработчики получают в свое распоряжение инструментарий, позволяющий создавать приложения любого типа. В его состав входят:

  • интерфейсы для Tcl, Perl, C, C++, PHP, Json, ODBC, JDBC, Embedded SQL in C, Python, Ruby, Java;
  • представления, последовательности, наследование, ограничения целостности, внешнее соединение, вложенные запросы, window-функции, CTE (запросы WITH), хранимые процедуры, функции, триггеры;
  • встроенная гибкая система полнотекстового поиска с поддержкой русского и всех европейских языков;
  • поддержка NoSQL: слабоструктурированные данные (xml, json, jsonb);
  • подключение внешних источников в качестве таблиц всех основных баз данных с возможностью записи через Foreign Data Wrappers.

Расширяемость и применение

Расширяемость — одно из фундаментальных свойств системы, лежащее в основе ее архитектуры. Пользователи могут самостоятельно добавлять функции, типы данных, операторы для работы с новыми типами, использовать индексные методы доступа (Btree, Hash, GiST, GIN, SP-GiST) и языки программирования (pl/pgsql, pl/perl, pl/python, pl/tcl, pl/R, pl/java, pl/v8. .). Подключение к внешним источникам (Foreign Data Wrappers) осуществляется через интерфейсы практически ко всем СУБД, а загружаемые расширения позволяют, например, поддерживать геоинформационные данные PostGIS, осуществлять нечеткий поиск с помощью триграмм, работу с массивами и др.

Среди крупнейших пользователей PostgreSQL такие компании, как Microsoft, Yahoo, Instagram, BASF и Afilias. Эта СУБД применяется и в государственном секторе: например, во Франции на базе PostgreSQL работают национальная метеослужба и информационная система национального фонда семейных пособий (CNAF), хранящая данные о 30 млн человек. В России PostgreSQL используется, в частности, компаниями «Яндекс», Avito, а также в ряде государственных структур и на промышленных предприятиях.

PostgreSQL поддерживает все клоны Unix, включая Linux, FreeBSD, Solaris, HPUX, Mac OS X, а также Windows.

Характеристики PostgreSQL

В СУБД PostgreSQL учитываются особенности архитектуры многоядерных процессоров, поэтому производительность растет почти линейно с увеличением количества ядер, но тем не менее в системе имеются некоторые пределы (см. таблицу).

В PostgreSQL используется планировщик запросов, позволяющий оптимизировать сложные запросы. Способность планировщика исключать просмотр дочерних таблиц на основе анализа условия запроса и имеющихся ограничений целостности (constraint exclusion) позволяет реализовать в PostgreSQL секционирование (partitioning), что особенно актуально для крупных хранилищ данных.

При индексировании, помимо традиционного B-дерева, также доступны: Hash, GIN (Generalized INverted index — обобщенный обратный индекс), GiST (Generalized Search Tree — обобщенное поисковое дерево), SP-GiST (Space-Partitioned GiST — пространственный индекс) — причем индексы могут строиться по выражениям (функциональные), а при необходимости создаются индексы только для определенных строк в таблице (частичные индексы).

Отечественная экосистема PostgreSQL

Преодоление технологической зависимости невозможно в закрытой среде [1, 2], поэтому целесообразно внедрять открытое ПО, интегрируя российское сообщество программистов, в частности, в экосистему разработки СУБД PostgreSQL, а также создавать в стране центры компетенции и развивать систему подготовки специалистов. Наличие полного комплекта исходного кода, процедур сборки, а главное, техническая поддержка силами отечественных разработчиков внутри страны являются основой успеха такой интеграции. Действительно, работоспособность СУБД в значительной степени зависит от мощной системы технической поддержки в режиме 24x7x365 — это задача промышленного уровня [3], которую для PostgreSQL решает в России компания «Постгрес Профессиональный».

Мастер Йода рекомендует:  10 полезных материалов по Python для быстрого старта ваших проектов

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

Масштабируемый кластер shared-nothing высокой доступности. Кластер позволит масштабировать запись и обработку данных в системах OLAP и OLTP при обеспечении высокого уровня доступности, что востребовано в высоконагруженных промышленных системах. Дистрибутив отказоустойчивой конфигурации PostgreSQL позволяет относительно просто развернуть кластер с полным дублированием для работы в динамически изменяющихся вычислительных средах (например, облачных). Кроме того, можно создавать кластер MultiMaster высокой доступности с масштабированием по чтению и записи при увеличении числа узлов, причем за счет шардинга данных общая емкость хранения может превышать доступную на каждом из узлов в отдельности.

Подключаемые хранилища. Механизм foreign data wrapper (fdw) для работы со специализированными хранилищами данных (хранение по строкам или колонкам, работа с диском или хранение в оперативной памяти) позволит ускорить выполнение как OLTP-, так и OLAP-запросов.

Система автоматической адаптивной оптимизации исполнения запросов. Современные методы машинного обучения открывают новые перспективы для развития СУБД — такие задачи, как балансировка нагрузки, расчет плана выполнения запросов, построение эффективных индексов и пр., могут иметь оптимальное решение для конкретных наборов данных, запросов и режимов нагрузки. Кроме того, машинное обучение позволяет адаптивно перестраивать алгоритмы обработки в реальном времени. Разработанные совместно со специалистами из МГУ и НИУ ВШЭ инструменты машинного обучения, встроенные в стандартный функционал СУБД, способны расширить привычную область применения СУБД — в частности, позволят эффективно и с минимальной потерей точности в условиях реального времени выполнять запросы на больших объемах данных. Также появится возможность гибко реагировать на изменения распределения данных и запросов, что особенно важно для СУБД эпохи Интернета вещей.

Расширенная функциональность слабоструктурированных данных. Благодаря технологии, позволяющей работать с данными в формате JSON и JSONB, PostgreSQL сочетает в себе такие преимущества традиционных СУБД, как транзакционность, атомарность изменений и целостность данных, с гибкостью NoSQL без потери производительности. Язык запросов к слабоструктурированным данным дает возможность формулировать на SQL сложные запросы, повышая производительность за счет упрощения структур данных, переноса сложной фильтрации данных из приложений на сторону СУБД и эффективного использования индексов.

Усовершенствованная система мониторинга и трассировки выполнения запросов. Для промышленных СУБД необходима возможность мониторинга и трассировки выполнения запросов с отслеживанием ресурсов для разных стадий их обработки — это позволяет оптимизировать работу приложений и конфигурацию сервера. PostgreSQL предоставляет возможность сбора различных метрик функционирования и средства их сопоставления с метриками ОС.

Перевод документации и обучение. Начат процесс по переводу на русский язык технической документации, планируется также ее своевременная актуализация. Кроме того, в России разворачивается система подготовки специалистов по таким направлениям, как современные технологии и разработка СУБД, промышленная эксплуатация СУБД и разработка прикладных информационных систем на базе СУБД с учетом PostgreSQL. Создаются курсы повышения квалификации администраторов и разработчиков, а на их основе выстраивается система сертификации.

Будущее PostgreSQL

В июле 2015 года вышла альфа-версия PostgreSQL 9.5, в которой серьезное внимание уделено реализации новых функций, характерных для решений корпоративного уровня и направленных прежде всего на повышение надежности и быстродействия СУБД.

Функция Row level security позволяет организовать доступ не к таблице целиком, а к ее отдельным строкам. Эта возможность также известна как Virtual Private Database или Fine-grained access control и дополняет набор существующих в PostgreSQL механизмов для управления доступом к данным. Благодаря функции pgaudit можно выполнять детальный аудит операций в базе данных, что особенно полезно для автоматизации контроля функционирования прикладных систем, например для регистрации аудиторского следа. Кроме этого, в новой версии получили развитие средства работы с Большими Данными — в частности, появились индексы Block Range (BRIN) с методом доступа по диапазонам страниц (они занимают меньше пространства и требуют меньше ресурсов при обновлении, хотя и менее эффективны при выборке данных, чем B-tree). Для повышения надежности было включено расширение pg_rewind, которое при использовании репликации «ведущий-ведомый» позволяет быстро синхронизировать сбойный ведущий сервер с ведомым.

Сегодня PostgreSQL — это полнофункциональная СУБД с открытым кодом, позволяющая решать широкий круг задач. За время существования PostgreSQL вокруг нее сформировалась экосистема, включающая разработчиков, аналитиков и пользователей, благодаря чему имеется возможность расширять функционал этой СУБД в зависимости от требований рынка.

Вышла новая версия PostgreSQL

Представлен финальный релиз новой версии популярной СУБД с открытым исходным кодом — PostgreSQL 8.4.

Новая версия содержит множество улучшений, делающих администрирование, написание запросов и программирование баз данных PostgreSQL более простым, чем когда-либо.

Большая часть изменений в PostgreSQL 8.4 — это новые или улучшенные инструменты и команды для администрирования и мониторинга. Каждый пользователь может найти для себя те возможности, которые сделают именно его ежедневную работу с PostgreSQL более лёгкой и продуктивной.

Среди самых популярных улучшений можно выделить следующие.

* Многопоточное восстановление базы данных, обеспечивающее до 8-кратного увеличения скорости реставрации базы данных из резервной копии.

* Права доступа на столбцы, предоставляющие более тонкий контроль над важными данными.

* Раздельные локали для баз данных, что упрощает работу с PostgreSQL в многоязычных окружениях.

* Обновления «на месте» с помощью бета-версии инструмента pg_migrator, который позволяет перейти с версии 8.3 на 8.4 без существенного простоя системы.

* Новые инструменты мониторинга запросов, помогающие администраторам получить лучшее представление об активности запросов.

В версии 8.4 стало проще анализировать данные с помощью развитых средств стандарта ISO/ANSI SQL2003: «оконных» функций (windowing functions), общих табличных выражений (common table expressions) и рекурсивных запросов с операциями соединения. С выходом новой версии также улучшается общая производительность приложений.

Подписывайтесь на каналы «SecurityLab» в Telegram и Яндекс.Дзен, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.

nppstels.ru

СУБД PostgreSQL 8.4.6.1

СУБД PostgreSQL 8.4.6.1

Василий » 27 янв 2011, 16:50

Внимание! Перед установкой новой версии базы данных сделайте резервные копии используемых баз данных: mgs (для ПЦН Мираж), gps (для НСМ Сибирь), energo (для АРМ Энергоучет)

Для установки необходимо запустить файл: postgresql-8.4.6.1-windows.exe
Выбрать папку директории и папку сохранения файлов базы данных.

Указать пароль для пользователя postgres (можно указать любой пароль для данного пользователя, например: root )

Оставить по умолчанию предлагаемый порт 5432 .

Выбрать локальное расположение

Нажать далее и дождаться полного завершения процесса установки.

Далее убрать галочку на запуск Stack Builder и нажать на кнопку Finish .

Далее запустить программу pgAdmin III и ввести пароль для подключения (в используемом примере, это пароль root )
Выбрать пункт в СУБД — Роли входа и создать Новое правило . Указать имя и пароль роли: root

А также указать Привилегии роли .

На этом установка базы данных завершена. Дальнейшие шаги по восстановлению копии базы данных представлены в Руководстве по эксплуатации ПЦН Мираж 4.6.

Re: СУБД PostgreSQL 8.4.6.1

Василий » 28 янв 2011, 13:32

Дополнения!
Восстанавливая базу данных необходимо учесть следующее.
Представляем на примере ПО ПЦН Мираж (база данных с названием mgs )
При работе с тестовой версией ПЦН Мираж 4.7rc2 кодировка отображения шрифтов создается автоматически.

При работе с коммерческой версией ПЦН Мираж 4.6 .
Необходимо создать Новую базу данных в программе pgAdmin III

Далее в поле Имя ввести mgs , выбрать Кодировку Win1251 , указать Шаблон template0 и нажать кнопку ОК

Затем восстановить резервную копию базы данных, используя команду Восстановить.

Проверкой правильности является корректное отображение названий объекта, полей описания в карточке объекта, полей описания в карточке устройства.

PostgreSQL 8.1 — новая версия открытой СУБД

Приводится обзор наиболее важных изменений в новой версии СУБД PostgreSQL 8.1.X и примерный список новых возможностей, находящихся в разработке.

Введение

Год назад, на 10-й юбилейной конференции [CD05], один из авторов анонсировал [B05] некоторые новинки, ожидаемые в 8.1, которые вызвали интерес к этой версии.

Что ожидается в будущих версиях

Здесь мы приведем обзор наиболее важных изменений, полный список которых доступен на странице проекта [R81].

Что нового в PostgreSQL 8.1 ?

В результате,все участники либо фиксируют транзакцию, либо откатывают ее, независимо от сетевых проблем или краха какого либо узла.

В PostgreSQL 2PC реализован так, что транзакции сначала подготавливаются (PREPARE TRANSACTION) и спасаются на диск и в последствии они могут быть зафиксированы (COMMIT PREPARED) или отменены (ROLLBACK PREPARED) даже после перезагрузки системы. JDBC драйвер теперь имеет поддержку XA протокола согласно JTA


Использование ролей вместо пользователей и групп позволяет более гибко управлять доступом к объектам базы данных (database, table, function, language, schema, tablespace, role). При этом, пользователи и группы это просто роли, роли могут принадлежать другим ролям, роли могут быть владельцами объектов, роли могут наследоваться. Использование ролей описано в стандарте SQL.

Роли очень удобно использовать для назначения конфигурационных параметров по умолчанию, например, запретить использование индексов для роли myname:

Отметим, что пользователи и группы для совместимости также можно использовать, однако внутри они реализованы через роли.

Поддержка очень больших баз данных:

  • Использование промежуточных (in-memory) битовых карт (bitmap).
    • Это служебные индексы, которые строятся в памяти во время планирования запроса.
    • Не путать с bitmap индексами, которые создаются на диске и используются для работы с данными с малым количеством уникальных значений, например пол (муж./жен.)
    • Пользователь может отключать их использование (enable_bitmapscan)
    • Их основное использование — это оптимизация работы с несколькими индексами.

    В отличие от обычного сканирования индекса, в котором за один раз из индекса считывается только один указатель на запись, по которому потом поднимается сама запись из таблицы, bitmap scan считывает все указатели за один раз (Bitmap Index Scan), сортирует их в памяти и потом считывает записи уже в локализованном на диске порядке (Bitmap Heap Scan). Таким образом, увеличивается скорость чтения записей с диска, но ценою создания в памяти специальной структуры данных. Заметим, что производительность ORDER BY может пострадать, так как записи считываются не в том порядке, как они хранились в индексе.

    Если bitmap становится очень большим, то вместо записей хранятся ссылки на страницы, которые содержат записи, удовлетворяющие запросу. Поэтому, в таком случае, необходима дополнительная проверка (Recheck), чтобы получить только требуемые записи.

    Bitmap индексы очень эффективны для работы с несколькими индексами, так как сначала они комбинируются с учетом AND/OR операций (очень эффективным способом), и только потом результат используется для работы с таблицами. Отметим, что можно использовать многоколоночные индексы, однако проще использовать Bitmap индексы, так как они покрывают большее количество различных комбинаций.

    Однако, bitmapscan может быть полезен и для работы с одним индексом, так как доступ к данным происходит последовательно, а не в произвольном порядке. При этом, cчитается, что обычный indexscan эффективнее bitmapscan-а для малого количества считываемых записей, в то время как seqscan эффективнее bitmapscan-а если приходится считывать с диска значительную долю таблицы.

    Table partitioning — разбиение таблицы на более мелкие части, при сохранении логической целостности. Для этого используется механизм наследования таблиц (table inheritance) в PostgreSQL и новое улучшение в планировщике, называемое CONSTRAINT EXCLUSION (в postgresql.conf требуется разрешить его использование, см. constraint_exclusion параметр), который позволяет использовать только релевантные части одной большой таблицы. При этом очень сильно ускоряются некоторые запросы, обновление данных облегчается и можно размещать малоиспользуемые данные на других носителях.

    Покажем как это работает на простом примере. Создаем таблицы с указанием проверок на данные, при этом следим, чтобы интервалы значений не пересекались. Также, создаем индексы. Заполняем таблицы:

    По умолчанию CONSTRAINT EXCLUSION выключен и простой запрос будет сканировать все таблицы: Этот же запрос при constraint_exclusion=on в postgresql.conf затронет только одну таблицу, что и требовалось показать. Заметим, что планировщик выполнения запросов использует ограничения, заданные только в виде CHECК. Кроме того, не поддерживаются UPDATE и DELETE. Несмотря на эти и некоторые другие ограничения, которые будут сняты в будущем, table partitioning является полезным для организации очень больших архивов.

Производительность:

  • Улучшена производительность многопроцессорных серверов за счет повышения конкурентности доступа к разделяемой памяти и нового алгоритма управления буферами (clock-sweep).
  • Поддержка конкурентности и восстанавливаемости GiST [GiST, BS05]. Обобщенное поисковое дерево (Generalised Search Tree, GiST) в PostgreSQL является одним из первых в технологии баз данных реализаций механизма разработки новых пользовательских типов и запросов. Более подробно про GiST можно прочитать в цитированных статьях, здесь отметим, что существующая реализация GiST не поддерживала конкурентного доступа к индексам, что существенно влияло на производительность и его используемость в реальных рабочих приложениях. При этом, новые расширения, такие как intarray, ltree, tsearch2, PosGIS, приобрели большую популярность и авторами были доработаны и реализованы для версии 8.1 алгоритмы, используемые в GiST, с поддержкой конкурентного доступа к индексам и возможности восстановления после краха системы. Отметим, что все приложения, которые использовали GiST, автоматически приобрели эти новые свойства ! Этот пункт интересен также новым подходом к поддержке разработчиков свободного ПО, полная история описана на сайте newsforge.com [GISTCR].

Разное:

  • Расширенная поддержка функций — IN,OUT,INOUT параметры для pl/pgsql, расширенная диагностика и обработка ошибок. Теперь в определении функции можно задавать какие параметры ожидаются в качестве входных, а какие для вывода, что сильно облегчает написание функций, которые возвращают несколько колонок (раньше для этого надо было создавать фиктивный композитный тип). Кроме этого, облегчается портирование приложений с Оракле на PostgreSQL.
  • Интегрированный autovacuum связан с понятием многоверсионности, используемой в PostgreSQL, работающий в фоновом режиме и является альтернативой отдельному процессу, называемого VACUUM. Преимуществом интегрированного сборщика мусора является его полная синхронизация с работой базы данных и возможность автоматически определять какие таблицы следует обрабатывать (настройки в postgresql.conf). Часто задают вопрос о необходимости сборки мусора. Кратко можно ответить, что это необходимо для обеспечения высокой производительности параллельно исполняемых запросов. Более подробное разъяснение следует ниже.

    Для обеспечения конкурентного доступа к данным в PostgreSQL используется версионная модель, при которой каждая транзакция видит свою версию данных. Транзакция идентифицируется числом xid (32-битное число без знака), которое монотонно возрастает, т.е., более поздняя транзакция имеет больший xid. Каждая запись (tuple) имеет два идентификатора транзакций: xminxid транзакции, добавившей запись, и xmaxxid транзакции, удалившей запись. При удалении записи, на самом деле физического удаления не происходит, а только устанавливается значение xmax. При обновлении записи, создается новая версия, а в старой версии ставится ссылка на новую и устанавливается значение xmax. Видимость записи определяется по xid текущей транзакции, xmin и xmax. Если поле xmin записи больше идентификатора текущей транзакции, значит запись находится для неё «в будущем» и невидима. Если же поле xmin записи меньше идентификатора транзакции, то эта версия находится для неё «в прошлом» — либо она удалена, либо есть более новая версия, к которой можно перейти по ссылке. Эти идентификаторы обычно не видны, но их можно получить явно указав в запросе. Откроем новую транзакцию и удалим одну запись, но не фиксируем транзакцию: Тогда в другой сессии удаленная запись будет видна и можно увидеть номер удалившей транзакции (xmax) : После фиксации транзакции удаленная запись уже не будет видна.

    Как только заканчивает свою работу последняя транзакция, чей идентификатор меньше значения xmax записи, эта версия записи автоматически становится «мусором» и занятое ей место должно быть освобождено для последующего использования, в противном случае размер таблицы будет расти бесконечно. Для удаления такого мусора используется команда VACUUM. Кроме этого, VACUUM следит, чтобы x идентификаторы, которые сравниваются между собой по модулю 2 31 (2 миллиарда). Это означает, что для любого «нормального» xid есть по 2 миллиарда «более старых» и «более новых» транзакций. Если какая-либо версия записи в базе данных выживет 2 миллиарда транзакций после своего рождения, она неожиданно окажется в «будущем» и будет незафиксированной. Чтобы разрешить записи жить более этого предела, xmin этой записи заменяется на FrozenXID, т.е. станет в «прошлом» для всех транзакций и будет видимой. Вот это и делает команда VACUUM — назначает специальный идентификатор FrozenXID всем записям, которые старше 1 миллиарда транзакций. Это означает, что хотя бы один раз в миллиард транзакций надо запускать VACUUM, при этом PostgreSQL, для избежания потери данных, предупреждает о необходимости команды VACUUM и откажется работать, если она не будет запущена.

    Что ожидается ?

    Заключение

    Версия 8.1 является новым шагом в сторону больших и нагруженных систем, предназначенных для непрерывной работы в режиме 24x7x365. Это подтверждается тем, что большие компании начинают использовать PostgreSQL в реальном бизнесе. Так, Sony Online Entertainment объявила [SOE05] об инвестировании 1.5 млн. USD в Enterprise DB для перехода с Oracle на PostgreSQL 8.1. В России крупнейший оператор сотовой связи компания Вымпелком (Beeline) тестирует ПО работающее с PostgreSQL и находится на стадии заключения контракта на поддержку кластера PostgreSQL. Компания Sun Microsystem объявила [SUN05] об официальной поддержке PostgreSQL (входит в Solaris 10), «beta» версия пакетов, оптимизированных для Solaris, уже доступна [SUN06]. Кроме этого, Sun поддерживает PostgreSQL в режиме 24×7.

    Традиционно, PostgreSQL широко используется в научных проектах. Так, нами был запущен проект SAI CAS (Catalog Access Service), в рамках международной программы Virtual Observatory (Виртуальная Обсерватория), как часть проекта Астронет, ориентированного на профессиональное астрономическое сообщество и где в качестве СУБД для работы с очень большими астрономическими каталогами (1Tb), используется PostgreSQL 8.1. Сервер БД HP rx1620 (Itanium2) был предоставлен HP Russia.

    Новая версия PostgreSQL — 8.3.0

    4 февраля 2008 года вышла новая версия свободной СУБД PostgreSQL — 8.3.0.

    * миграция модуля для полнотекстового поиска (contrib/tsearch2) в ядро системы;
    * реализация Heap Only Tuples (HOT);
    * теперь autovacuum включён по умолчанию;
    * возможен запуск сразу нескольких процессов autovacuum;
    * заметное уменьшение дискового пространства, занимаемого базами данных;
    * выполнение транзакций, не модифицирующих данные, не приводит к увеличению значения счётчика транзакций (xid);
    * реализован механизм автонастройки параметров процесса bgwriter;
    * оптимизирован механизм получения результата для запросов с использованием « …ORDER BY … LIMIT…» (т. н. Top-N sorting);
    * поддержка XML, в том числе новый тип данных — xml;
    * автоматическая инвалидация кэша плана запросов для PL/pgSQL-функций;
    * конструкции «CREATE FUNCTION … RETURNS TABLE» и «RETURN TABLE…» для создания функций, результатом которых является таблица;
    * поддержка операции обновления для курсоров;
    * стандартная (ISO/ANSI SQL) конструкция «ORDER BY … NULLS FIRST/LAST» для упрощения установки порядка следования NULL-значений (также помогает при миграции с других СУБД);
    * индексация NULL-значений в GiST-индексах.

    PostgreSQL для 1С

    Сергей Ярастов

    Вопросу, какая же СУБД — Postgresql или MS SQL для 1С является наиболее оптимальной, посвящено множество статей. В этой статье мы рассмотрим шаги оптимизации обоих. Каждая СУБД вендора имеет как собственные рекомендации по настройке, так и рекомендации фирмы 1С. Следует отметить, что в зависимости от оборудования, конфигурации серверов и количества пользователей, задающих разную нагрузку, детали процесса оптимизации СУБД под 1С и реализации рекомендаций могут меняться.

    Часть 1. 1С на PostgreSQL

    Часть 2. 1С на MS SQL Server

    Настройка PostgreSQL под 1С

    Опыт эксплуатации баз 1С на PostgreSQL показал, что наибольшей производительности и оптимальной работы 1С и PostgreSQL удалось добиться на linux, поэтому желательно использовать именно ее. Но вне зависимости от операционной системы, важно помнить, что настройки, указанные по умолчанию при установке PostgreSQL, предназначены только для запуска сервера СУБД. Ни о какой промышленной эксплуатации речи идти не может! Следующим шагом после запуска станет оптимизация PostgreSQL под 1С:

    • Для начала отключаем Energy Saving (в противном случае могут непредсказуемо вырасти задержки ответов из БД) и запрещаем своппинг разделяемой памяти.
    • Настраиваем основные параметры сервера СУБД (рекомендации по настройке описаны достаточно подробно, как на официальном сайте вендора, так и компанией 1С, поэтому остановимся только на самых важных).
    • В типовых рекомендациях компании 1С предлагается отключать механизмы HyperThreading. Но тестирование Postgres-pro на серверах, с включенной SMT (simultaneous multi threading), показало другие результаты.

    Установка параметра shared_buffers в RAM/4 является рекомендацией по умолчанию, но пример Sql Server говорит о том, что чем больше памяти ему выделяется, тем лучше его производительность (при отключенном сбросе страниц в файл подкачки). То есть, чем больше страниц данных располагаются в оперативной памяти, тем меньше обращений к диску. Возникает вопрос: почему такой маленький кэш? Ответ прост: если shared_buffers большой, то часть неиспользуемых страниц свопируется на диск. Но как отследить момент, когда сброс прекратится, и показатель параметра будет оптимальным? Для достижения и выхода на оптимальный показатель shared_buffers, его значение необходимо поднимать на продуктиве ежедневно (по возможности) с определенным шагом прироста и смотреть, в какой момент начнется сброс страниц на диск (увеличится своп).

  • Помимо этого, на «большой параметр» негативно влияет работа с множеством мелких страниц, которые по умолчанию имеют размер 8Кб. Работа с ними увеличивает накладные расходы. Что можно с этим сделать для оптимизации под 1С? В версии postgreSQL 9.4 появился параметр huge_pages, который можно включить, но только в Linux. По умолчанию включаются огромные страницы с размером по умолчанию 2048 kB. Дополнительно поддержку данных страниц необходимо включить в ОС. Таким образом, оптимизировав структуру хранения, можно выйти на больший показатель shared_buffers.
  • work_mem = RAM/32..64 или 32MB..128MB Задает объем памяти для каждой сессии, который будет использоваться для внутренних операций сортировки, объединения и пр., прежде чем будут задействованы временные файлы. При превышении этого объема, сервер будет использовать временные файлы на диске, что может существенно снизить скорость обработки запросов. Данный параметр используется при выполнении операторов: ORDER BY, DISTINCT, соединения слиянием и пр.
  • Посчитать дополнительно данный параметр можно следующим образом: (Общая память shared_buffers – память на другие программы) / число активных соединений. Это значение можно уменьшать, следя за количеством создаваемых временных файлов. Такую статистику по размеру и количеству временных файлов можно получить из системного представления pg_stat_database.
  • effective_cache_size = RAM — shared_buffers основная задача этого параметра подсказать оптимизатору запроса, какой способ получения данных выбрать: полный просмотр или сканирование по индексу. Чем выше значение параметра, тем больше вероятность использования сканирования по индексу. При этом сервер не учитывает, что данные при выполнении запроса могут оставаться в памяти, и следующему запросу не надо их поднимать с диска.

    Установка PostgreSQL

    Установка 1С на PostgreSQL под Windows – достаточно простой процесс. При запуске установочного пакета необходимо указать кодировку UTF-8. По сути, это единственный интересный нюанс и еще какая-то настройка PostgreSQL для 1С 8.3 из-под Windows не потребуется. Установка и настройка PostgreSQL для 1С на ОС linux может вызвать ряд затруднений. Для их преодоления в качестве примера рассмотрим запуск работы (используя дистрибутивы ведущего российского вендора PostgreSQL-Pro и компании 1С) PostgreSQL на сервере Ubuntu 16.04 х64

    Установка дистрибутивов 1С для СУБД PostgreSQL

    1.Скачиваем указанную позицию дистрибутива СУБД PostgreSQL:

    2.Выкладываем PostgreSQL на сервер;

    3.Распаковать установщик СУБД PostgreSQL можно командой:

    4.Перед установкой дистрибутива СУБД PostgreSQL проверим наличие в системе необходимой локали (по умолчанию ru_RU.UTF-8):

    5.Если система, с которой будет работать PostgreSQL, ставилась с языком отличным от русского, необходимо создать новые локали:

    6.Если необходимая локаль все же имеется, устанавливаем ее по умолчанию:

    7.После перезагрузки, установим необходимые пакеты для нашей версии PostgreSQL:

    8.Версия PostgreSQL пакета 9.4.2-1.1C связана с пакетом libicu версии libicu48. В репозитории нужной версии уже нет, ее можно скачать;

    9.Скачиваем и помещаем в каталог, где хранятся скачанные файлы для PostgreSQL;

    10.Перейдя в каталог с файлами PostgreSQL, производим установку, последовательно набирая следующие команды:

    11.Готово. Дистрибутив СУБД PostgreSQL установлен.

    Установка дистрибутивов PostgreSQL-Pro

    Для установки сервера необходимо выполнить подряд следующие команды:

    Для доступа к серверу редактируем параметры в файле pg_hba.conf

    Сам файл имеет следующую структуру:

    Файл хорошо документирован, но на английском языке. Кратко рассмотрим основные параметры:

    TYPE

    • Local локальное подключение только через unix
    • Host подключение по TCP/IP
    • Hostssl шифрованное SSL-подключение по TCP/IP (сервер должен быть собран с поддержкой SSL, также требуется установить параметр ssl)
    • Hostnossl нешифрованное подключение по TCP/IP

    METHOD

    • trust допустить без аутентификации
    • reject отказать без аутентификации
    • password запрос пароля открытым текстом
    • md5 запрос пароля в виде MD5
    • ldap проверка имени и пароля с помощью сервера LDAP
    • radius проверка имени и пароля с помощью сервера RADIUS
    • pam проверка имени и пароля с помощью службы подключаемых модулей

    Более подробную и развернутую информацию можно посмотреть в документации к продукту PostgreSQL.

    Далее необходимо запустить сервер:

    После окончания основной установки, необходимо настроить конфигурационный файл сервера postgresql.conf, согласно специфики работы PostgreSQL, сервера 1С и конфигурации сервера Ubuntu.

    Оптимизация 1С под MS SQL Server

    Устанавливаем последние обновления для SQL Sever.

    Операционная система резервирует место и забивает его нулями, что занимает достаточно много времени при следующих событиях:

    • Создание базы данных;
    • Добавление файлов данных, журнал транзакций, к существующей базе данных;
    • Увеличение размера существующего файла (в том числе Autogrow-операций);
    • Восстанавливаем базы данных или группы файлов.

    Решается данная проблема добавлением роли (под которой запущен сервер) к пункту локальной политики безопасности «Выполнение задач по обслуживанию томов».

    При возможности необходимо разнести базу TempDB (особенно интенсивно она используется в режиме управляемых блокировок RCSI) и журнал транзакций на разные диски.

    На сервере, где работает SQL сервер, режим энергосбережения должен быть установлен в «Высокая производительность».

    По рекомендации Microsoft, разнести кластерные и некластерные индексы на разные диски, предварительно разместив некластерные индексы в отдельной файловой группе.

    В папке с файлами БД не должно быть сжатия.

    На вкладке «Память» для сервера устанавливаем минимальную планку в размере 50% от общего объема памяти. Максимальную рассчитываем по одной из формул:

    • Максимальная память = Общий объем – размер по ОС – размер под 1С (Если он есть, предварительно замерив счетчиками используемую память) или
    • Максимальная память = Общий объем – (1024* Общий объем/16384).

    Ограничиваем параметр DOP «Max degree of parallelism» и ставим его в значение «1».

    Актуализируем статистику по расписанию. Начиная с SQL Server 2008, обновление статистики вызывает перекомпиляцию запросов и, соответственно, очищает процедурный кэш, поэтому отдельную процедуру по очистке процедурного кэша выполнять не надо.

    Периодически проводим реиндексацию таблицы и дефрагментацию индексов.

    Устанавливаем правильную политику резервирования. Если вам не надо восстанавливаться на последний момент времени к краху системы, а последние минут 5 или больше для вашего бизнеса не критичны, то установите модель восстановления в «Простая». Этим вы ускорите в разы скорость при записи. Главное, чтобы дифференцированный бекап успевал выполняться за указанное время.

    Добиваемся улучшения при работе с TempDB при вводе/выводе посредством создания дополнительных файлов данных. Если логических процессоров меньше 8, рекомендуется создать файл данных для каждого логического процессора. Если логических процессоров больше 8, рекомендуется создать 8 файлов данных и, увеличивая на один при кратности 4, обязательно оценить нагрузку на TempDB.

    PostgreSQL 8.1 — новая версия открытой СУБД

    Так, PostgreSQL позволяет эффективно работать с таблицами баз данных посредством Java, NET., C++, PHP, Perl, Ruby и других.

    Нельзя не отметить того, что СУБД PostgreSQL можно бесплатно скачать для ОС Windows и Linux / Unix. Этим, в частности, обусловлена её высокая популярность среди администраторов баз данных и опытных программистов.

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

    Скачать PostgreSQL для Windows

    СКРИНШОТ:

    ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ:

    Разработчик: The PostgreSQL Global Development Group
    Версия программы: 10.1
    Скачиваний: 5 610
    Дата обновления: 29-01-2020
    Операционка: Windows Vista, XP, 2003, 7, 8, 8.1, 10
    Русский язык: есть
    Тип лицензии: Freeware (бесплатная)
    Размер файла: 153,29 Мб

    Автор материала: Антон Петров

    Компьютерный эксперт. Специализируется на разработке и тестировании программного обеспечения. Размещает обзоры программ на сайте с 2015 года.

    Добавить комментарий
    Оценка: