30
Производительность PostgreSQL Николай Самохвалов http://postgresmen.ru

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

  • Upload
    ontico

  • View
    1.158

  • Download
    4

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 20081006 Highload2008 Postgresql самохвалов

Производительность PostgreSQL

Николай Самохваловhttp://postgresmen.ru

Page 2: 20081006 Highload2008 Postgresql самохвалов

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

PostgreSQL

• открытый исходный код;• BSD-лицензия;• надёжность, предсказуемость, ACID — главное;• высокое качество кода;

Page 3: 20081006 Highload2008 Postgresql самохвалов

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

PostgreSQL• хорошая поддержка:

• сообщество,• коммерческая;

• прозрачность процесса разработки:• http://wiki.postgresql.org/wiki/Development_information;

• большое количество проектов-спутников:• http://wiki.postgresmen.ru/index.php/Проекты-спутники_PostgreSQL;

email: pgsql­ru­[email protected][email protected]

web: http://postgresmen.ru

Page 4: 20081006 Highload2008 Postgresql самохвалов

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

PostgreSQL• богатые возможности:

• сравнение в wikipedia (англ.);• производительность:

• индексы,• «фичи», параметры настройки,• надёжная производительность;

Фото: tika­online.de

Page 5: 20081006 Highload2008 Postgresql самохвалов

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

PostgreSQL• масштабируемость:

• партицирование таблиц,• M-S, M-M репликация,• «шардинг», кластеризация

• PL/Proxy, GridSQL.

Фото: tika­online.de

Page 6: 20081006 Highload2008 Postgresql самохвалов

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

Производительность

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

Page 7: 20081006 Highload2008 Postgresql самохвалов

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

Настройка

Диски, RAID, ОС, ФС, postgresql.conf

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

Page 8: 20081006 Highload2008 Postgresql самохвалов

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

Настройка С чего начать?

Page 9: 20081006 Highload2008 Postgresql самохвалов

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

Где жмёт?

+ расширения

Page 10: 20081006 Highload2008 Postgresql самохвалов

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

Работа с памятьюЕсли не понимаете этого – 

ничего не выйдет!

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

Page 11: 20081006 Highload2008 Postgresql самохвалов

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

Мониторинг — главный друг DBA

Переход 8.2   8.3→

Page 12: 20081006 Highload2008 Postgresql самохвалов

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

Мониторинг — главный друг DBA

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

Page 13: 20081006 Highload2008 Postgresql самохвалов

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

Мониторинг — главный друг DBA

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

Page 14: 20081006 Highload2008 Postgresql самохвалов

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

Мониторинг — главный друг DBA

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

* FreeBSD node

Page 15: 20081006 Highload2008 Postgresql самохвалов

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)

Почитать на русском: коротко, подробнее

Page 16: 20081006 Highload2008 Postgresql самохвалов

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

Настройка: о чём помнитьСовет №2: используйте PgBouncer

Page 17: 20081006 Highload2008 Postgresql самохвалов

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;

Page 18: 20081006 Highload2008 Postgresql самохвалов

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

Настройка: о чём помнитьСовет №3: следим за «здоровьем»

SELECT datname, CASE WHEN blks_read = 0 THEN 0 ELSE blks_hit / blks_read END AS ratio FROM pg_stat_database;

SELECT indexrelname, idx_tup_read, idx_tup_fetch, (idx_tup_read - idx_tup_fetch), CASE WHEN idx_tup_read = 0 THEN 0 ELSE (idx_tup_read::float4 -idx_tup_fetch) / idx_tup_read END as rFROM pg_stat_user_indexesORDER BY r desc;... и т.д.

Настраиваем предупреждения в системе мониторинга и когда надо – реагируем(перенастройка, чистка, пересоздание индексов и т.д.)

Фото: tika­online.de

Page 19: 20081006 Highload2008 Postgresql самохвалов

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

Разработка

Схема БД, SQL-запросы, индексы, триггеры, масштабирование, асинхронность

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

Page 20: 20081006 Highload2008 Postgresql самохвалов

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

Разработка С чего начать?

Точно!

Page 21: 20081006 Highload2008 Postgresql самохвалов

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

Разработка: анализ1. Понимаем, что происходит «внутри»:

● размеры БД, таблиц, индексов,● статистика использования (индексов, hit/read),● EXPLAIN ANALYZE;

2. PgFouine

Page 22: 20081006 Highload2008 Postgresql самохвалов

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

PgFouine● выявляет самые медленные [обобщённые] запросы:

● см. вкладку Queries that took up the most time (N),● показывает распределение по часам,● если > 1h — нужна оптимизация!

● определяет, на что потрачено время СУБД и когда;

Page 23: 20081006 Highload2008 Postgresql самохвалов

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

PgFouine● показывает профиль нагрузки

● у вас тоже 80-90% —чтение? ;-)● агрегирует и SQL-ошибки;● рисует TPS-графики

Page 24: 20081006 Highload2008 Postgresql самохвалов

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

PgFouine● анализ VACUUM VERBOSE

● FSM● статистика по базам/схемам, таблицам

● Tsung: симуляция нагрузки

Page 25: 20081006 Highload2008 Postgresql самохвалов

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

PgFouinepostgresql.conf:

log_min_duration_statement = 100ms

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

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

pgFouine— на PHP (sic!). Осторожно, «любит» RAM.

Page 26: 20081006 Highload2008 Postgresql самохвалов

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;

Page 27: 20081006 Highload2008 Postgresql самохвалов

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 ...;

Page 28: 20081006 Highload2008 Postgresql самохвалов

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

Разработка: о чём помнитьСовет №2: избегайте заведомо медленных операций.

Подробнее о списках (постраничный вывод информации):● Зло №1: медленный count() («всего найдено: 1000000 человек»):

— используем приближённые значения (парсим вывод EXPLAIN SELECT ...);

● Зло №2: большие значения OFFSET:— меньше сортировок, больше фильтров (учимся у GMail),— возможно, ограничиваем максимальный номер страницы.

Page 29: 20081006 Highload2008 Postgresql самохвалов

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

Разработка: о чём помнитьСовет №3: подумайте о масштабировании раньше

● избегайте чрезмерно сложных SQL-запросов;● «Разделяй и властвуй»; ● изучите решения для масштабирования:

● Slony-I (масштабируем чтение),● SkyTools, PL/Proxy,● GridSQL.

Завтра: посетите доклады!● Аско Оя — о решениях Skype;● Гевин Рой — об опыте myYearbook.com.

Page 30: 20081006 Highload2008 Postgresql самохвалов

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

30 минут — это очень мало.

вопросы?

а) прямо сейчас;б) сегодня вечером в 19:00 на встрече PostgreSQL-сообщества;в) в любое время.

email: pgsql­ru­[email protected][email protected]

web: http://postgresmen.ru