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

1,004 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,004
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Производительность PostgreSQL Николай Самохвалов http://postgresmen.ru
  2. 2. PostgreSQL • открытый исходный код; • BSD-лицензия; • надёжность, предсказуемость, ACID — главное; • высокое качество кода; http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  3. 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. 4. PostgreSQL • богатые возможности: • сравнение в wikipedia (англ.); • производительность: • индексы, • «фичи», параметры настройки, • надёжная производительность; Фото: tika­online.de http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  5. 5. PostgreSQL • масштабируемость: • партицирование таблиц, • M-S, M-M репликация, • «шардинг», кластеризация • PL/Proxy, GridSQL. Фото: tika­online.de http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  6. 6. Производительность 1. Настройка 2. Разработка http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  7. 7. Настройка Диски, RAID, ОС, ФС, postgresql.conf С чего начать? (Совет №0) http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  8. 8. Настройка С чего начать? http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  9. 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. 10. Работа с памятью Если не понимаете этого –  ничего не выйдет! PostgreSQL Hardware Performance Tuning by Bruce Momjian (англ.),  мастер­класс на Highload­2007 http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  11. 11. Мониторинг — главный друг DBA Переход 8.2 → 8.3 http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  12. 12. Мониторинг — главный друг DBA Начинаем использовать  pgBouncer (разные проекты) http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  13. 13. Мониторинг — главный друг DBA БД «сидит» в RAM:  наблюдаем только запись на диск http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  14. 14. Мониторинг — главный друг DBA «Тревожный звонок»:  уменьшение объёма кэша ОС → скачок LA * FreeBSD node http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  15. 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. 16. Настройка: о чём помнить Совет №2: используйте PgBouncer http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  17. 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. 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. 19. Разработка Схема БД, SQL-запросы, индексы, триггеры, масштабирование, асинхронность С чего начать? (Совет №0) http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  20. 20. Разработка С чего начать? Точно! http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  21. 21. Разработка: анализ 1. Понимаем, что происходит «внутри»: ● размеры БД, таблиц, индексов, ● статистика использования (индексов, hit/read), ● EXPLAIN ANALYZE; 2. PgFouine http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  22. 22. PgFouine ● выявляет самые медленные [обобщённые] запросы: ● см. вкладку Queries that took up the most time (N), ● показывает распределение по часам, ● если > 1h — нужна оптимизация! ● определяет, на что потрачено время СУБД и когда; http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  23. 23. PgFouine ● показывает профиль нагрузки ● у вас тоже 80-90% —чтение? ;-) ● агрегирует и SQL-ошибки; ● рисует TPS-графики http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  24. 24. PgFouine ● анализ VACUUM VERBOSE ● FSM ● статистика по базам/схемам, таблицам ● Tsung: симуляция нагрузки http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  25. 25. PgFouine postgresql.conf: log_min_duration_statement = 100ms Важно: изменяем значение — меняется картина! Начинаем с 1s, постепенно спускаемся до 100ms pgFouine— на PHP (sic!). Осторожно, «любит» RAM. http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  26. 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. 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. 28. Разработка: о чём помнить Совет №2: избегайте заведомо медленных операций. Подробнее о списках (постраничный вывод информации): ● Зло №1: медленный count() («всего найдено: 1000000 человек»): — используем приближённые значения (парсим вывод EXPLAIN SELECT ...); ● Зло №2: большие значения OFFSET: — меньше сортировок, больше фильтров (учимся у GMail), — возможно, ограничиваем максимальный номер страницы. http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  29. 29. Разработка: о чём помнить Совет №3: подумайте о масштабировании раньше ● избегайте чрезмерно сложных SQL-запросов; ● «Разделяй и властвуй»; ● изучите решения для масштабирования: ● Slony-I (масштабируем чтение), ● SkyTools, PL/Proxy, ● GridSQL. Завтра: посетите доклады! ● Аско Оя — о решениях Skype; ● Гевин Рой — об опыте myYearbook.com. http://samokhvalov.com/files/20081006_highload2008_postgresql.pdf
  30. 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

×