The document discusses release notes for PostgreSQL 8.4 and provides an overview of new features and improvements in this version, including:
1. Performance improvements such as visibility maps which optimize vacuum operations and reduce disk I/O.
2. Enhanced diagnostics including improved logging of query plans and added statistics collection.
3. Better support for high availability architectures through features like multi-master replication and improved restore capabilities.
1. PostgreSQL 8.4
Что в новой версии?
[специально для сисадминов и DBA]
Николай Самохвалов
nikolay@postgresmen.ru
Москва, 14 апреля 2009
2. PostgreSQL — это...
...самая развитая СУБД с открытым кодом
...надежность и устойчивость на любых нагрузках
...кроссплатформенность (FreeBSD, Linux, Solaris, Windows, OS X)
...высокий уровень соответствия ISO/ANSI SQL 92, 99, 2003
...интерфейсы для Tcl, Perl, C, C++, PHP, ODBC, JDBC, Embedded SQL in C,
Python, Ruby, ...
...развитые административные утилиты (pgAdmin3, phpPgAdmin)
Postgres — не только это Open Source продукт (BSD),
но и Open Source проект
3. Развитие Postgres 1997
...1995 – «прошлая жизнь» (Postgres без SQL)
1996...1998 – стабильность
1998...2001 – стандарт SQL
2007
2001...н. в. – выход на уровень Enterprise
производительность
простота администрирования
24/7
4 февраля 2008 – PostgreSQL 8.3
март, май, июль, сентябрь 2008 – CommitFest-ы для 8.4
ноябрь 2008 – FeatureFreeze для 8.4
2008
апрель 2009 – выпуск 8.4beta
май-июнь 2009 – PostgreSQL 8.4
2008
2008
4. На самом деле...
8.4beta1 уже можно (нужно) пробовать!
nikolay@nikolay:/test/pg84dev/bin$ ./psql postgres
psql (8.4beta1)
Type quot;helpquot; for help.
postgres=# select version();
version
--------------------------------------------------------------------------------------
PostgreSQL 8.4beta1 on i686-pc-linux-gnu, compiled by GCC gcc (Ubuntu) 4.3.2, 32-bit
(1 row)
Пробуем!
http://www.postgresql.org/docs/current/static/anoncvs.html
./configure; make; make install
git://git.postgresql.org/git/postgresql.git
5. Новое в Postgres 8.4
Производительность
Администрирование
Проекты-спутники
6. Погодите-ка... Спойлеры!
Буу... В 8.4 не будет:
сервер «горячего» резерва
(hot standby)
апгрейд без dump/restore
Еее! В 8.4 будет:
многопотоковый restore
карты видимости (Visibility Maps)
больше диагностики
логи планов запросов
встроенная стастистика по
функциям и запросам
и многое другое!
8. Карты видимости (Visibility Maps)
Heikki Linnakangas
Механизм карт свободного пространства
(Free Space Maps) полностью переписан
Оптимизация: механизм FSM дополнен
механизмом карт видимости (Visibility Maps)
Данные VM и FSM существуют «рядом» с таблицей:
nikolay@nikolay:/test/pg84dev/data/base/1$ ls -l 2618*
-rw------- 1 nikolay nikolay 73728 2009-04-13 18:42 2618
-rw------- 1 nikolay nikolay 24576 2009-04-13 18:42 2618_fsm
-rw------- 1 nikolay nikolay 8192 2009-04-13 18:42 2618_vm
Файлы вида 12345_vm — битовые карты (1 бит на 1 страницу «кучи»),
размещаются в стандартных 8KB-страницах
1 означает «все кортежи страницы видимы всем транзакциям»
Биты выставляются во время VACUUM
Биты очищаются во время INSERT/UPDATE/DELETE
9. Карты видимости: что это даёт?
Частичный VACUUM:
VACUUM пропускает страницы, имеющие бит 1 в VM;
индексы по-прежнему требуют полного обхода
Результат: экономия (CPU и i/o)
Это улучшение касается всех
10. Карты видимости: пример
Hubert Lubaczewski
Для таблицы 100 млн. строк:
4 действия, измеряем время VACUUM после действия
действие без VM c VM разница
-99.6%
1. нет обновлений 96.71s 0.38s
-60.4%
2. обновлены 10 млн строк 150.91s 59.81s
-17.4%
3. обновлены 50 млн строк 283.22s 234.06s
+20.3%
4. обновлены 90 млн строк 418.41s 503.25s
Значительный выигрыш в случаях,
когда обновляется часть данных таблицы
(как чаще всего и бывает)
11. Мультипотоковый pg_restore
pg_restore может выполняться в несколько процессов
максимальное кол-во потоков задаётся опцией -m
работает только для -Fc дампов («кастомный» формат)
Эксперимент (2 ядра, несколько испытаний): // Hubert
3 таблицы по 10 млн строк,
место на диске: 320 MB каждая
размер всего дампа: 63 MB
обычный pg_restore (1 поток): 2m 58.894ms
новый pg_restore
2 потока: 1m 14.054s
3 потока: 1m 9.972s
12. Производительность: ещё и ещё!
многоколоночные GIN-индексы
Oleg Bartunov &
btree_gin Teodor Sigaev
«префиксный» поиск с GIN
улучшены расчёты статистики для optimizer-а
улучшена статистика для полнотекстовых столбцов
новый метод: полусоединение executor-а (semi-join)
новый метод: антисоединение executor-а (anti-join)
улучшена производительность text_position()
улучшения bitmap scans
оптимизация расхода памяти при исполнении триггеров
hash-методы для DISTINCT / UNION / INTERSECT /
EXCEPTION
14. Ещё раз о FreeSpaceMap (FSM)
Heikki Linnakangas
в FSM хранится информация о свободном месте (нужна
для INSERT / UPDATE)
теперь FSM строится для каждой таблицы (файлы
вроде 12345_fsm)
новая реализация
бинарное дерево
1 байт на 1 страницу «кучи»
данные размещены в стандартных 8KB-страницах
структура данных автовосстанавливаемая
(устойчивость)
не требуется полная перестройка FSM при вакууме или
крахе системы
max_fsm_pages и max_fsm_relations больше нет!
15. Статистика выполнения функций
В postgresql.conf:
#track_functions = none # none, pl, all
Как это выглядит:
# select * from pg_stat_user_functions;
funcid | schemaname | funcname | calls | total_time | self_time
-------+------------+----------+-------+------------+-----------
18671 | public |x | 12 | 3425 | 3425
(1 row)
16. contrib/pg_stat_statements
В postgresql.conf:
shared_preload_libraries = 'pg_stat_statements' # (change requires restart)
custom_variable_classes = 'depesz,pg_stat_statements' # list of custom variable class names
pg_stat_statements.max = 100
pg_stat_statements.track = top
pg_stat_statements.save = on
Далее нужно (в psql):
# i work/share/postgresql/contrib/pg_stat_statements.sql
Что получаем:
# select * from pg_stat_statements;
userid | dbid | query | calls | total_time | rows
--------+-------+-----------------------------------+-------+------------+------
10 | 16389 | select * from pg_stat_statements; | 1 | 0.000131 |0
(1 row)
А как же pgFouine? Он по-прежнему нужен.
Для более глубокого анализа.
17. contrib/auto_explain
2 варианта использования:
в сессии: LOAD 'auto_explain';
postgresql.conf: shared_preload_libraries = ‘auto_explain’
Выставляем порог в 2 секунды (2 варианта)
в сессии: SET explain.log_min_duration TO 2000;
postgresql.conf: explain.log_min_duration = 2000
Результат — журнализация результатов ANALYZE
на момент выполнения запроса на «боевом» сервере!
19. Привилегии на столбцы
test=# grant select ( b ) on test to test;
GRANT
test=# create user sucker;
CREATE ROLE
test=# grant select ( id, a, c ) on test to sucker;
GRANT
test=# c - sucker
psql (8.4beta1)
You are now connected to database quot;testquot; as user quot;suckerquot;.
test=> select * from test;
ERROR: permission denied for relation test
test=> select id, a, c from test;
id | a | c
---+-------+--------------------------------------------
1 | a : 1 | 2009-04-13 21:49:09.947939+04
2 | a : 2 | 2009-04-13 21:49:09.947939+04
3 | a : 3 | 2009-04-13 21:49:09.947939+04
4 | a : 4 | 2009-04-13 21:49:09.947939+04
5 | a : 5 | 2009-04-13 21:49:09.947939+04
6 | a : 6 | 2009-04-13 21:49:09.947939+04
7 | a : 7 | 2009-04-13 21:49:09.947939+04
8 | a : 8 | 2009-04-13 21:49:09.947939+04
9 | a : 9 | 2009-04-13 21:49:09.947939+04
10 | a : 10| 2009-04-13 21:49:09.947939+04
(10 rows)
20. Администрирование: ещё и ещё!
перечисление всех запросов, участвующих в deadlock
собственные LC_COLLATE и LC_TYPE у каждой БД
улучшение работы с SSL-сертификатами
TRUNCATE TABLE RESTART INDENTITY
человекопонятный EXPLAIN VERBOSE
contrib/pgbench: ограничение не только по транзакциям,
но и по времени выполнения испытания
возможность добавлять столбцы к VIEW
более «умный» pg_dump –data-only (нет проблем с FK)
22. pgAdmin-III 1.10
графический конструктор запросов (GSoC-проект)
скриптовый движок в редакторе запросов (GSoC-проект)
улучшенная работа с:
объектами полнотекстового поиска
наследованием таблиц
полная поддержка Postgres 8.4
...и много других новинок и улучшений!
23. SkyTools в 2008 и 2009 годах
постоянное развитие
последнее обновление 27 марта 2009, SkyTools 2.1.9
широкое распространение PgQ (асинхронная модель!)
londiste вытесняет Slony
pl/proxy для крупных проектов
pgBouncer почти ВЕЗДЕ (как nginx)
Больше информации: http://PostgreSQLRussia.ORG/articles/
(в том числе слайды/видео визита Аско Оя и Марко Креэна в Москву)
24. Хороших проектов всё больше
Каталог на PostgreSQL.org:
http://www.postgresql.org/download/product-categories
Наш каталог:
http://wiki.PostgreSQLRussia.ORG/index.php/Проекты-спутники_PostgreSQL
pg_top: утилита мониторинга PostgreSQL в стиле top
check_postgres: скрипт проверки состояния PostgreSQL, готовый для
использования с Nagios
Playr: инструмент нагрузочного тестирования (myYearbook.com)
PostgreSQL Toolbox: коллекция утилит в помощь DBA и DBD
... и много других постоянно развивающихкся программ!
25. Источники и контакты
http://PostgreSQL.ORG
http://PostgreSQLRussia.ORG
форум,
wiki,
статьи,
новости,
социальная сеть (в процессе),
документация на русском (8.4devel, в процессе)
обзоры новинок
Hubert: http://www.depesz.com
перевод на русский: http://gray-hemp.blogspot.com
Николай Самохвалов: nikolay@postgresmen.ru
Спасибо!