Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Сборка PostgreSQL из исходников для
системных администраторов
pgconf 2017
15-17 марта 2017
Дмитрий Кремер
Администратор баз данных
E-mail: d.kremer@rian.ru
dmitry.kremer@gmail.com
#PostgreSQLRussia
МИА «Россия сегодня»
● Ведущее международное новостное агентство с 1941 года (тогда СовИнформБюро)
● Крупнейший поставщик новостного и медиа-контента в Российской Федерации (бренды РИА Новости и
Sputnik News)
● Фотохостинг Олимпиады в Сочи 2014
● Десятки корреспондентов по всей России
● Современные мультимедиа-прессцентры в Москве и Симферополе
● Платформы в социальных сетях
● Производство и распространение фотоконтента,инфографики,контента для мобильных приложений.
Дмитрий Кремер
● Опыт работы с различными базами данных в качестве разработчика и системного администратора с 1999 года.
● Непрерывный опыт работы с БД Oracle c 2007 года
● Oracle Certified Professional 9i,10g
● Начал работать с PostgreSQL в мае 2015 года.
Зачем собирать PostgreSQL из исходников в 2017?
● Разделение обязанностей администратора ОС и БД
● Независимость от обновлений пакетной базы конкретного дистрибутива
● Возможность тонкой настройки ПО PostgreSQL
● Не для всех минорных версий досупны пакеты
● Сборка с флагами отладки для тестового окружения/среды разработки
Зависимости
Удаляем пакеты,если они установлены,чтобы избежать накладок
$ rpm -qa | grep -i postgresql
$ yum -y remove postgresql-libs postgresql postgresql-odbc
Устанавлием пакеты
$ yum install -y readline-devel libxml2-devel libxslt-devel
Набор пакетов зависит от опций сборки,указывающих,какие компоненты вы подключаете.
readline-devel нужен,если конечно вы не хотите,чтобы psql превратился в тыкву sqlplus.
libxml2-devel и libxslt-devel понадобится для сборки документации,ну и собственно,
поддержки xml в PostgreSQL,если будут указаны соответствующие флаги сборки
Выбор опций сборки
Флаги сборки:
$ ./configure —help
https://www.postgresql.org/docs/current/static/install-procedure.html
Рекомендуется установить:
Так же можно включить поддержку языков для хранимых процедур:
--with-perl,--with-python,--with-tcl
--with-openssl
--with-ldap
--with-pam
--prefix=/opt/$pg_name
--with-systemd
--with_libxml
--with_libxslt
Флаги для добавления отладочной информации
● --enable-debug build with debugging symbols (-g)
● --enable-profiling build with profiling enabled
● --enable-coverage build with coverage testing instrumentation
● --enable-dtrace build with DTrace support
● --enable-tap-tests enable TAP tests (requires Perl and IPC::Run)
● --enable-cassert enable assertion checks (for debugging)
Дополнительные флаги для оптимизации:
CFLAGS="-O3 -march=native -flto -g"./configure ...&& make ...&& …
-flto —link time optimization
Сборка и установка
Установка флагов:
$ ./configure --prefix=/opt/$pg_name --with-systemd with_libxml=yes with_libxslt=yes
Сборка.Параметр world соберет сразу бинарники,документацию (mans) и расширения.
$ make world -j6
Прогон тестов:
$ make check
$ make check-world
Установка в папку
$ make install-world || sudo make install-world
Cоздание системного окружения
Посмотреть,каким компилятором собран PostgreSQL
$ pg_config --cflag
-Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute
-Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -march=x86-64 -mtune=generic -O2 -pipe -fstack-
protector-strong
Посмотреть с какими флагами произведена сборка
$ pg_config --configure
'--prefix=/usr''--mandir=/usr/share/man''--datadir=/usr/share/postgresql''--sysconfdir=/etc''--with-gssapi''--with-libxml''--with-
openssl''--with-perl''--with-python''PYTHON=/usr/bin/python2''--with-tcl''--with-pam''--with-system-
tzdata=/usr/share/zoneinfo''--with-uuid=e2fs''--enable-nls''--enable-thread-safety''CFLAGS=-march=x86-64 -mtune=generic
-O2 -pipe -fstack-protector-strong''LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro''CPPFLAGS=-D_FORTIFY_SOURCE=2'
Cоздание системного окружения -2
Настройка shell
cat > /etc/profile.d/postgresql.sh <<EOF
export PATH=$PATH:/opt/postgresql/bin
export MANPATH=$MANPATH:/opt/postgresql/share/man
EOF
Определяем переменные (init-скррипт,.bashrc,.bash_profile)
PGDATA="/data/pgsql/9.4"
PGUSER=postgres
PGLOG="/data/log/pgsql/pgstartup.log"
crontab
* * * * * /usr/bin/pgrep -f 'postgres: autovacuum'| xargs --no-run-if-empty -I $ renice -n 20 -p $ >/dev/null 2>/dev/null
* * * * * /usr/bin/pgrep -f 'postgres: autovacuum'| xargs --no-run-if-empty -I $ ionice -c 3 -t -p $
Базовые настройки Linux для работы PostgreSQL
sysctl.conf
# Controls the maximum shared segment size,in bytes
kernel.shmmax = 17179869184
# Controls the maximum number of shared memory segments,in pages
kernel.shmall = 4194304
# keepalive settings
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 20
# sem
kernel.sem = 2500 32000 32 6000
#Huge Pages
vm.nr_hugepages=9201
vm.hugetlb_shm_group=498
vm.swappiness=0
#Linux kernel parameter for PostgreSQL
net.core.somaxconn = 4096
kernel.sched_migration_cost = 5000000
Базовые настройки Linux для работы PostgreSQL -2
limits.conf
postgres soft nproc 2047
postgres hard nproc 16384
postgres soft nofile 8192
postgres hard nofile 65536
postgres soft memlock unlimited
postgres hard memlock unlimited
Дополнительное ПО,облегчающее жизнь
администратора PostgreSQL
● tmux -IMHO best console terminal multiplexer
● pgbouncer -Lightweight connection pooler for PostgreSQL
● pgcenter —pgbouncer management concole
● pgBadger —log analyzer & report builder
Полезные ссылки
● https://www.postgresql.org/ftp/source/-исходный код для сборки
● https://github.com/djester/pg_install_repo-мой репозиторий со скриптами сборки
● http://eax.me/postgresql-build/
● https://www.postgresql.org/docs/current/static/install-procedure.html-флаги сборки
● https://www.postgresql.org/docs/current/static/server-start.html -запуск с systemd
Вопросы ?
dmitry.kremer@gmail.com
d.kremer@rian.ru

More Related Content

pgconf 2017 Moscow. Make PostgreSQL from source

  • 1. Сборка PostgreSQL из исходников для системных администраторов pgconf 2017 15-17 марта 2017 Дмитрий Кремер Администратор баз данных E-mail: d.kremer@rian.ru dmitry.kremer@gmail.com #PostgreSQLRussia
  • 2. МИА «Россия сегодня» ● Ведущее международное новостное агентство с 1941 года (тогда СовИнформБюро) ● Крупнейший поставщик новостного и медиа-контента в Российской Федерации (бренды РИА Новости и Sputnik News) ● Фотохостинг Олимпиады в Сочи 2014 ● Десятки корреспондентов по всей России ● Современные мультимедиа-прессцентры в Москве и Симферополе ● Платформы в социальных сетях ● Производство и распространение фотоконтента,инфографики,контента для мобильных приложений. Дмитрий Кремер ● Опыт работы с различными базами данных в качестве разработчика и системного администратора с 1999 года. ● Непрерывный опыт работы с БД Oracle c 2007 года ● Oracle Certified Professional 9i,10g ● Начал работать с PostgreSQL в мае 2015 года.
  • 3. Зачем собирать PostgreSQL из исходников в 2017? ● Разделение обязанностей администратора ОС и БД ● Независимость от обновлений пакетной базы конкретного дистрибутива ● Возможность тонкой настройки ПО PostgreSQL ● Не для всех минорных версий досупны пакеты ● Сборка с флагами отладки для тестового окружения/среды разработки
  • 4. Зависимости Удаляем пакеты,если они установлены,чтобы избежать накладок $ rpm -qa | grep -i postgresql $ yum -y remove postgresql-libs postgresql postgresql-odbc Устанавлием пакеты $ yum install -y readline-devel libxml2-devel libxslt-devel Набор пакетов зависит от опций сборки,указывающих,какие компоненты вы подключаете. readline-devel нужен,если конечно вы не хотите,чтобы psql превратился в тыкву sqlplus. libxml2-devel и libxslt-devel понадобится для сборки документации,ну и собственно, поддержки xml в PostgreSQL,если будут указаны соответствующие флаги сборки
  • 5. Выбор опций сборки Флаги сборки: $ ./configure —help https://www.postgresql.org/docs/current/static/install-procedure.html Рекомендуется установить: Так же можно включить поддержку языков для хранимых процедур: --with-perl,--with-python,--with-tcl --with-openssl --with-ldap --with-pam --prefix=/opt/$pg_name --with-systemd --with_libxml --with_libxslt
  • 6. Флаги для добавления отладочной информации ● --enable-debug build with debugging symbols (-g) ● --enable-profiling build with profiling enabled ● --enable-coverage build with coverage testing instrumentation ● --enable-dtrace build with DTrace support ● --enable-tap-tests enable TAP tests (requires Perl and IPC::Run) ● --enable-cassert enable assertion checks (for debugging) Дополнительные флаги для оптимизации: CFLAGS="-O3 -march=native -flto -g"./configure ...&& make ...&& … -flto —link time optimization
  • 7. Сборка и установка Установка флагов: $ ./configure --prefix=/opt/$pg_name --with-systemd with_libxml=yes with_libxslt=yes Сборка.Параметр world соберет сразу бинарники,документацию (mans) и расширения. $ make world -j6 Прогон тестов: $ make check $ make check-world Установка в папку $ make install-world || sudo make install-world
  • 8. Cоздание системного окружения Посмотреть,каким компилятором собран PostgreSQL $ pg_config --cflag -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -march=x86-64 -mtune=generic -O2 -pipe -fstack- protector-strong Посмотреть с какими флагами произведена сборка $ pg_config --configure '--prefix=/usr''--mandir=/usr/share/man''--datadir=/usr/share/postgresql''--sysconfdir=/etc''--with-gssapi''--with-libxml''--with- openssl''--with-perl''--with-python''PYTHON=/usr/bin/python2''--with-tcl''--with-pam''--with-system- tzdata=/usr/share/zoneinfo''--with-uuid=e2fs''--enable-nls''--enable-thread-safety''CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong''LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro''CPPFLAGS=-D_FORTIFY_SOURCE=2'
  • 9. Cоздание системного окружения -2 Настройка shell cat > /etc/profile.d/postgresql.sh <<EOF export PATH=$PATH:/opt/postgresql/bin export MANPATH=$MANPATH:/opt/postgresql/share/man EOF Определяем переменные (init-скррипт,.bashrc,.bash_profile) PGDATA="/data/pgsql/9.4" PGUSER=postgres PGLOG="/data/log/pgsql/pgstartup.log" crontab * * * * * /usr/bin/pgrep -f 'postgres: autovacuum'| xargs --no-run-if-empty -I $ renice -n 20 -p $ >/dev/null 2>/dev/null * * * * * /usr/bin/pgrep -f 'postgres: autovacuum'| xargs --no-run-if-empty -I $ ionice -c 3 -t -p $
  • 10. Базовые настройки Linux для работы PostgreSQL sysctl.conf # Controls the maximum shared segment size,in bytes kernel.shmmax = 17179869184 # Controls the maximum number of shared memory segments,in pages kernel.shmall = 4194304 # keepalive settings net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 60 net.ipv4.tcp_keepalive_probes = 20 # sem kernel.sem = 2500 32000 32 6000 #Huge Pages vm.nr_hugepages=9201 vm.hugetlb_shm_group=498 vm.swappiness=0 #Linux kernel parameter for PostgreSQL net.core.somaxconn = 4096 kernel.sched_migration_cost = 5000000
  • 11. Базовые настройки Linux для работы PostgreSQL -2 limits.conf postgres soft nproc 2047 postgres hard nproc 16384 postgres soft nofile 8192 postgres hard nofile 65536 postgres soft memlock unlimited postgres hard memlock unlimited
  • 12. Дополнительное ПО,облегчающее жизнь администратора PostgreSQL ● tmux -IMHO best console terminal multiplexer ● pgbouncer -Lightweight connection pooler for PostgreSQL ● pgcenter —pgbouncer management concole ● pgBadger —log analyzer & report builder
  • 13. Полезные ссылки ● https://www.postgresql.org/ftp/source/-исходный код для сборки ● https://github.com/djester/pg_install_repo-мой репозиторий со скриптами сборки ● http://eax.me/postgresql-build/ ● https://www.postgresql.org/docs/current/static/install-procedure.html-флаги сборки ● https://www.postgresql.org/docs/current/static/server-start.html -запуск с systemd