SlideShare a Scribd company logo
1 of 30
Download to read offline
Производительность
    PostgreSQL
  Николай Самохвалов
         http://postgresmen.ru
PostgreSQL
   •   открытый исходный код;
   •   BSD-лицензия;
   •   надёжность, предсказуемость, ACID — главное;
   •   высокое качество кода;




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
PostgreSQL
   • хорошая поддержка:       email: pgsql­ru­general@postgresql.org
      • сообщество,        xmpp: postgresmen@conference.jabber.org
                                           web: http://postgresmen.ru
      • коммерческая;
   • прозрачность процесса разработки:
         • http://wiki.postgresql.org/wiki/Development_information;
   • большое количество проектов-спутников:
      • http://wiki.postgresmen.ru/index.php/Проекты-спутники_PostgreSQL;


http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
PostgreSQL
• богатые возможности:
   • сравнение в wikipedia (англ.);
• производительность:
   • индексы,
   • «фичи», параметры настройки,
   • надёжная производительность;


                                                                    Фото: tika­online.de
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
PostgreSQL
• масштабируемость:
      • партицирование таблиц,
      • M-S, M-M репликация,
      • «шардинг», кластеризация
          • PL/Proxy, GridSQL.




                                                                    Фото: tika­online.de

http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Производительность

                             1. Настройка
                             2. Разработка


http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Настройка
   Диски, RAID, ОС, ФС, postgresql.conf



                                С чего начать? (Совет №0)


http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Настройка
                                С чего начать?




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Мониторинг, анализ
  Все на анализы! (Без исключения)
  ●
      Непрерывное слежение
  ●
      Оповещение о проблемах

        ●
            железо: contrib/pgbench, bonnie++
        ●
            ОС, СУБД, web-сервер:
              ●
                ZABBIX,
              ●
                Cacti/Nagios,         + расширения
              ●
                Staplr by Gavin Roy
        ●
            SQL-запросы: pgFouine;
        ●
            pg_stat_*, reads/hits, phpPgAdmin
                                                                    Где жмёт?
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Работа с памятью
     Если не понимаете этого – 
             ничего не выйдет!



PostgreSQL Hardware Performance Tuning
by Bruce Momjian (англ.), 
мастер­класс на Highload­2007



http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Мониторинг — главный друг DBA



             Переход 8.2 → 8.3




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Мониторинг — главный друг DBA



      Начинаем использовать 
      pgBouncer (разные проекты)




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Мониторинг — главный друг DBA


  БД «сидит» в RAM: 
  наблюдаем только запись на диск




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Мониторинг — главный друг DBA


  «Тревожный звонок»: 
  уменьшение объёма кэша ОС
   → скачок LA




                                                                    * FreeBSD node
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Настройка: о чём помнить
  Совет №1: не оставляйте настройки «по умолчанию»!
        ●
          shared_buffers
        ●
          work_mem
        ●
          max_connections
        ●
          effective_cache_size
        ●
            рутинные задачи
              VACUUM, FSM, сбор статистики, checkpoints
        ●
            Все 187 параметров в 3-часовой экскурсии от
                 Джоша Беркуса (Josh Berkus)

        Почитать на русском: коротко, подробнее
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Настройка: о чём помнить
  Совет №2: используйте PgBouncer




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Настройка: о чём помнить
  Совет №3 (может быть «вредным»):

             statement_timeout = 90s

  Для «важных» транзакций и для задач обслуживания:

             SET statement_timeout TO 0;
  или
             ALTER USER maintanance_user SET statement_timeout TO 0;


http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Настройка: о чём помнить
  Совет №3: следим за «здоровьем»
                                     SELECT
     SELECT
                                       indexrelname,
       datname,
                                       idx_tup_read,
       CASE
                                       idx_tup_fetch,
         WHEN blks_read = 0 THEN 0
                                       (idx_tup_read - idx_tup_fetch),
         ELSE blks_hit / blks_read
                                       CASE WHEN idx_tup_read = 0 THEN 0 ELSE
       END AS ratio
     FROM                            (idx_tup_read::float4 -
       pg_stat_database;             idx_tup_fetch) / idx_tup_read END as r
                                     FROM
                                       pg_stat_user_indexes
 ... и т.д.                          ORDER BY r desc;



 Настраиваем предупреждения в системе мониторинга 
 и когда надо – реагируем
 (перенастройка, чистка, пересоздание индексов и т.д.)
                                                                                Фото: tika­online.de
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Разработка
   Схема БД, SQL-запросы, индексы, триггеры,
   масштабирование, асинхронность

                   С чего начать? (Совет №0)


http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Разработка
                                С чего начать?




                                                                    Точно!
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Разработка: анализ
   1. Понимаем, что происходит «внутри»:
       ●
         размеры БД, таблиц, индексов,
       ●
         статистика использования (индексов, hit/read),
       ●
         EXPLAIN ANALYZE;
   2. PgFouine




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
PgFouine
   ●
     выявляет самые медленные
   [обобщённые] запросы:
         ●
           см. вкладку Queries that took
         up the most time (N),
         ●
           показывает распределение
         по часам,
         ●
           если > 1h — нужна
         оптимизация!
   ●
    определяет, на что
   потрачено время СУБД и когда;


http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
PgFouine
      ●
          показывает профиль нагрузки
            ●
                у вас тоже 80-90% —чтение? ;-)
      ●
          агрегирует и SQL-ошибки;
      ●
          рисует TPS-графики




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
PgFouine
   ●
       анализ VACUUM VERBOSE
         ●
           FSM
         ●
           статистика по базам/схемам, таблицам
   ●
       Tsung: симуляция нагрузки




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
PgFouine
   postgresql.conf:
         log_min_duration_statement = 100ms

   Важно: изменяем значение — меняется картина!

   Начинаем с 1s,
   постепенно спускаемся до 100ms

   pgFouine— на PHP (sic!). Осторожно, «любит» RAM.
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Разработка: о чём помнить
  Совет №1: обязательно изучите все возможности
  индексов в PostgreSQL
        ●
            B-Tree, GiST, R-Tree, GIN;
        ●
            Многоколоночные:
              ●
                btree по 2 и более столбцам,
              ●
                экзотика: btree_gist+rtree, rtree+
              btree_gist+GiST(полнотекст.поиск) и т.п. в 1 (!) индексе
        ●
            Функциональные:
              CREATE INDEX idx ON t1 (substr(name, 6));
        ●
            Частичные
              CREATE INDEX ids ON t1 WHERE status=1;
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Разработка: о чём помнить
  Совет №2: избегайте заведомо медленных операций
        ●
            OUTER (LEFT/RIGHT) JOIN
        ●
            GROUP BY, DISTINCT, DISTINCT ON, UNION (без ALL)
        ●
            ... OFFSET 100000;
        ●
            SELECT COUNT(1) FROM t1 WHERE ... AND ... AND ...;




http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Разработка: о чём помнить
  Совет №2: избегайте заведомо медленных операций.

  Подробнее о списках (постраничный вывод информации):
     ●
       Зло №1: медленный count() («всего найдено: 1000000
     человек»):
         — используем приближённые значения (парсим вывод
         EXPLAIN SELECT ...);
     ●
       Зло №2: большие значения OFFSET:
         — меньше сортировок, больше фильтров (учимся у
         GMail),
         — возможно, ограничиваем максимальный номер
         страницы.
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
Разработка: о чём помнить
  Совет №3: подумайте о масштабировании раньше

  ●
      избегайте чрезмерно сложных SQL-запросов;
  ●
      «Разделяй и властвуй»;
  ●
      изучите решения для масштабирования:
         ●
           Slony-I (масштабируем чтение),
         ●
           SkyTools, PL/Proxy,
         ●
           GridSQL.

        Завтра: посетите доклады!
           ●
             Аско Оя — о решениях Skype;
           ●
             Гевин Рой — об опыте myYearbook.com.
http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
30 минут — это очень мало.



   вопросы?
   а) прямо сейчас;
   б) сегодня вечером в 19:00 на встрече PostgreSQL-сообщества;
   в) в любое время.         email: pgsql­ru­general@postgresql.org
                                      xmpp: postgresmen@conference.jabber.org
                                                     web: http://postgresmen.ru

http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf

More Related Content

What's hot

ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?Andrew Mayorov
 
Mediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаMediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаAndrew Dutchak
 
кеширование в бд
кеширование в бдкеширование в бд
кеширование в бдMax Lapshin
 
20070407 Rit2007 Scalability Replication Zolotukhin
20070407 Rit2007 Scalability Replication Zolotukhin20070407 Rit2007 Scalability Replication Zolotukhin
20070407 Rit2007 Scalability Replication ZolotukhinNikolay Samokhvalov
 
Будущее казахстанских корпоративных коммуникаций в 2018
Будущее казахстанских корпоративных коммуникаций в 2018Будущее казахстанских корпоративных коммуникаций в 2018
Будущее казахстанских корпоративных коммуникаций в 2018Askarbekov corporate communications agency
 
колышкин Rootconf 2009 Openvz
колышкин Rootconf 2009 Openvzколышкин Rootconf 2009 Openvz
колышкин Rootconf 2009 OpenvzLiudmila Li
 
Распределенная обработка потоковых данных
Распределенная обработка потоковых данныхРаспределенная обработка потоковых данных
Распределенная обработка потоковых данныхmayperl
 
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発Yuichi Tanaka
 
Успешный программист. Современные тенденции
Успешный программист. Современные тенденцииУспешный программист. Современные тенденции
Успешный программист. Современные тенденцииStas Fomin
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hiroshi Ono
 
Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...
Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...
Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...collaborator.pro
 

What's hot (17)

ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?
 
Mediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаMediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіа
 
кеширование в бд
кеширование в бдкеширование в бд
кеширование в бд
 
20070407 Rit2007 Scalability Replication Zolotukhin
20070407 Rit2007 Scalability Replication Zolotukhin20070407 Rit2007 Scalability Replication Zolotukhin
20070407 Rit2007 Scalability Replication Zolotukhin
 
lenvendo on bitrix cms
lenvendo on bitrix cmslenvendo on bitrix cms
lenvendo on bitrix cms
 
Будущее казахстанских корпоративных коммуникаций в 2018
Будущее казахстанских корпоративных коммуникаций в 2018Будущее казахстанских корпоративных коммуникаций в 2018
Будущее казахстанских корпоративных коммуникаций в 2018
 
Problogging
ProbloggingProblogging
Problogging
 
колышкин Rootconf 2009 Openvz
колышкин Rootconf 2009 Openvzколышкин Rootconf 2009 Openvz
колышкин Rootconf 2009 Openvz
 
Ext Ncs 20081029
Ext Ncs 20081029Ext Ncs 20081029
Ext Ncs 20081029
 
Распределенная обработка потоковых данных
Распределенная обработка потоковых данныхРаспределенная обработка потоковых данных
Распределенная обработка потоковых данных
 
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
 
Postgresql microconf
Postgresql microconfPostgresql microconf
Postgresql microconf
 
Успешный программист. Современные тенденции
Успешный программист. Современные тенденцииУспешный программист. Современные тенденции
Успешный программист. Современные тенденции
 
WebDAV as Web API
WebDAV as Web APIWebDAV as Web API
WebDAV as Web API
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装
 
RDF and FOAF
RDF and FOAFRDF and FOAF
RDF and FOAF
 
Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...
Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...
Влияние скорости загрузки сайта на SEO. Как попасть в зеленую зону Google Pag...
 

Viewers also liked

Синие против красных
Синие против красныхСиние против красных
Синие против красныхSergey Melekhin
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийFuenteovejuna
 
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай СамохваловКраткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай СамохваловYandex
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноVladislav Bezverhiy
 
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay SamokhvalovPostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay SamokhvalovNikolay Samokhvalov
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...Ontico
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLВладимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLYandex
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Mail.ru Group
 
Postgres Presentation
Postgres PresentationPostgres Presentation
Postgres Presentationgisborne
 
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)Ontico
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDAlex Chistyakov
 
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...Mail.ru Group
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...Mail.ru Group
 
как сделать свой кластер на postgresql 95
как сделать свой кластер на postgresql 95как сделать свой кластер на postgresql 95
как сделать свой кластер на postgresql 95Максим Селиверстов
 

Viewers also liked (20)

Синие против красных
Синие против красныхСиние против красных
Синие против красных
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
 
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай СамохваловКраткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
 
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay SamokhvalovPostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Pgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemianskyPgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemiansky
 
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLВладимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQL
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
 
Get to know PostgreSQL!
Get to know PostgreSQL!Get to know PostgreSQL!
Get to know PostgreSQL!
 
Postgres Presentation
Postgres PresentationPostgres Presentation
Postgres Presentation
 
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
 
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
 
как сделать свой кластер на postgresql 95
как сделать свой кластер на postgresql 95как сделать свой кластер на postgresql 95
как сделать свой кластер на postgresql 95
 
Full Text Search In PostgreSQL
Full Text Search In PostgreSQLFull Text Search In PostgreSQL
Full Text Search In PostgreSQL
 

More from Ontico

Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)Ontico
 
Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015Ontico
 
Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++Ontico
 
Call for papers (2014) ru
Call for papers (2014) ruCall for papers (2014) ru
Call for papers (2014) ruOntico
 
Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Ontico
 
Как разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег БунинКак разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег БунинOntico
 
Конференции Онтико (2011)
Конференции Онтико (2011)Конференции Онтико (2011)
Конференции Онтико (2011)Ontico
 
Программный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октябряПрограммный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октябряOntico
 
Конференции 2010 / описание
Конференции 2010 / описаниеКонференции 2010 / описание
Конференции 2010 / описаниеOntico
 
Онтико, 2009
Онтико, 2009Онтико, 2009
Онтико, 2009Ontico
 
Конференции 2010
Конференции 2010Конференции 2010
Конференции 2010Ontico
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project developmentOntico
 
Ok2009 Пленарка
Ok2009 ПленаркаOk2009 Пленарка
Ok2009 ПленаркаOntico
 
Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Ontico
 
HighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg BuninHighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg BuninOntico
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c BitrixOntico
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c BitrixOntico
 
Gmr Highload Presentation Revised
Gmr Highload Presentation RevisedGmr Highload Presentation Revised
Gmr Highload Presentation RevisedOntico
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusOntico
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusOntico
 

More from Ontico (20)

Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
 
Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015
 
Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++
 
Call for papers (2014) ru
Call for papers (2014) ruCall for papers (2014) ru
Call for papers (2014) ru
 
Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013
 
Как разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег БунинКак разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег Бунин
 
Конференции Онтико (2011)
Конференции Онтико (2011)Конференции Онтико (2011)
Конференции Онтико (2011)
 
Программный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октябряПрограммный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октября
 
Конференции 2010 / описание
Конференции 2010 / описаниеКонференции 2010 / описание
Конференции 2010 / описание
 
Онтико, 2009
Онтико, 2009Онтико, 2009
Онтико, 2009
 
Конференции 2010
Конференции 2010Конференции 2010
Конференции 2010
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project development
 
Ok2009 Пленарка
Ok2009 ПленаркаOk2009 Пленарка
Ok2009 Пленарка
 
Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009
 
HighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg BuninHighLoad Sites, Oleg Bunin
HighLoad Sites, Oleg Bunin
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c Bitrix
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c Bitrix
 
Gmr Highload Presentation Revised
Gmr Highload Presentation RevisedGmr Highload Presentation Revised
Gmr Highload Presentation Revised
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 Rus
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 Rus
 

~20081006 Highload2008 Postgresql самохвалов

  • 1. Производительность PostgreSQL Николай Самохвалов http://postgresmen.ru
  • 2. PostgreSQL • открытый исходный код; • BSD-лицензия; • надёжность, предсказуемость, ACID — главное; • высокое качество кода; http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 3. PostgreSQL • хорошая поддержка: email: pgsql­ru­general@postgresql.org • сообщество, xmpp: postgresmen@conference.jabber.org web: http://postgresmen.ru • коммерческая; • прозрачность процесса разработки: • http://wiki.postgresql.org/wiki/Development_information; • большое количество проектов-спутников: • http://wiki.postgresmen.ru/index.php/Проекты-спутники_PostgreSQL; http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 4. PostgreSQL • богатые возможности: • сравнение в wikipedia (англ.); • производительность: • индексы, • «фичи», параметры настройки, • надёжная производительность; Фото: tika­online.de http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 5. PostgreSQL • масштабируемость: • партицирование таблиц, • M-S, M-M репликация, • «шардинг», кластеризация • PL/Proxy, GridSQL. Фото: tika­online.de http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 6. Производительность 1. Настройка 2. Разработка http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 7. Настройка Диски, RAID, ОС, ФС, postgresql.conf С чего начать? (Совет №0) http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 8. Настройка С чего начать? http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 9. Мониторинг, анализ Все на анализы! (Без исключения) ● Непрерывное слежение ● Оповещение о проблемах ● железо: contrib/pgbench, bonnie++ ● ОС, СУБД, web-сервер: ● ZABBIX, ● Cacti/Nagios, + расширения ● Staplr by Gavin Roy ● SQL-запросы: pgFouine; ● pg_stat_*, reads/hits, phpPgAdmin Где жмёт? http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 10. Работа с памятью Если не понимаете этого –  ничего не выйдет! PostgreSQL Hardware Performance Tuning by Bruce Momjian (англ.),  мастер­класс на Highload­2007 http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 11. Мониторинг — главный друг DBA Переход 8.2 → 8.3 http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 12. Мониторинг — главный друг DBA Начинаем использовать  pgBouncer (разные проекты) http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 13. Мониторинг — главный друг DBA БД «сидит» в RAM:  наблюдаем только запись на диск http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 14. Мониторинг — главный друг DBA «Тревожный звонок»:  уменьшение объёма кэша ОС → скачок LA * FreeBSD node http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 15. Настройка: о чём помнить Совет №1: не оставляйте настройки «по умолчанию»! ●  shared_buffers ● work_mem ● max_connections ●  effective_cache_size ● рутинные задачи VACUUM, FSM, сбор статистики, checkpoints ● Все 187 параметров в 3-часовой экскурсии от Джоша Беркуса (Josh Berkus) Почитать на русском: коротко, подробнее http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 16. Настройка: о чём помнить Совет №2: используйте PgBouncer http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 17. Настройка: о чём помнить Совет №3 (может быть «вредным»): statement_timeout = 90s Для «важных» транзакций и для задач обслуживания: SET statement_timeout TO 0; или ALTER USER maintanance_user SET statement_timeout TO 0; http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 18. Настройка: о чём помнить Совет №3: следим за «здоровьем» SELECT SELECT indexrelname, datname, idx_tup_read, CASE idx_tup_fetch, WHEN blks_read = 0 THEN 0 (idx_tup_read - idx_tup_fetch), ELSE blks_hit / blks_read CASE WHEN idx_tup_read = 0 THEN 0 ELSE END AS ratio FROM (idx_tup_read::float4 - pg_stat_database; idx_tup_fetch) / idx_tup_read END as r FROM pg_stat_user_indexes ... и т.д. ORDER BY r desc; Настраиваем предупреждения в системе мониторинга  и когда надо – реагируем (перенастройка, чистка, пересоздание индексов и т.д.) Фото: tika­online.de http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 19. Разработка Схема БД, SQL-запросы, индексы, триггеры, масштабирование, асинхронность С чего начать? (Совет №0) http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 20. Разработка С чего начать? Точно! http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 21. Разработка: анализ 1. Понимаем, что происходит «внутри»: ● размеры БД, таблиц, индексов, ● статистика использования (индексов, hit/read), ● EXPLAIN ANALYZE; 2. PgFouine http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 22. PgFouine ● выявляет самые медленные [обобщённые] запросы: ● см. вкладку Queries that took up the most time (N), ● показывает распределение по часам, ● если > 1h — нужна оптимизация! ● определяет, на что потрачено время СУБД и когда; http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 23. PgFouine ● показывает профиль нагрузки ● у вас тоже 80-90% —чтение? ;-) ● агрегирует и SQL-ошибки; ● рисует TPS-графики http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 24. PgFouine ● анализ VACUUM VERBOSE ● FSM ● статистика по базам/схемам, таблицам ● Tsung: симуляция нагрузки http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 25. PgFouine postgresql.conf: log_min_duration_statement = 100ms Важно: изменяем значение — меняется картина! Начинаем с 1s, постепенно спускаемся до 100ms pgFouine— на PHP (sic!). Осторожно, «любит» RAM. http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 26. Разработка: о чём помнить Совет №1: обязательно изучите все возможности индексов в PostgreSQL ● B-Tree, GiST, R-Tree, GIN; ● Многоколоночные: ● btree по 2 и более столбцам, ● экзотика: btree_gist+rtree, rtree+ btree_gist+GiST(полнотекст.поиск) и т.п. в 1 (!) индексе ● Функциональные: CREATE INDEX idx ON t1 (substr(name, 6)); ● Частичные CREATE INDEX ids ON t1 WHERE status=1; http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 27. Разработка: о чём помнить Совет №2: избегайте заведомо медленных операций ● OUTER (LEFT/RIGHT) JOIN ● GROUP BY, DISTINCT, DISTINCT ON, UNION (без ALL) ● ... OFFSET 100000; ● SELECT COUNT(1) FROM t1 WHERE ... AND ... AND ...; http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 28. Разработка: о чём помнить Совет №2: избегайте заведомо медленных операций. Подробнее о списках (постраничный вывод информации): ● Зло №1: медленный count() («всего найдено: 1000000 человек»): — используем приближённые значения (парсим вывод EXPLAIN SELECT ...); ● Зло №2: большие значения OFFSET: — меньше сортировок, больше фильтров (учимся у GMail), — возможно, ограничиваем максимальный номер страницы. http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 29. Разработка: о чём помнить Совет №3: подумайте о масштабировании раньше ● избегайте чрезмерно сложных SQL-запросов; ● «Разделяй и властвуй»; ● изучите решения для масштабирования: ● Slony-I (масштабируем чтение), ● SkyTools, PL/Proxy, ● GridSQL. Завтра: посетите доклады! ● Аско Оя — о решениях Skype; ● Гевин Рой — об опыте myYearbook.com. http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  • 30. 30 минут — это очень мало. вопросы? а) прямо сейчас; б) сегодня вечером в 19:00 на встрече PostgreSQL-сообщества; в) в любое время. email: pgsql­ru­general@postgresql.org xmpp: postgresmen@conference.jabber.org web: http://postgresmen.ru http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf