• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Postgre Sql 8 4
 

Postgre Sql 8 4

on

  • 3,297 views

 

Statistics

Views

Total Views
3,297
Views on SlideShare
3,188
Embed Views
109

Actions

Likes
1
Downloads
54
Comments
0

3 Embeds 109

http://www.rootconf.ru 74
http://rootconf.ru 26
http://www.slideshare.net 9

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Postgre Sql 8 4 Postgre Sql 8 4 Presentation Transcript

    • 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 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
    • На самом деле... 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
    • Новое в 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 разница -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 Значительный выигрыш в случаях, когда обновляется часть данных таблицы (как чаще всего и бывает)
    • Мультипотоковый 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: как quot;прибитьquot; quot;плохойquot; 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 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)
    • Администрирование: ещё и ещё! перечисление всех запросов, участвующих в 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 Спасибо!