postgre sql 8 4

25
PostgreSQL 8.4 Что в новой версии? [специально для сисадминов и DBA] Николай Самохвалов [email protected] Москва, 14 апреля 2009

Upload: highload-2009

Post on 09-Aug-2015

1.798 views

Category:

Technology


0 download

TRANSCRIPT

PostgreSQL 8.4Что в новой версии?

[специально для сисадминов и DBA]

Николай Самохвалов[email protected]

Москва, 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...1995 – «прошлая жизнь» (Postgres без SQL)

1996...1998 – стабильность

1998...2001 – стандарт SQL

2001...н. в. – выход на уровень Enterprise

производительностьпростота администрирования24/7

4 февраля 2008 – PostgreSQL 8.3март, май, июль, сентябрь 2008 – CommitFest-ы для 8.4ноябрь 2008 – FeatureFreeze для 8.4

апрель 2009 – выпуск 8.4beta

май-июнь 2009 – PostgreSQL 8.4

1997

2008

2008

2007

2008

На самом деле...

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

nikolay@nikolay:/test/pg84dev/bin$ ./psql postgrespsql (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)

Механизм карт свободного пространства (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

Heikki Linnakangas

Карты видимости: что это даёт?

Частичный VACUUM:

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

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

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

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

Для таблицы 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%

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

(как чаще всего и бывает)

Hubert Lubaczewski

Мультипотоковый 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-индексы btree_gin«префиксный» поиск с GIN улучшены расчёты статистики для optimizer-аулучшена статистика для полнотекстовых столбцовновый метод: полусоединение executor-а (semi-join)новый метод: антисоединение executor-а (anti-join)улучшена производительность text_position()улучшения bitmap scansоптимизация расхода памяти при исполнении триггеров hash-методы для DISTINCT / UNION / INTERSECT / EXCEPTION

Oleg Bartunov & Teodor Sigaev

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

Ещё раз о FreeSpaceMap (FSM)

в FSM хранится информация о свободном месте (нужна для INSERT / UPDATE)теперь FSM строится для каждой таблицы (файлы вроде 12345_fsm) новая реализация

бинарное дерево1 байт на 1 страницу «кучи»данные размещены в стандартных 8KB-страницахструктура данных автовосстанавливаемая (устойчивость)

не требуется полная перестройка FSM при вакууме или крахе системыmax_fsm_pages и max_fsm_relations больше нет!

Heikki Linnakangas

Статистика выполнения функций

В 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 = 100pg_stat_statements.track = toppg_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;GRANTtest=# create user sucker;CREATE ROLEtest=# grant select ( id, a, c ) on test to sucker;GRANTtest=# \c - suckerpsql (8.4beta1)You are now connected to database "test" as user "sucker".test=> select * from test;ERROR: permission denied for relation testtest=> 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+0410 | a : 10| 2009-04-13 21:49:09.947939+04(10 rows)

Администрирование: ещё и ещё!

перечисление всех запросов, участвующих в deadlockсобственные LC_COLLATE и LC_TYPE у каждой БДулучшение работы с SSL-сертификатамиTRUNCATE TABLE RESTART INDENTITYчеловекопонятный EXPLAIN VERBOSEcontrib/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 вытесняет Slonypl/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, готовый для использования с NagiosPlayr: инструмент нагрузочного тестирования (myYearbook.com)PostgreSQL Toolbox: коллекция утилит в помощь DBA и DBD

... и много других постоянно развивающихкся программ!

Источники и контакты

http://PostgreSQL.ORGhttp://PostgreSQLRussia.ORG

форум, wiki, статьи,новости,социальная сеть (в процессе),документация на русском (8.4devel, в процессе)

обзоры новинок

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

Николай Самохвалов: [email protected]

Спасибо!