Вы находитесь на странице: 1из 25

PostgreSQL 8.

4
Что в новой версии?
[специально для сисадминов и DBA]

Николай Самохвалов
nikolay@postgresmen.ru

Москва, 14 апреля 2009


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 проект
Развитие Postgres 1997

...1995 – «прошлая жизнь» (Postgres без SQL)


1996...1998 – стабильность
1998...2001 – стандарт SQL
2001...н. в. – выход на уровень Enterprise 2007
производительность
простота администрирования
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
На самом деле...

8.4beta1 уже можно (нужно) пробовать!


nikolay@nikolay:/test/pg84dev/bin$ ./psql postgres
psql (8.4beta1)
Type "help" 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
Новое в Postgres 8.4

Производительность

Администрирование

Проекты-спутники
Погодите-ка... Спойлеры!
Буу... В 8.4 не будет:
сервер «горячего» резерва
(hot standby)
апгрейд без dump/restore

Еее! В 8.4 будет:


многопотоковый restore
карты видимости (Visibility Maps)
больше диагностики
логи планов запросов
встроенная стастистика по
функциям и запросам
и многое другое!
1. Производительность
Карты видимости (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
Карты видимости: что это даёт?

Частичный VACUUM:
VACUUM пропускает страницы, имеющие бит 1 в VM;
индексы по-прежнему требуют полного обхода

Результат: экономия (CPU и i/o)

Это улучшение касается всех


Карты видимости: пример
Hubert Lubaczewski

Для таблицы 100 млн. строк:


4 действия, измеряем время VACUUM после действия
действие без VM c VM разница
1. нет обновлений 96.71s 0.38s -99.6%
2. обновлены 10 млн строк 150.91s 59.81s -60.4%
3. обновлены 50 млн строк 283.22s 234.06s -17.4%
4. обновлены 90 млн строк 418.41s 503.25s +20.3%

Значительный выигрыш в случаях,


когда обновляется часть данных таблицы
(как чаще всего и бывает)
Мультипотоковый 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
Производительность: ещё и ещё!

многоколоночные GIN-индексы
Oleg Bartunov &
btree_gin Teodor Sigaev
«префиксный» поиск с GIN
улучшены расчёты статистики для optimizer-а
улучшена статистика для полнотекстовых столбцов
новый метод: полусоединение executor-а (semi-join)
новый метод: антисоединение executor-а (anti-join)
улучшена производительность text_position()
улучшения bitmap scans
оптимизация расхода памяти при исполнении триггеров
hash-методы для DISTINCT / UNION / INTERSECT /
EXCEPTION
2. Администрирование
Ещё раз о FreeSpaceMap (FSM)
Heikki Linnakangas

в FSM хранится информация о свободном месте (нужна


для INSERT / UPDATE)
теперь FSM строится для каждой таблицы (файлы
вроде 12345_fsm)
новая реализация
бинарное дерево
1 байт на 1 страницу «кучи»
данные размещены в стандартных 8KB-страницах
структура данных автовосстанавливаемая
(устойчивость)
не требуется полная перестройка FSM при вакууме или
крахе системы
max_fsm_pages и max_fsm_relations больше нет!
Статистика выполнения функций

В 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)
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? Он по-прежнему нужен.


Для более глубокого анализа.
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


на момент выполнения запроса на «боевом» сервере!
DBA: как "прибить" "плохой" backend

8.0: pg_cancel_backend (pid)


— отменяет текущий SQL-запрос

8.4: pg_terminate_backend (pid)


— завершение backend-а с сигналом SIGTERM
Привилегии на столбцы
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 "test" as user "sucker".
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)
Администрирование: ещё и ещё!

перечисление всех запросов, участвующих в deadlock


собственные LC_COLLATE и LC_TYPE у каждой БД
улучшение работы с SSL-сертификатами
TRUNCATE TABLE RESTART INDENTITY
человекопонятный EXPLAIN VERBOSE
contrib/pgbench: ограничение не только по транзакциям,
но и по времени выполнения испытания
возможность добавлять столбцы к VIEW
более «умный» pg_dump –data-only (нет проблем с FK)
3. Проекты-спутники
pgAdmin-III 1.10

графический конструктор запросов (GSoC-проект)


скриптовый движок в редакторе запросов (GSoC-проект)
улучшенная работа с:
объектами полнотекстового поиска
наследованием таблиц
полная поддержка Postgres 8.4
...и много других новинок и улучшений!
SkyTools в 2008 и 2009 годах

постоянное развитие
последнее обновление 27 марта 2009, SkyTools 2.1.9
широкое распространение PgQ (асинхронная модель!)
londiste вытесняет Slony
pl/proxy для крупных проектов
pgBouncer почти ВЕЗДЕ (как nginx)

Больше информации: http://PostgreSQLRussia.ORG/articles/


(в том числе слайды/видео визита Аско Оя и Марко Креэна в Москву)
Хороших проектов всё больше

Каталог на 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
... и много других постоянно развивающихкся программ!
Источники и контакты
http://PostgreSQL.ORG
http://PostgreSQLRussia.ORG
форум,
wiki,
статьи,
новости,
социальная сеть (в процессе),
документация на русском (8.4devel, в процессе)

обзоры новинок
Hubert: http://www.depesz.com
перевод на русский: http://gray-hemp.blogspot.com

Николай Самохвалов: nikolay@postgresmen.ru

Спасибо!

Оценить