Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Like this? Share it with your network

Share

PostgreSQL в высоконагруженных проектах

on

  • 13,182 views

PostgreSQL в высоконагруженных проектах

PostgreSQL в высоконагруженных проектах

Statistics

Views

Total Views
13,182
Views on SlideShare
12,569
Embed Views
613

Actions

Likes
16
Downloads
140
Comments
0

6 Embeds 613

http://leopard.in.ua 274
http://www.deveugene.com 265
http://deveugene.com 38
http://coderwall.com 31
http://www.linkedin.com 3
http://static.slideshare.net 2

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

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

PostgreSQL в высоконагруженных проектах Presentation Transcript

  • 1. PostgreSQL в высоконагруженных проектах Васильев Алексей Юрьевич leopard.in.ua Ноябрь 2010 Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 2. Что такое PostgreSQL? Введение PostgreSQL свободная объектно-реляционная система управления базами данных (СУБД). Почему PostgreSQL? Надежность; Поддержка БД практически неограниченного размера; Мощные и надёжные механизмы транзакций и репликации; Наследование; Легкая расширяемость; Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 3. Введение Производительность в PostgreSQL Не используйте настройки по умолчанию Используйте актуальную версию сервера Тесты производительности служат для продвижения конкретных продуктов Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 4. Настройка сервера Производительность в PostgreSQL Используемая память: shared_buffers, work_mem, maintenance_work_mem Журнал транзакций и контрольные точки: checkpoint_segments, fsync Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 5. Настройка сервера Производительность в PostgreSQL Планировщик запросов: default_statistics_target, effective_cache_size, random_page_cost Сбор статистики: track_counts, track_functions, track_activities Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 6. Выбор оптимальных настроек Производительность в PostgreSQL Метод сравнительного тестирования pgtune настройки по железу Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 7. Диски и файловые системы Производительность в PostgreSQL Диски: перенос журнала транзакций, RAID Файловые системы: Ext3, Ext4, ReiserFS, XFS Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 8. Оптимизация БД и приложения Производительность в PostgreSQL Граммотное проектирование базы Наличие быстрых путей доступа к данным индексов Обход известных проблем Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 9. Что такое масштабирование? Масштабирование PostgreSQL Масштабирование это процесс обеспечения роста системы, т.е. масштабируемости. В свою очередь, масштабируемость это свойство системы, сохраняя пропускную способность, справляться с увеличением нагрузки при увеличении определенных ресурсов системы. Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 10. Проблемы Масштабирование PostgreSQL Ограничение пропускной способности чтения данных Ограничение пропускной способности записи данных Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 11. Подходы Масштабирование PostgreSQL Вертикальное масштабирование Горизонтальное масштабирование Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 12. Методы Масштабирование PostgreSQL Партиционирование (секционирование) таблиц Репликация Шардинг Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 13. Партиционирование (секционирование) таблиц Масштабирование PostgreSQL Партиционирование (секционирование) это разбиение больших структур баз данных (таблицы, индексы) на меньшие кусочки. PostgreSQL поддерживает два критерия для создания партиций: Партиционирование по диапазону значений (range) Партиционирование по списку значений (list) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 14. Методы деления данных на партиции Масштабирование PostgreSQL Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 15. Партиционирование в PostgreSQL Масштабирование PostgreSQL Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 16. Ошибка партиционирования Масштабирование PostgreSQL CHECK ( outletID BETWEEN 100 AND 200 ) CHECK ( outletID BETWEEN 200 AND 300 ) Какой партиции принадлежит число 200? Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 17. Репликация Масштабирование PostgreSQL Репликация механизм синхронизации содержимого нескольких копий объекта (например, содержимого базы данных). Утилиты для создания репликации в PostgreSQL: Slony-I pgpool-I/II Bucardo Londiste RubyRep Потоковая репликация Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 18. Slony-I Масштабирование PostgreSQL Особенности: Мастер/слейв репликация Работа через триггеры Возможность потабличной репликации Поддержка каскадной репликации Поддержка отказоустойчивости Недостатки: Сложная настройка Добавление узла трудоемкая операция Таблицы должны иметь primary key Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 19. Londiste Масштабирование PostgreSQL Особенности: Мастер/слейв репликация Работа через триггеры Возможность потабличной репликации Возможность двухстороннего сравнения таблиц Простота установки и настройки Недостатки: Отсутствие каскадной репликации Отсутствие отказоустойчивости Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 20. Bucardo Масштабирование PostgreSQL Особенности: Мастер/мастер или Мастер/слейв репликация Работа через триггеры Возможность потабличной репликации Поддержка каскадной репликации Недостатки: Perl, требуется Pl/PgSQL и Pl/PerlU Отсутствие отказоустойчивости Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 21. RubyRep Масштабирование PostgreSQL Особенности: Мастер/мастер или Мастер/слейв репликация Работа через триггеры Возможность потабличной репликации Простота установки и настройки Недостатки: Ruby, поедает память и процессор при больших объемах данных Отсутствие отказоустойчивости Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 22. Streaming Replication (Потоковая репликация) Масштабирование PostgreSQL Особенности: Из коробки начиная с 9 версии PostgreSQL Мастер/слейв репликация Работа через WAL логи Реплицируется инстанс PostgreSQL, а не отдельная база данных (создается точная копия инстанса СУБД) Недостатки: Отдельно базу данных реплицировать нельзя Отсутствие отказоустойчивости Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 23. PgPool-II Масштабирование PostgreSQL PgPool-II это прослойка, работающая между серверами PostgreSQL и клиентами СУБД PostgreSQL. Она предоставляет следующие функции: Объединение соединений Репликация Балансировка нагрузки Ограничение лишних соединений Параллельные запросы Кеширование запросов Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 24. PgPool-II репликация Масштабирование PostgreSQL Минус падение производительности (синхронная репликация, блокировка таблицы) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 25. Пример решения проблемы чтения данных Масштабирование PostgreSQL Создание кластера PostgreSQL для решения проблемы чтения данных: PgPool-II 3 + PostgreSQL 9 Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 26. Взаимодействие PgPool-II 3 с PostgreSQL 9 PgPool-II 3 и PostgreSQL 9 Недостатки потоковой репликации в PostgreSQL 9: Отсутствие отказоустойчивости Нет пулов соединений Нет балансировки нагрузки Нужно учитывать, какие запросы не принимают слейвы (INSERT, UPDATE, DELETE, COPY FROM, TRUNCATE и т.д.) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 27. Взаимодействие PgPool-II 3 с PostgreSQL 9 PgPool-II 3 и PostgreSQL 9 Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 28. Плюсы и минусы PgPool-II 3 и PostgreSQL 9 Плюсы: Производительность записи падает незначительно Отказоустойчивость Пулы соединений Балансировка нагрузки увеличение производительности на чтение Минусы: Асинхронная репликация хоть и задержка репликации относительно низкая, могут возникать проблемы при балансировке Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 29. Новые возможности в pgpool-II 3 PgPool-II 3 и PostgreSQL 9 Новый параметр sub_mode для потоковой репликации Отправка на мастер запросов на запись Интеллектуальная балансировка нагрузки: проверка задержки репликации между мастером и слейвом. Добавление слейвов без остановки pgpool-II Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 30. Обнаружение задержки репликации PgPool-II 3 и PostgreSQL 9 Обнаружение задержки репликации: как это работает? (SELECT pg_current_xlog_location()) - (SELECT pg_last_xlog_receive_location()) = если результат превышает delay_threshold запрос отправляется на мастер. Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 31. Логирование задержки репликации PgPool-II 3 и PostgreSQL 9 Параметр log_standby_delay может быть: none: не логировать задержку if_over_threshold: логировать, если результат превысил delay_threshold always: всегда логировать задержку Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 32. Итог PgPool-II 3 и PostgreSQL 9 Простота в настройке и обслуживании Мы можем добавлять слейв сервера без потери производительности на запись Больше слейв серверов больше производительность на чтение Низкая задержка репликации между мастером и слейвом Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 33. Шардинг Масштабирование PostgreSQL Шардинг разделение данных на уровне ресурсов. Концепция шардинга заключается в логическом разделении данных по различным ресурсам исходя из требований к нагрузке. Утилиты для создания шардинга в PostgreSQL: PL/Proxy Sequoia GridSQL for EnterpriseDB Advanced Server Greenplum Database HadoopDB Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 34. Пулы соединений Узкие места в PostgreSQL Мультиплексоры соединений (программы для создания пула коннектов) позволяют уменьшить накладные расходы на базу данных, в случае, когда огромное количество физических соединений ведет к падению производительности PostgreSQL. PgBouncer Pgpool Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 35. Кэширование в PostgreSQL Узкие места в PostgreSQL Из коробки данный фукционал не доступен (теряем транзакционную чистоту происходящего в базе). Но есть такие средства как: pgmemcache pgpool-II (query cache) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 36. Pgmemcache Кэширование в PostgreSQL Pgmemcache это PostgreSQL API библиотека на основе libmemcached для взаимодействия с memcached. Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 37. Анализирование SQL запросов EXPLAIN [ANALYZE] pgFouine это анализатор log-файлов для PostgreSQL COPY vs INSERT на больших объемах данных Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 38. EXPLAIN ME! Анализирование SQL запросов Использование полного просмотра таблицы (seq scan) Использование наиболее примитивного способа объединения таблиц (nested loop) EXPLAIN ANALYZE: нет ли больших отличий в предполагаемом количестве записей и реально выбранном? Запрет оптимизатору использовать определённые планы выполнения для более точного анализа (SET enable_seqscan=false) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 39. PgFouine Анализирование SQL запросов ТОП SQL запросов по времени выполнения ТОП SQL запросов по частоте выполнения Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 40. B-деревья Оптимизация структуры БД Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 41. Функциональные индексы Оптимизация структуры БД Индекс: CREATE INDEX foo_name_first_idx ON foo ((lower(substr(foo_name, 1, 1)))); будет использоваться запросами вида: SELECT * FROM foo WHERE lower(substr(foo_name, 1, 1)) = ’д’; Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 42. Частичные индексы (partial indexes) Оптимизация структуры БД Индекс: CREATE INDEX access_log_client_ip_ix ON access_log (client_ip) WHERE NOT (client_ip > inet ’192.168.100.0’ AND client_ip < inet ’192.168.100.255’); будет использоваться запросами вида: SELECT * FROM access_log WHERE url = ’/index.html’ AND client_ip = inet ’212.78.10.32’; Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • 43. Вопросы и Ответы Спасибо за внимание! Васильев О.Ю. PostgreSQL в высоконагруженных проектах