Upload
nikolay-samokhvalov
View
631
Download
4
Embed Size (px)
DESCRIPTION
PostgreSQL 8.4: Слайды доклада на конференции системных администраторов Rootconf-2009
Citation preview
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]
Спасибо!