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!

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

on

  • 12,947 views

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

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

Statistics

Views

Total Views
12,947
Views on SlideShare
12,335
Embed Views
612

Actions

Likes
15
Downloads
135
Comments
0

6 Embeds 612

http://leopard.in.ua 274
http://www.deveugene.com 265
http://deveugene.com 37
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 в высоконагруженных проектах PostgreSQL в высоконагруженных проектах Presentation Transcript

  • PostgreSQL в высоконагруженных проектах Васильев Алексей Юрьевич leopard.in.ua Ноябрь 2010 Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Что такое PostgreSQL? Введение PostgreSQL свободная объектно-реляционная система управления базами данных (СУБД). Почему PostgreSQL? Надежность; Поддержка БД практически неограниченного размера; Мощные и надёжные механизмы транзакций и репликации; Наследование; Легкая расширяемость; Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Введение Производительность в PostgreSQL Не используйте настройки по умолчанию Используйте актуальную версию сервера Тесты производительности служат для продвижения конкретных продуктов Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Настройка сервера Производительность в PostgreSQL Используемая память: shared_buffers, work_mem, maintenance_work_mem Журнал транзакций и контрольные точки: checkpoint_segments, fsync Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Настройка сервера Производительность в PostgreSQL Планировщик запросов: default_statistics_target, effective_cache_size, random_page_cost Сбор статистики: track_counts, track_functions, track_activities Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Выбор оптимальных настроек Производительность в PostgreSQL Метод сравнительного тестирования pgtune настройки по железу Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Диски и файловые системы Производительность в PostgreSQL Диски: перенос журнала транзакций, RAID Файловые системы: Ext3, Ext4, ReiserFS, XFS Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Оптимизация БД и приложения Производительность в PostgreSQL Граммотное проектирование базы Наличие быстрых путей доступа к данным индексов Обход известных проблем Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Что такое масштабирование? Масштабирование PostgreSQL Масштабирование это процесс обеспечения роста системы, т.е. масштабируемости. В свою очередь, масштабируемость это свойство системы, сохраняя пропускную способность, справляться с увеличением нагрузки при увеличении определенных ресурсов системы. Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Проблемы Масштабирование PostgreSQL Ограничение пропускной способности чтения данных Ограничение пропускной способности записи данных Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Подходы Масштабирование PostgreSQL Вертикальное масштабирование Горизонтальное масштабирование Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Методы Масштабирование PostgreSQL Партиционирование (секционирование) таблиц Репликация Шардинг Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Партиционирование (секционирование) таблиц Масштабирование PostgreSQL Партиционирование (секционирование) это разбиение больших структур баз данных (таблицы, индексы) на меньшие кусочки. PostgreSQL поддерживает два критерия для создания партиций: Партиционирование по диапазону значений (range) Партиционирование по списку значений (list) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Методы деления данных на партиции Масштабирование PostgreSQL Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Партиционирование в PostgreSQL Масштабирование PostgreSQL Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Ошибка партиционирования Масштабирование PostgreSQL CHECK ( outletID BETWEEN 100 AND 200 ) CHECK ( outletID BETWEEN 200 AND 300 ) Какой партиции принадлежит число 200? Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Репликация Масштабирование PostgreSQL Репликация механизм синхронизации содержимого нескольких копий объекта (например, содержимого базы данных). Утилиты для создания репликации в PostgreSQL: Slony-I pgpool-I/II Bucardo Londiste RubyRep Потоковая репликация Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Slony-I Масштабирование PostgreSQL Особенности: Мастер/слейв репликация Работа через триггеры Возможность потабличной репликации Поддержка каскадной репликации Поддержка отказоустойчивости Недостатки: Сложная настройка Добавление узла трудоемкая операция Таблицы должны иметь primary key Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Londiste Масштабирование PostgreSQL Особенности: Мастер/слейв репликация Работа через триггеры Возможность потабличной репликации Возможность двухстороннего сравнения таблиц Простота установки и настройки Недостатки: Отсутствие каскадной репликации Отсутствие отказоустойчивости Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Bucardo Масштабирование PostgreSQL Особенности: Мастер/мастер или Мастер/слейв репликация Работа через триггеры Возможность потабличной репликации Поддержка каскадной репликации Недостатки: Perl, требуется Pl/PgSQL и Pl/PerlU Отсутствие отказоустойчивости Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • RubyRep Масштабирование PostgreSQL Особенности: Мастер/мастер или Мастер/слейв репликация Работа через триггеры Возможность потабличной репликации Простота установки и настройки Недостатки: Ruby, поедает память и процессор при больших объемах данных Отсутствие отказоустойчивости Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Streaming Replication (Потоковая репликация) Масштабирование PostgreSQL Особенности: Из коробки начиная с 9 версии PostgreSQL Мастер/слейв репликация Работа через WAL логи Реплицируется инстанс PostgreSQL, а не отдельная база данных (создается точная копия инстанса СУБД) Недостатки: Отдельно базу данных реплицировать нельзя Отсутствие отказоустойчивости Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • PgPool-II Масштабирование PostgreSQL PgPool-II это прослойка, работающая между серверами PostgreSQL и клиентами СУБД PostgreSQL. Она предоставляет следующие функции: Объединение соединений Репликация Балансировка нагрузки Ограничение лишних соединений Параллельные запросы Кеширование запросов Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • PgPool-II репликация Масштабирование PostgreSQL Минус падение производительности (синхронная репликация, блокировка таблицы) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Пример решения проблемы чтения данных Масштабирование PostgreSQL Создание кластера PostgreSQL для решения проблемы чтения данных: PgPool-II 3 + PostgreSQL 9 Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Взаимодействие PgPool-II 3 с PostgreSQL 9 PgPool-II 3 и PostgreSQL 9 Недостатки потоковой репликации в PostgreSQL 9: Отсутствие отказоустойчивости Нет пулов соединений Нет балансировки нагрузки Нужно учитывать, какие запросы не принимают слейвы (INSERT, UPDATE, DELETE, COPY FROM, TRUNCATE и т.д.) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Взаимодействие PgPool-II 3 с PostgreSQL 9 PgPool-II 3 и PostgreSQL 9 Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Плюсы и минусы PgPool-II 3 и PostgreSQL 9 Плюсы: Производительность записи падает незначительно Отказоустойчивость Пулы соединений Балансировка нагрузки увеличение производительности на чтение Минусы: Асинхронная репликация хоть и задержка репликации относительно низкая, могут возникать проблемы при балансировке Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Новые возможности в pgpool-II 3 PgPool-II 3 и PostgreSQL 9 Новый параметр sub_mode для потоковой репликации Отправка на мастер запросов на запись Интеллектуальная балансировка нагрузки: проверка задержки репликации между мастером и слейвом. Добавление слейвов без остановки pgpool-II Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Обнаружение задержки репликации PgPool-II 3 и PostgreSQL 9 Обнаружение задержки репликации: как это работает? (SELECT pg_current_xlog_location()) - (SELECT pg_last_xlog_receive_location()) = если результат превышает delay_threshold запрос отправляется на мастер. Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Логирование задержки репликации PgPool-II 3 и PostgreSQL 9 Параметр log_standby_delay может быть: none: не логировать задержку if_over_threshold: логировать, если результат превысил delay_threshold always: всегда логировать задержку Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Итог PgPool-II 3 и PostgreSQL 9 Простота в настройке и обслуживании Мы можем добавлять слейв сервера без потери производительности на запись Больше слейв серверов больше производительность на чтение Низкая задержка репликации между мастером и слейвом Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Шардинг Масштабирование PostgreSQL Шардинг разделение данных на уровне ресурсов. Концепция шардинга заключается в логическом разделении данных по различным ресурсам исходя из требований к нагрузке. Утилиты для создания шардинга в PostgreSQL: PL/Proxy Sequoia GridSQL for EnterpriseDB Advanced Server Greenplum Database HadoopDB Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Пулы соединений Узкие места в PostgreSQL Мультиплексоры соединений (программы для создания пула коннектов) позволяют уменьшить накладные расходы на базу данных, в случае, когда огромное количество физических соединений ведет к падению производительности PostgreSQL. PgBouncer Pgpool Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Кэширование в PostgreSQL Узкие места в PostgreSQL Из коробки данный фукционал не доступен (теряем транзакционную чистоту происходящего в базе). Но есть такие средства как: pgmemcache pgpool-II (query cache) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Pgmemcache Кэширование в PostgreSQL Pgmemcache это PostgreSQL API библиотека на основе libmemcached для взаимодействия с memcached. Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Анализирование SQL запросов EXPLAIN [ANALYZE] pgFouine это анализатор log-файлов для PostgreSQL COPY vs INSERT на больших объемах данных Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • EXPLAIN ME! Анализирование SQL запросов Использование полного просмотра таблицы (seq scan) Использование наиболее примитивного способа объединения таблиц (nested loop) EXPLAIN ANALYZE: нет ли больших отличий в предполагаемом количестве записей и реально выбранном? Запрет оптимизатору использовать определённые планы выполнения для более точного анализа (SET enable_seqscan=false) Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • PgFouine Анализирование SQL запросов ТОП SQL запросов по времени выполнения ТОП SQL запросов по частоте выполнения Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • B-деревья Оптимизация структуры БД Васильев О.Ю. PostgreSQL в высоконагруженных проектах
  • Функциональные индексы Оптимизация структуры БД Индекс: 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 в высоконагруженных проектах
  • Частичные индексы (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 в высоконагруженных проектах
  • Вопросы и Ответы Спасибо за внимание! Васильев О.Ю. PostgreSQL в высоконагруженных проектах