Первый релиз-кандидат версии 9.6 вышел 1 сентября, а это значит, что совсем скоро будет полноценный релиз. Все вокруг уже успели обсудить новинки, и теперь уже стыдно ничего не знать о таких вещах, как параллелизация выполнения запросов, pushdown для FDW, мониторинг waitlocks, полнотекстовый поиск по фразам или магический \gexec в psql. Чтобы никому не приходилось краснеть, мы быстро пройдёмся по всем основным и интересным моментам версии 9.6.
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
1. Русскоязычное сообщество пользователей PostgreSQL #RuPostgres
http://RuPostgres.org
Вступительное слово.
Что же нового в PostgreSQL 9.6?
Николай Самохвалов
email: ru@postgresql.org, twitter: @postgresmen
04.10.2016, Москва, офис компании «Яндекс»
2. Русскоязычное сообщество
PostgreSQL
● Митап-группа RuPostgres.org
○ митапы в Москве и СПб
○ онлайн-митапы
○ много видео: http://bit.do/rupostgres-video
● Конференции:
○ Highload.ru (с секцией PostgreSQL!) — 7-8 ноября 2016,
Москва
○ PgConf.ru — 15-17 марта 2017, Москва
○ PgDay.ru — лето 2017, Санкт-Петербург
● Общение (telegram, slack, gitter): Postgres.chat
3. PostgreSQL 9.6
★ Вышел 29.09.2016
★ 220 изменений в Changelog
https://www.postgresql.org/docs/9.6/static/release-9-6.html
★ Рассказать обо всём в одном выступлении невозможно.
Нет «идеального» обзора новинок.
★ Ещё больше настроек и инструментов. Ещё сложнее стать гуру.
4. Источники информации
★ “Waiting for 9.6” by Hubert "depesz" Lubaczewski:
http://bit.do/9-6-depesz (серия заметок, разбор pgsql-patches@ с примерами)
★ Bruce Momjian:
http://bit.do/9-6-momjian-pdf (pdf, 14 стр.)
http://bit.do/9-6-momjian (видео, 50 мин)
★ PostgresPro:
http://bit.do/9-6-pgpro видео, 126 мин
★ Magnus Hagander:
http://bit.do/9-6-hagander-pdf (pdf, 48 стр.)
http://bit.do/9-6-hagander (видео, 51 мин)
5. Чем хорош и зачем обновляться?
1. Производительность:
- много полезных «доводок» (часть — не требуют усилий!)
- highload-улучшения (для крупных проектов)
2. Много новинок для DBA. Больше прозрачности и контроля
3. Много всего для DBD (особенно от PostgresPro)
7. Параллельные запросы
● Все обзоры начинаются с этого. Новинка-флагман!
● А по умолчанию-то не работает. И ускоряет не всегда (но часто!)
● А иногда — и замедляет (SELECT * FROM table;)
● Подходящий случай: SSD, мало клиентов, ускоряем
агрегирование
● Нужно внимательно анализировать свою ситуацию
● Есть ряд настроек:
test=# select array(select name from pg_settings
where name ~ 'parallel');
{force_parallel_mode, max_parallel_workers_per_gather,
min_parallel_relation_size,parallel_setup_cost,parallel_tuple_cost}
● При анализе удобно использовать EXPLAIN ANALYZE VERBOSE
8. Масштабирование на большое число ядер
● 1 миллион TPS
– теперь реальность
(возьмите больше ядер)
● Подробнее:
http://akorotkov.github.io/blog/2016/05/09/scalability-towards-millions-tps/
9. FDW pushdown
● Foreign Data Wrappers (FDW) – очень мощный
функционал. Они пришли, чтобы остаться
● Всё новое обычно сначала появляется в postgres_fdw
● UPDATE, DELETE, JOIN, ORDER BY, как правило, теперь
удалённо
(приходит результат, а не сырые данные)
● Будут ещё улучшения. В других FDW тоже
10. Есть ещё много улучшений
● Например: VACUUM для больших таблиц работает
оптимальнее
● Например: index-only scans для частичных индексов
● Например: избыточные шаги в GROUP BY игнорируются
● Например: копирование в файл таблицы из одного поля
timestamp теперь в 2 раза быстрее (хех)
● Например: когда несколько агрегатных функций в одном
запросе, иногда время выполнения ~ одной агрегатной
функции
…и так далее. Как правило, ничего делать не надо, применится само
13. «Честные» синхронные реплики
synchronous_commit = 'remote_apply'
● Теперь точно на слейве не будет задержки в данных.
(НО: мастер теперь должен ждать чуть дольше — на только WAL,
но и его «накатывание»!)
● Полезно, если нужны кристально честные чтения на реплике
14. Несколько синхронных реплик
● С помощью synchronous_standby_names можно гибко
управлять количеством и составом синхро-реплик
● До 9.6 можно было иметь только 1 синхро-реплику
● Может замедлить мастер
● Может совсем «остановить» мастер (при проблемах с репликами)
15. Много нового для мониторинга*
● Мониторинг ожиданий в pg_stat_activity
● Ход работы VACUUM (pg_stat_progress_vacuum)
● Представление pg_config
… и ряд других возможностей
____________________
* OKmeter, не отставай!
16. Новое в psql
● ev для редактирования представлений, sv — для вывода
определения
● crosstabview
● gexec
● Множественные -c и -f
… но как много людей это будут использовать?
(на самом деле много, #nogui)
18. Улучшения полнотекстового поиска
● Поиск по фразам
$ select phraseto_tsquery('ru', 'привет, как дела?');
phraseto_tsquery
-------------------------------------------
'привет <2> 'дело' | 'привет' <2> 'деть'
(1 row)
(есть некоторые накладные расходы)
● Функции для манипуляций с tsvector
● Лучше всего послушать выступления Ф. Сигаева
19. Это только верхушка айсберга
Много интересного у PostgresPro:
○ CREATE ACCESS METHOD
○ bloom index (есть в contrib)
○ RUM index (можно скачать)
○ Новое в SP-GiST
○ Поиск ближайших соседей для модуля cube
20. Следующая версия — 10.0
● Версии теперь будут ХХ.ХХ вместо Х.ХХ.ХХ
(semver.org — в прошлом)
● 2ndQuadrant уже подготовили ответ на случай с Uber
● Ещё больше параллелизма
● Ещё больше pushdown для FDW
● Партиционирование должно, наконец, улучшиться
● BDR
● pglogical