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

What's hot (20)

Go в автобусе
Go в автобусеGo в автобусе
Go в автобусе
Artem Kovardin
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Yandex
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Yandex
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
Stanislav Gumeniuk
 
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest
 
Корневая директория WordPress
Корневая директория WordPressКорневая директория WordPress
Корневая директория WordPress
versusbassz
 
Разработка CLI с помощью python-cliff
Разработка CLI с помощью python-cliffРазработка CLI с помощью python-cliff
Разработка CLI с помощью python-cliff
Mikhail Kalinin
 
Виктор Сергиенко «Асинхронный IO-boundPython: миф или реальность?»
Виктор Сергиенко «Асинхронный IO-boundPython: миф или реальность?»Виктор Сергиенко «Асинхронный IO-boundPython: миф или реальность?»
Виктор Сергиенко «Асинхронный IO-boundPython: миф или реальность?»
DataArt
 
Сергей Пузанков — Новый Поиск по блогам на bem-node
Сергей Пузанков — Новый Поиск по блогам на bem-nodeСергей Пузанков — Новый Поиск по блогам на bem-node
Сергей Пузанков — Новый Поиск по блогам на bem-node
Yandex
 
Secr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.jsSecr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.js
Kirill Danilov
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
MoscowJS
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
Provectus
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
Nikita Baksalyar
 
Операционная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционированиеОперационная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционирование
yaevents
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty
 
Go в автобусе
Go в автобусеGo в автобусе
Go в автобусе
Artem Kovardin
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Yandex
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Yandex
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
Stanislav Gumeniuk
 
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest
 
Корневая директория WordPress
Корневая директория WordPressКорневая директория WordPress
Корневая директория WordPress
versusbassz
 
Разработка CLI с помощью python-cliff
Разработка CLI с помощью python-cliffРазработка CLI с помощью python-cliff
Разработка CLI с помощью python-cliff
Mikhail Kalinin
 
Виктор Сергиенко «Асинхронный IO-boundPython: миф или реальность?»
Виктор Сергиенко «Асинхронный IO-boundPython: миф или реальность?»Виктор Сергиенко «Асинхронный IO-boundPython: миф или реальность?»
Виктор Сергиенко «Асинхронный IO-boundPython: миф или реальность?»
DataArt
 
Сергей Пузанков — Новый Поиск по блогам на bem-node
Сергей Пузанков — Новый Поиск по блогам на bem-nodeСергей Пузанков — Новый Поиск по блогам на bem-node
Сергей Пузанков — Новый Поиск по блогам на bem-node
Yandex
 
Secr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.jsSecr15 разработка кросс платформенных десктоп приложений nw.js
Secr15 разработка кросс платформенных десктоп приложений nw.js
Kirill Danilov
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
MoscowJS
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
Provectus
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
Nikita Baksalyar
 
Операционная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционированиеОперационная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционирование
yaevents
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty
 

Similar to pgconf 2017 Moscow. Make PostgreSQL from source (20)

Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
Ontico
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
Badoo Development
 
Телепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskТелепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup Minsk
MODX Беларусь
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
CodeFest
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
it-people
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
Rais Charipov
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
Михаил Тюрин
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
Ivan Grishaev
 
Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...
Mikhail Kurnosov
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"
Yandex
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
Cisco Russia
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
Alex Chistyakov
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
Denis Latushkin
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
Anastasia Lubennikova
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
endeveit
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
ITCrowd Almaty
 
Scaling PostgreSQL
Scaling PostgreSQLScaling PostgreSQL
Scaling PostgreSQL
Дмитрий Васильев
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
Ontico
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
Badoo Development
 
Телепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskТелепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup Minsk
MODX Беларусь
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
CodeFest
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
it-people
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
Rais Charipov
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
Ivan Grishaev
 
Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...
Mikhail Kurnosov
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"
Yandex
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
Cisco Russia
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
Alex Chistyakov
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
Denis Latushkin
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
Anastasia Lubennikova
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
endeveit
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
ITCrowd Almaty
 

pgconf 2017 Moscow. Make PostgreSQL from source

  • 1. Сборка PostgreSQL из исходников для системных администраторов pgconf 2017 15-17 марта 2017 Дмитрий Кремер Администратор баз данных E-mail: [email protected] [email protected] #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