виртуализация субд. обзор решений и перспектив. илья космодемьянский. зал 2
Что нового и полезного в PostgreSQL 9.5 / Илья...
-
Upload
ontico -
Category
Engineering
-
view
1.839 -
download
6
Transcript of Что нового и полезного в PostgreSQL 9.5 / Илья...
Что нового и полезного в PostgreSQL 9.5Highload 2015
Илья Космодемьянский[email protected]
Outline
• Как устроены новые релизы PostgreSQL
I Когда нам обновляться?I Когда фичей X можно будет пользоваться?
• Очень важные новинки версии 9.5• Хорошие и полезные улучшения• Задел на будущее• Бонусы
Outline
• Как устроены новые релизы PostgreSQLI Когда нам обновляться?I Когда фичей X можно будет пользоваться?
• Очень важные новинки версии 9.5• Хорошие и полезные улучшения• Задел на будущее• Бонусы
Outline
• Как устроены новые релизы PostgreSQLI Когда нам обновляться?I Когда фичей X можно будет пользоваться?
• Очень важные новинки версии 9.5• Хорошие и полезные улучшения• Задел на будущее• Бонусы
Как устроены релизы в PostgreSQL
• http://www.postgresql.org/support/versioning/• Релизы это 9.2.*, 9.3.*, 9.4.*, 9.5.*• Их стараются выпускать раз в год• Минорные релизы выпускают чаще, по мере накопленияполезных исправлений в мажорные релизы
• Жизненный цикл релиза – 5 лет, после этого сообщество”снимает релиз с поддержки” – в него больше не вносятсяисправления
Как устроены релизы в PostgreSQL
• http://www.postgresql.org/support/versioning/• Релизы это 9.2.*, 9.3.*, 9.4.*, 9.5.*• Их стараются выпускать раз в год• Минорные релизы выпускают чаще, по мере накопленияполезных исправлений в мажорные релизы
• Жизненный цикл релиза – 5 лет, после этого сообщество”снимает релиз с поддержки” – в него больше не вносятсяисправления
• Держать в production снятые с поддержки релизы –смелость, граничащая с безрассудством
Версия 9.5
• 10 июня 2014 - branch 9.4• Июнь 2014 - Первый Commit Fest для релиза 9.5 (CF1)• Август 2014 - CF2• Октябрь 2014 - CF3• Декабрь 2014 - CF4• Февраль 2015 - CF5• Август 2015 - Alpha2• Октябрь 2015 - Beta1
Версия 9.5
• > 2000 файлов измененено• > 200 000 строк кода добавлено...• ...и примерно столько же удалено• Имеют-ли смысл эти цифры? Имеют, если сравнивать спредыдущим релизом
Наиболее обсуждаемые фичи PostgreSQL 9.5
• Row level security (RLS)• SELECT ... FOR UPDATE SKIP LOCKED• Upsert: INSERT ... ON CONFLICT
Row level security
tt=# ALTER TABLE departments ENABLE ROW LEVEL SECURITY;ALTER TABLEpostgres=# create policy kgb on departments for all to publicUSING (owner = CURRENT_USER) ;CREATE POLICYtt=# select * from departments;id | name | chief | owner
----+-----------------+--------------+---------1 | первый | майор Пронин | mpronin3 | Духовного роста | Иван Иванов | ivanov2 | АХЧ | Вася Пупкен | pupken
(3 rows)tt=# \c - ivanovYou are now connected to database "postgres" as user "ivanov".postgres=> select * from departments;id | name | chief | owner
----+-----------------+-------------+--------3 | Духовного роста | Иван Иванов | ivanov
(1 row)
SELECT ... FOR UPDATE SKIP LOCKED
tt=# SELECT * FROM test FOR UPDATE NOWAIT;ERROR: could not obtain lock on row in relation "test"
tt=# SELECT * FROM test FOR UPDATE SKIP LOCKED;id | name---+--------1 | test
-- Просто пропускаем те строки, на которые не можем взять блокировку.-- Очень полезно для всяких простых очередей
Upsert problem: INSERT ... ON CONFLICT
postgres=> insert into tt(name) values (’bar’);INSERT 0 1postgres=> select * from tt;id | name
----+------1 | foo2 | bar
(2 rows)
postgres=> insert into tt(id, name) values (2,’buzz’);ERROR: duplicate key value violates unique constraint "tt_pk"DETAIL: Key (id)=(2) already exists.
Upsert: INSERT ... ON CONFLICT
postgres=> insert into tt(id, name) values (2,’buzz’)on conflict do nothing;INSERT 0 0postgres=> insert into tt(id, name) values (2,’buzz’)on conflict(id) do update set name=excluded.name || ’ edited’;INSERT 0 1postgres=> select * from tt;id | name
----+-------------1 | foo2 | buzz edited
(2 rows)
Чуть менее маркетинговые, но очень важные фичи
• Новые настройки WAL• recovery_target_action• BRIN индексы• Улучшения производительности• Расширены OLAP-возможности
Новые настройки WAL
• БылоI checkpoint_segments
• СталоI min_wal_size и max_wal_sizeI Логичней и экономит место
recovery_target_action
• pause• promote• shutdown
BRIN индексы
• min/max• Сильно меньше B-tree• Предназначены для больших таблиц• Медленней читать чем B-tree
Когда обновляться?
• Ждем релиза в декабре• В марте-апреле оцениваем количество и критичность багов• Летом обновляемся• (Это не руководство к действию!)