Содержание
- 2. 100+ проектов 10 центров разработки более 1000 сотрудников в них «Тензор» – это СБИС миллион клиентов
- 3. СБИС – data-centric application Активно используем PostgreSQL ~400TB «рабочих» данных «в продакшене» с 2008 года уже
- 4. СБИС – data-centric application SQL – декларативный язык вы описываете, что хотите получить СУБД лучше «знает»,
- 5. СБИС – data-centric application SQL – декларативный язык некоторые СУБД принимают «подсказки» PostgreSQL – нет, но…
- 6. СБИС – data-centric application Классика: «А почему у нас тут выполнялось долго?» алгоритмически неэффективный запрос/план неактуальная
- 7. СБИС – data-centric application Классика: «А почему у нас тут выполнялось долго?» алгоритмически неэффективный запрос/план неактуальная
- 8. Получение плана
- 9. Получение плана План запроса – дерево в текстовом представлении каждый элемент – одна из выполняемых операций
- 10. Получение плана EXPLAIN (ANALYZE, BUFFERS) SELECT … https://postgrespro.ru/docs/postgrespro/9.6/using-explain подходит только для локальной отладки
- 11. Получение плана Модуль auto_explain https://postgrespro.ru/docs/postgresql/9.6/auto-explain анализирует все запросы подряд дольше XXXms фиксирует для них планы выполнения
- 12. Получение плана Модуль auto_explain
- 13. Получение плана Модуль auto_explain
- 14. Получение плана Логи и план текстом – ненаглядно: узел содержит сумму по ресурсам поддерева время необходимо
- 15. Получение плана Логи и план текстом – ненаглядно: узел содержит сумму по ресурсам поддерева время необходимо
- 16. Получение плана Логи и план текстом – ненаглядно: узел содержит сумму по ресурсам поддерева время необходимо
- 17. Визуализация плана
- 18. Визуализация плана explain.depesz.com
- 19. Визуализация плана explain.depesz.com – pro «собственное» время каждого узла отклонение от статистически-плановых rows количество повторов каждого
- 20. Визуализация плана explain.depesz.com – contra требует copy&paste планов из лога нет анализа ресурсов (buffers) код на
- 21. Визуализация плана explain.depesz.com – ошибки анализа CTE Scan
- 22. Визуализация плана explain.sbis.ru ура! мы пишем свое! Node.JS + Express + Twitter Bootstrap + D3.js прототип
- 23. Визуализация плана explain.sbis.ru собственный парсер плана корректный анализ CTE Scan анализ распределения ресурсов (buffers) наглядность, подсветка
- 24. Визуализация плана explain.sbis.ru – полный план
- 25. Визуализация плана explain.sbis.ru – сокращенный план (шаблон)
- 26. Визуализация плана explain.sbis.ru – распределение затрат времени
- 27. Визуализация плана explain.sbis.ru – распределение затрат времени
- 28. Визуализация плана explain.sbis.ru – «грабли» проблемы округления 0.001ms × (loops=1000) = 0.95ms .. 1.05ms распределение ресурсов
- 29. Визуализация плана explain.sbis.ru – «грабли» WITH cl AS ( TABLE pg_class ) (TABLE cl LIMIT 1)
- 30. Визуализация плана explain.sbis.ru – «грабли»
- 31. Визуализация плана explain.sbis.ru – дерево выполнения
- 32. Визуализация плана explain.sbis.ru – дерево выполнения
- 33. Визуализация плана explain.sbis.ru – дерево выполнения
- 34. Визуализация плана explain.sbis.ru «Теперь, Нео, ты знаешь кунг-фу»
- 35. Консолидация логов
- 36. Консолидация логов «Копипаста» – плохо 100+ серверов 1000+ разработчиков
- 37. коллектор SSH port forward + psql SSH connection (ключ) tail -F SELECT * FROM pg_stat_activity; Консолидация
- 38. tail -F Консолидация логов COPY … FROM STDIN
- 39. Консолидация логов 100+ серверов, 50Kqps, 100-150GB/день секционирование по дням (ждем 10.0!) очень-очень быстрый «потоковый» COPY отказались
- 40. Консолидация логов Отказались от триггеров нет ссылочной целостности (нет FK и их проверки) агрегация и хэширование
- 41. коллектор COPY plan FROM STDIN COPY query FROM STDIN COPY error FROM STDIN COPY planagg FROM
- 42. Консолидация логов «Потоковый» COPY всегда открыт COPY-канал/пул на таблицу «переоткрывается» раз в XXXms для закрытия TX
- 43. Консолидация логов «Потоковый» COPY таблицы-словари триггер BEFORE INSERT 9.5+: INSERT … ON CONFLICT DO NOTHING
- 44. Консолидация логов «Потоковый» COPY тогда: 4K write ops -> 1K write ops (в 4 раза!) сейчас:
- 45. Понимаем проблемы
- 46. Понимаем проблемы 100+ серверов, 50Kqps, 100-150GB/день миллионы планов за сутки
- 47. Понимаем проблемы 100+ серверов, 50Kqps, 100-150GB/день миллионы планов за сутки
- 48. Понимаем проблемы 100+ серверов, 50Kqps, 100-150GB/день миллионы планов за сутки
- 49. Понимаем проблемы 100+ серверов, 50Kqps, 100-150GB/день кто? откуда этот запрос где? что за сервер, база как?
- 50. Понимаем проблемы «Хозяин» у каждого запроса SET application_name = ' : ' страдаем от ограничения в
- 51. Понимаем проблемы «Хозяин» у каждого запроса log_line_prefix = ' %m [%p:%v] [%d] %r %a' https://postgrespro.ru/docs/postgrespro/9.6/runtime-config-logging
- 52. Понимаем проблемы «Хозяин» у каждого запроса
- 53. Понимаем проблемы Модель анализа экземпляр PostgreSQL (хост:порт), день шаблон, приложение/метод, узел плана
- 54. Понимаем проблемы От планов – к шаблонам уменьшение количества анализируемых объектов вычленение общих паттернов поведения
- 55. Понимаем проблемы Разрезы анализа планов количество фактов по шаблону/методу суммарное и среднее время количество ресурсов (buffers
- 56. Понимаем проблемы
- 57. Понимаем проблемы
- 58. Понимаем проблемы Разрезы анализа узлов Seq Scan, Index [Only] Scan, Bitmap (Index|Heap) Scan количество фактов/шаблонов по
- 59. Понимаем проблемы
- 60. … и устраняем причины
- 62. Скачать презентацию