Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Поднимайтесь как можно выше по дереву, собирайте цветы и дарите их близким.
Вас ждут уникальные награды и 22 выгодных промокода!

Пикаджамп

Аркады, Казуальные, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Корреляция + Производительность

С этим тегом используют

Postgresql Субд Статистика Компьютер Мониторинг Игры Видеокарта Производство Все
9 постов сначала свежее
0
kznalp
kznalp
2 месяца назад
Postgres DBA
Серия СУБД PostgreSQL

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример)⁠⁠

Взято с основного технического канала Postgres DBA ( возможны правки и дополнения в исходной статье ).

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Если правильно и вовремя обслуживать - СУБД будет летать !

Постановка задачи

  1. Проанализировать инциденты снижения скорости СУБД.

  2. Установить причины снижения скорости СУБД.

  3. Сформировать список мероприятий для устранения причин снижения скорости СУБД.

  4. Итог.

Шаблон решения задачи

https://dzen.ru/a/Z-4mhu9oFCnB-jp9

Отчетность для анализа

https://dzen.ru/a/Z-6YLjZRni5hLvtD

1.Проанализировать инциденты снижения скорости СУБД

Ожидания и корреляция по инцидентам снижения скорости СУБД

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Фрагмент таблицы инцидентов снижения скорости СУБД

Столбцы таблицы:

  • ID : идентификатор инцидента снижения скорости СУБД

  • START TIME : время начала инцидента

  • FINISH TIME : время окончания инцидента

  • № : порядковый номер

  • IO : количество ожидания типа IO на время начала инцидента

  • IO CORRELATION : коэффициент корреляции между операционной скоростью и ожиданиями IO за отрезок [ START TIME - 1 ЧАС ; START TIME ]

  • LWLock : количество ожидания типа LWLock на время начала инцидента

  • LWLock CORRELATION : коэффициент корреляции между операционной скоростью и ожиданиями LWLock за отрезок [ START TIME - 1 ЧАС ; START TIME ]

Количество ожидания типа IO , LWLock по инцидентам

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - ID инцидента. Ось Y - количество ожидания типа IO на начало инцидента

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - ID инцидента. Ось Y - количество ожидания типа LWLock на начало инцидента

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - ID инцидента. Ось Y - коэффициент корреляции между всеми ожиданиями и ожиданиями типа IO , LWLock на начало инцидента

Особенности инцидентов 34 , 36 :

  1. Коэффициент корреляции между ожиданиями СУБД в целом и ожиданиями типа LWLock больше , чем между ожиданиями СУБД в целом и ожиданиями типа IO.

  2. Количество ожидания типа LWLock меньше чем количество ожидания типа IO.

Графики операционной скорости и ожиданий по инцидентам снижения скорости

Инцидент 34

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения. Ось Y - значение операционной скорости.

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения. Ось Y - количество ожиданий в целом по СУБД.

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения. Ось Y - количество ожиданий типа IO.

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения. Ось Y - количество ожиданий типа LWLock.

Инцидент 36

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения. Ось Y - значение операционной скорости.

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения. Ось Y - количество ожиданий в целом по СУБД.

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения. Ось Y - количество ожиданий типа IO.

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения. Ось Y - количество ожиданий типа LWLock.

Для справки: ожидания типа IO , LWLock по данным отчета "Top wait events" pgpro_pwr

Инцидент 34

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Инцидент 36

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

2. Установить причины снижения скорости СУБД

SQL запросы, имеющие наибольшую долю ожидания заданного типа

Инцидент 34

Ожидания типа IO

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Статистика вызовов и ожидания по запросам имеющим ожидания типа IO

Ожидания типа LWLock

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Статистика вызовов и ожидания по запросам имеющим ожидания типа LWLock

Столбцы таблицы:

  • QUERYID : queryid SQL выражения , из представления pgpro_stats.

  • PGPRO_PWR_QUERYID : шестнадцатеричное значение queryid , для использования в отчетах pgpro_pwr.

  • CALLS : количество выполнений SQL выражения

  • WAITINGS : количество ожиданий

  • WAITINGS TO CALLS : количество ожиданий на одно выполнение

  • WAITINGS PPM : доля(в промилле) ожиданий типа IPC по данному SQL среди всех ожиданий по всем SQL за анализируемый период.

Результат:

Запрос queryid=2092406791392746781 имеет набольшую долю ожидания типа IO и LWLock среди всех запросов имеющих корреляцию ожидания с типом IO, LWLock.

Инцидент 36

Ожидания типа IO

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Статистика вызовов и ожидания по запросам имеющим ожидания типа IO

Ожидания типа LWLock

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Статистика вызовов и ожидания по запросам имеющим ожидания типа LWLock

Столбцы таблицы:

  • QUERYID : queryid SQL выражения , из представления pgpro_stats.

  • PGPRO_PWR_QUERYID : шестнадцатеричное значение queryid , для использования в отчетах pgpro_pwr.

  • CALLS : количество выполнений SQL выражения

  • WAITINGS : количество ожиданий

  • WAITINGS TO CALLS : количество ожиданий на одно выполнение

  • WAITINGS PPM : доля(в промилле) ожиданий типа IPC по данному SQL среди всех ожиданий по всем SQL за анализируемый период.

Результат:

Запрос queryid=2092406791392746781 имеет набольшую долю ожидания типа IO и LWLock среди всех запросов имеющих корреляцию ожидания с типом IO, LWLock.

Главная причина снижения скорости СУБД

Запрос queryid=2092406791392746781 имеет набольшую долю ожидания типа IO и LWLock среди всех запросов имеющих корреляцию ожидания с типом IO, LWLock.

Текст запроса

Доступен в pgpro_pwr

План выполнения запроса

Доступен в pgpro_pwr

События ожидания при выполнении запроса 2092406791392746781

Инцидент 34

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Статистика выполнения и событий ожидания по запросу 2092406791392746781

Столбцы таблицы:

  • timestamp : точка времени сбора статистических данных уровня SQL.

  • datname : База данных, в которой выполнялся SQL запрос.

  • rolname : Роль, под которой выполнялся SQL запрос.

  • CALLS : Количество выполнений запроса .

  • WAITINGS : Количество ожиданий типа IO , LWLock .

  • WAITINGS TO CALLS : количество ожиданий на одно выполнение.

  • WAIT_EVENTS : события ожидания wait_event , возникающие при выполнении SQL запроса .

  • SQL : текст SQL запроса (не приведен).

События ожидания возникающие при выполнении SQL запроса:

  • IO / DSMFillZeroWrite : Ожидание заполнения нулями файла, применяемого для поддержки динамической общей памяти.

  • LWLock / ParallelHashJoin : Ожидание синхронизации рабочих процессов в процессе выполнения узла плана Parallel Hash Join.

Инцидент 36

Анализ производительности СУБД PostgreSQL с использованием PG_HAZEL (практический пример) Субд, Postgresql, Мониторинг, Производительность, Корреляция, Длиннопост

Статистика выполнения и событий ожидания по запросу 2092406791392746781

Cтолбцы таблицы:

  • timestamp : точка времени сбора статистических данных уровня SQL.

  • datname : База данных, в которой выполнялся SQL запрос.

  • rolname : Роль, под которой выполнялся SQL запрос.

  • CALLS : Количество выполнений запроса .

  • WAITINGS : Количество ожиданий типа IO , LWLock .

  • WAITINGS TO CALLS : количество ожиданий на одно выполнение.

  • WAIT_EVENTS : события ожидания wait_event , возникающие при выполнении SQL запроса .

  • SQL : текст SQL запроса (не приведен).

События ожидания возникающие при выполнении SQL запроса:

  • IO / DSMFillZeroWrite : Ожидание заполнения нулями файла, применяемого для поддержки динамической общей памяти.

  • LWLock / ParallelHashJoin : Ожидание синхронизации рабочих процессов в процессе выполнения узла плана Parallel Hash Join.

  • LWLock / BufferMapping : Ожидание при связывании блока данных с буфером в пуле буферов.

  • LWLock / ProcArray : Ожидание при обращении к общим структурам данных в рамках процесса (например, при получении снимка или чтении идентификатора транзакции в сеансе).

3. Cписок мероприятий для устранения причин снижения скорости СУБД .

Мероприятия для снижения ожиданий DSMFillZeroWrite

События ожидания DSMFillZeroWrite в PostgreSQL связаны с операциями записи в разделяемую память (shared memory), где необходимо заполнить область нулями перед использованием.

Это может происходить при работе с большими объектами или при высокой нагрузке на систему.

Чтобы снизить количество таких событий, можно рассмотреть следующие шаги:

1. Оптимизация запросов и транзакций:

- Убедитесь, что ваши запросы оптимизированы и не выполняют избыточных операций.

- Сократите длительность транзакций, чтобы уменьшить нагрузку на разделяемую память.

2. Настройка параметров конфигурации:

- Увеличьте размер разделяемой памяти (shared_buffers), чтобы уменьшить частоту операций записи в разделяемую память.

- Настройте параметры, связанные с кэшированием и буферизацией, чтобы уменьшить количество операций записи.

3. Оптимизация использования разделяемой памяти:

- Убедитесь, что ваши приложения и расширения эффективно используют разделяемую память.

- Избегайте создания большого количества временных объектов, которые могут приводить к увеличению операций записи в разделяемую память.

Мероприятия для снижения ожиданий ParallelHashJoin

Ожидания ParallelHashJoin могут возникать из-за того, что PostgreSQL использует параллельные запросы для выполнения операций, таких как Hash Join. Это может привести к увеличению количества ожиданий, особенно если у вас много одновременных запросов или ограниченные ресурсы.

1. Отключить параллельные запросы:

- Вы можете отключить параллельные запросы, установив параметр max_parallel_workers_per_gather в 0. Это отключит использование параллельных рабочих процессов для операций, таких как Hash Join.

2. Оптимизировать индексы:

- Убедитесь, что у вас есть правильные индексы на таблицах, участвующих в запросе. Индексы могут помочь ускорить выполнение запросов и уменьшить необходимость в параллельных операциях.

3. Анализ и вакуумизация таблиц:

- Периодически выполняйте команды ANALYZE и VACUUM для обновления статистики и очистки мертвых строк. Это поможет оптимизатору запросов выбрать более эффективные планы выполнения.

4. Настройка параметров планировщика:

- Настройте параметры, такие как random_page_cost и cpu_tuple_cost, чтобы повлиять на выбор плана выполнения запроса. Например, уменьшение random_page_cost может сделать индексные сканирования более привлекательными.

5. Использование правильных операторов JOIN:

- Попробуйте использовать другие типы соединений, такие как Nested Loop или Merge Join, если они подходят для вашего запроса. Вы можете временно отключить Hash Join, установив параметр enable_hashjoin в off.

6. Оптимизация запросов:

- Проверьте, можно ли оптимизировать сами запросы, например, добавив дополнительные условия в WHERE-clause или используя более эффективные подзапросы.

Примеры команд для настройки параметров:

-- Отключить параллельные запросы

SET max_parallel_workers_per_gather = 0;

-- Отключить Hash Join

SET enable_hashjoin = off;

-- Установить параметры планировщика

SET random_page_cost = 1.1;

SET cpu_tuple_cost = 0.01;

Мероприятия для снижения ожиданий BufferMapping

Ожидания на BufferMapping в PostgreSQL могут возникать из-за интенсивных операций чтения, когда база данных часто обращается к данным на диске вместо кэша. Это может происходить, когда рабочий набор данных превышает доступную память, что приводит к частым операциям ввода-вывода (I/O).

1. Увеличение shared_buffers:

- Увеличение параметра shared_buffers может помочь уменьшить количество операций ввода-вывода, так как больше данных будет храниться в памяти.

2. Оптимизация запросов:

- Проверьте и оптимизируйте ваши запросы, чтобы уменьшить количество операций ввода-вывода. Используйте индексы и другие методы оптимизации для уменьшения количества данных, которые нужно считывать из диска.

3. Увеличение effective_cache_size:

- Параметр effective_cache_size помогает PostgreSQL лучше оценивать доступную память для кэширования данных. Увеличение этого параметра может улучшить планирование запросов.

4. Увеличение work_mem и maintenance_work_mem:

- Увеличение параметров work_mem и maintenance_work_mem может помочь уменьшить количество операций ввода-вывода, особенно при выполнении операций сортировки и хранения данных.

5. Анализ и оптимизация индексов:

- Убедитесь, что у вас есть правильные индексы для ваших запросов. Индексы могут значительно уменьшить количество операций ввода-вывода.

6. Обновление аппаратного обеспечения:

- Если возможно, обновите аппаратное обеспечение, особенно увеличьте объем оперативной памяти и используйте более быстрые диски (например, SSD).

7. Распределение нагрузки:

- Анализируйте и оптимизируйте распределение нагрузки между сессиями, чтобы уменьшить конкуренцию за ресурсы.

Мероприятия для снижения ожиданий ProcArrayLock

Задержки, связанные с блокировкой ProcArrayLock, могут возникать из-за интенсивной активности рабочих процессов, которые создают конкуренцию за доступ к ProcArray. Это особенно актуально при выполнении параллельных запросов и операций, таких как walsender.

Для уменьшения задержек ProcArray можно рассмотреть следующие шаги:

1. Оптимизация рабочих процессов:

- Уменьшите количество одновременно выполняемых рабочих процессов, чтобы снизить нагрузку на ProcArrayLock.

- Оптимизируйте параллельные запросы, чтобы уменьшить их длительность и уменьшить время блокировки.

2. Настройка параметров конфигурации:

- Уменьшите значение параметра max_standby_streaming_delay, чтобы уменьшить задержку репликации.

- Настройте параметры, связанные с параллелизмом, такие как max_parallel_workers_per_gather и max_worker_processes, чтобы управлять количеством рабочих процессов.

3. Оптимизация хранения данных:

- Убедитесь, что у вас используется оптимальное хранилище данных, например, AWS EBS GP3, для уменьшения задержек ввода-вывода.

4. Итог

Использование корреляционного анализа ожиданий с помощью оперативно-тактического комплекса pg_hazel позволяет резко сократить время на поиск корневой причины снижения скорости СУБД и оперативно предоставить мероприятия для устранения причин.

Показать полностью 20
[моё] Субд Postgresql Мониторинг Производительность Корреляция Длиннопост
2
kznalp
kznalp
3 месяца назад
Postgres DBA
Серия СУБД PostgreSQL

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение⁠⁠

Взято с основного технического канала Postgres DBA ( возможны правки и дополнения в исходной статье ).

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

Хирург и DBA это холодная голова и горячее сердце.

Начало :

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск потенциально проблемных SQL запросов при продуктивной нагрузке .

Продолжение тестирования методологии использования корреляционного анализа для поиска проблемных SQL запросов при продуктивной нагрузке на СУБД .

Постановка задачи:

Проанализировать причины снижения скорости СУБД и найти проблемные запросы:

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

Дашбоард мониторинга производительности СУБД

Операционная скорость СУБД - снижается.

Ожидания СУБД - растут.

Метрика относительной доли ожиданий - исключена из анализа.

Словарь терминов , используемых при корреляционном анализе.

Операционная скорость на уровне кластера

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения Ось Y - значение операционной скорости

Ожидания на уровне кластера

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения Ось Y - общее количество ожиданий СУБД

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения Ось Y - количество ожиданий типа IO

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения Ось Y - количество ожиданий типа LWLock

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения Ось Y - количество ожиданий типа IPC

Корреляционный анализ ожиданий и определение потенциально проблемных SQL запросов

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

Таблица коэффициентов корреляции

  1. Сильная отрицательная корреляция между скоростью и ожиданиями .

  2. Наиболее сильная положительная корреляция между всеми ожиданиями и ожиданиями типа IPC.

  3. Сильная положительная корреляция между всеми ожиданиями и ожиданиями типа LWLock , IO .

Корреляционный анализ на уровне запросов SQL по ожиданию типа IPC

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

TOP-10 таблицы коэффициентов корреляции для SQL запросов с ожиданиями типа IPC

Столбцы таблицы

  • QUERYID : id SQL запроса

  • PGPRO_WR_QUERYID : HEX значение queryid , для использования в отчетах pgpro_pwr.

  • CORRELATION : коэффициент корреляции между ожиданиями типа IPC по всем SQL запросам и ожиданиям типа IPC по конкретному запросу.

  • CALLS : общее количество выполнений запроса за анализируемый период.

  • WAITINGS : Ожидания типа IPC по конкретному запросу.

  • WAITINGS TO CALL : Отношение количество ожиданий к количествe выполнений. Среднее количество ожидания за одно выполнение.

  • WAITINGS PCT : Относительная доля (промилле) количества ожиданий типа IPC для данного SQL запроса в общем количества ожиданий типа IPC по всем запросам.

Таблица отсортирована по столбцам "WAITINGS PCT" DESC , "WAITINGS TO CALL" DESC , "CORRELATION" DESC .

Потенциально проблемный запрос - 3985919093425059746

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

История выполнений и ожиданий запроса 3985919093425059746

События ожидания:

  • BgWorkerShutdown Ожидание завершения фонового рабочего процесса.

  • ParallelFinish Ожидание завершения вычислений параллельными рабочими процессами.

  • ExecuteGather Ожидание активности дочернего процесса при выполнении узла плана Gather.

Корреляционный анализ на уровне запросов SQL по ожиданию типа LWLock

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

TOP-10 таблицы коэффициентов корреляции для SQL запросов с ожиданиями типа LWLock.

Столбцы таблицы

  • QUERYID : id SQL запроса

  • PGPRO_WR_QUERYID : HEX значение queryid , для использования в отчетах pgpro_pwr.

  • CORRELATION : коэффициент корреляции между ожиданиями типа LWLock по всем SQL запросам и ожиданиям типа LWLock по конкретному запросу.

  • CALLS : общее количество выполнений запроса за анализируемый период.

  • WAITINGS : Ожидания типа LWLock по конкретному запросу.

  • WAITINGS TO CALL : Отношение количество ожиданий к количествe выполнений. Среднее количество ожидания за одно выполнение.

  • WAITINGS PCT : Относительная доля (промилле) количества ожиданий типа LWLock для данного SQL запроса в общем количества ожиданий типа IPC по всем запросам.

Таблица отсортирована по столбцам "WAITINGS PCT" DESC , "WAITINGS TO CALL" DESC , "CORRELATION" DESC .

Потенциально проблемный запрос - 2092406791392746781

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

История выполнений и ожиданий запроса 2092406791392746781

События ожидания:

  • ParallelHashJoin Ожидание синхронизации рабочих процессов в процессе выполнения узла плана Parallel Hash Join.

Корреляционный анализ на уровне запросов SQL по ожиданию типа IO

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

TOP-10 таблицы коэффициентов корреляции для SQL запросов с ожиданиями типа IO

Столбцы таблицы

  • QUERYID : id SQL запроса

  • PGPRO_WR_QUERYID : HEX значение queryid , для использования в отчетах pgpro_pwr.

  • CORRELATION : коэффициент корреляции между ожиданиями типа IO по всем SQL запросам и ожиданиям типа IO по конкретному запросу.

  • CALLS : общее количество выполнений запроса за анализируемый период.

  • WAITINGS : Ожидания типа IO по конкретному запросу.

  • WAITINGS TO CALL : Отношение количество ожиданий к количествe выполнений. Среднее количество ожидания за одно выполнение.

  • WAITINGS PCT : Относительная доля (промилле) количества ожиданий типа IO для данного SQL запроса в общем количества ожиданий типа IPC по всем запросам.

Таблица отсортирована по столбцам "WAITINGS PCT" DESC , "WAITINGS TO CALL" DESC , "CORRELATION" DESC .

Потенциально проблемный запрос - 5680299967307342186

Корреляционный анализ ожиданий СУБД PostgreSQL - продолжение Субд, Postgresql, Производительность, Корреляция, Длиннопост

История выполнений и ожиданий запроса 5680299967307342186

События ожидания:

  • DataFileExtend Ожидание расширения файла данных отношения.

  • DataFileRead Ожидание чтения из файла данных отношения.

Итог

Корреляционный анализ ожиданий СУБД может быть использован для поиска проблемных SQL запросов и первоначального анализа проблемы и путей оптимизации SQL запросов.

Показать полностью 14
[моё] Субд Postgresql Производительность Корреляция Длиннопост
0
2
kznalp
kznalp
3 месяца назад
Postgres DBA
Серия СУБД PostgreSQL

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке⁠⁠

Взято с основного технического канала Postgres DBA ( возможны правки и дополнения в исходной статье ).

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке Субд, Postgresql, Производительность, Корреляция, Длиннопост

Работа DBA в чем то , очень отдаленно, напоминает работу хирурга.

Постановка задачи

Проанализировать причины снижения скорости СУБД и найти проблемные запросы

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке Субд, Postgresql, Производительность, Корреляция, Длиннопост

Дашбоард мониторинга производительности СУБД

Операционная скорость СУБД - снижается.

Ожидания СУБД - растут.

Порядок проведения корреляционного анализа

Операционная скорость на уровне кластера

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке Субд, Postgresql, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения Ось Y - значение операционной скорости

Ожидания на уровне кластера

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке Субд, Postgresql, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения Ось Y - количество ожиданий СУБД

Корреляционный анализ на уровне кластера

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке Субд, Postgresql, Производительность, Корреляция, Длиннопост

Таблица коэффициентов корреляции

  1. Средняя отрицательная корреляция между операционной скоростью и ожиданиями.

  2. Тип ожидания имеющий наибольшую корреляция с общим количеством ожиданий - IO.

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке Субд, Postgresql, Производительность, Корреляция, Длиннопост

Ось X - точка наблюдения Ось Y - количество ожиданий типа IO

Статистика выполнений и ожиданий по отдельным SQL запросам по типу ожидания IO

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке Субд, Postgresql, Производительность, Корреляция, Длиннопост

Таблица статистических данных выполнения и ожиданий по отдельным запросам.

Столбцы таблицы

  • QUERYID : id SQL запроса

  • CORRELATION : коэффициент корреляции между ожиданиями типа IO по всем SQL запросам и ожиданиям типа IO по конкретному запросу.

  • CALLS : общее количество выполнений запроса за анализируемый период.

  • WAITINGS : Ожидания типа IO по конкретному запросу.

  • WAITINGS TO CALL : Отношение количество ожиданий к количество выполнений. Среднее количество ожидания за одно выполнение.

Таблица отсортирована по столбцам QUERYID / WAITINGS TO CALL .

Статистика выполнений и ожиданий по выбранным SQL-запросам

-7843470278038126227

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке Субд, Postgresql, Производительность, Корреляция, Длиннопост

Статистика выполнений и ожиданий для queryid =-7843470278038126227

События ожидания:

  • DataFilePrefetch: Ожидание асинхронной предвыборки из файла данных отношения.

  • DataFileRead : Ожидание чтения из файла данных отношения.

  • DataFileWrite : Ожидание записи в файл данных отношения.

  • WALSync : Ожидание помещения файла WAL в надёжное хранилище.

  • WALWrite : Ожидание записи в файл WAL.

Результат анализа по запросу -7843470278038126227:

Выполнение процедуры ANALYZE во время продуктивной нагрузки на СУБД приводит к ожиданиям. Необходимо пересмотреть порядок проведения регламентных работ на СУБД.

-8198400089192679786

Корреляционный анализ ожиданий СУБД PostgreSQL - поиск проблемных SQL запросов при продуктивной нагрузке Субд, Postgresql, Производительность, Корреляция, Длиннопост

Статистика выполнений и ожиданий для queryid =-8198400089192679786

События ожидания:

  • DataFileRead : Ожидание чтения из файла данных отношения.

Результат анализа по запросу -8198400089192679786

Необходимо провести анализ плана выполнения с целью снижения операций дискового чтения.

Итог

Использование корреляционного анализа позволяет определить степень влияния потенциально проблемных SQL запросов на общую скорость и ожидания СУБД.

Показать полностью 9
[моё] Субд Postgresql Производительность Корреляция Длиннопост
0
0
kznalp
kznalp
3 месяца назад
Postgres DBA
Серия СУБД PostgreSQL

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов⁠⁠

Взято с основного технического канала Postgres DBA

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

Результат известен заранее. Но детали , могут быть интересны.

Задача эксперимента

Определить характерные события ожиданий СУБД вызванные отсутствием индекса в таблице.

Характер нагрузки

Нагрузка создается пользовательским сценарием pgbench.

Сценарий "OLTP" - SELECT + UPDATE.

1)UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;

2)SELECT abalance FROM pgbench_accounts WHERE aid = :aid;

3)UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;

4) UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;

Рост количества подключений pgbench - экспоненциально от 6 до 111.

При проведении сравнительного эксперимента ,таблица pgbench_accounts создается без ограничения первичного ключа.

Версия СУБД и ресурсы ВМ

Postgres Pro (enterprise certified) 15.8.1 on x86_64-pc-linux-gnu, compiled by gcc (AstraLinuxSE 8.3.0-6) 8.3.0, 64-bit

Operating System: Astra Linux

Kernel: Linux 6.1.90-1-generic

processor  : 0

  • model name  : Intel Xeon Processor (Skylake, IBRS, no TSX)

  • cpu MHz  : 2693.670

  • cpu cores  : 1

processor  : 1

  • model name  : Intel Xeon Processor (Skylake, IBRS, no TSX)

  • cpu MHz  : 2693.670

  • cpu cores  : 1

RAM: 1GB

Словарь терминов, используемых при анализе

https://dzen.ru/a/Z7h6qwE1CT3q-E73?share_to=link

Результаты нагрузочного тестирования аналогичного сценария с использованием индекса

https://dzen.ru/a/Z7gXkYKsy2syEMGG?share_to=link

Сравнительные результаты экспериментов

Статистические показатели операционной скорости.

По оси X - точка наблюдения. По оси Y - значение операционной скорости.

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График операционной скорости при использовании индекса.

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График операционной скорости без использования индекса.

Сравнительный анализ операционной скорости

  1. Без индекса скорость существенно ниже

  2. График изменения скорости , без использования индекса, носит ступенчатый характер.

Ожидания

По оси X - точка наблюдения. По оси Y - количество ожиданий .

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График количества ожиданий при использовании индекса

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График количества ожиданий без использования индекса

Сравнительный анализ ожиданий

  1. Характер графика практически не изменился

  2. Абсолютные значение количества ожиданий без использования индекса незначительно ниже.

WAITING RATIO

Относительная доля(%), времени ожиданий от времени работы базы данных.

По оси X - точка наблюдения. По оси Y - относительная доля ожиданий .

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График относительной доли ожиданий при использовании индекса.

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График относительной доли ожиданий без использования индекса.

Сравнительный анализ относительной доли ожиданий

  1. Характер графика практически не изменился

WAIT_EVENT_TYPE (Типы ожиданий)

Минимальные и максимальные количества ожиданий при использовании индекса

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

Минимальные и максимальные количества ожиданий без использования индекса

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

Анализ WAIT_EVENT_TYPE

  1. Характер ожидания , при проведении нагрузочного тестирования без использования индексов принципиально изменился.

  2. К ожиданиям тяжеловесных и легковесных блокировок добавились ожидания подсистемы ввода вывода и ожидания взаимодействия с серверными процессами.

Ожидания Lock

По оси X - точка наблюдения. По оси Y - количество ожиданий типа Lock.

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График количество ожидания при использовании индекса.

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График количество ожидания без использования индекса.

Ожидания LWLock

По оси X - точка наблюдения. По оси Y - количество ожиданий типа LWLock.

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График количество ожидания при использовании индекса.

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График количество ожидания без использования индекса.

Сравнительный анализ ожиданий Lock , LWLock

  1. Характер графиков и количества ожиданий практически не изменились и не зависят от отсутствия индекса.

Ожидания IO

По оси X - точка наблюдения. По оси Y - количество ожиданий типа IO.

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График количество ожидания без использования индекса.

Ожидания IPC

По оси X - точка наблюдения. По оси Y - количество ожиданий типа IPC.

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

График количество ожидания без использования индекса.

Сравнительный общий корреляционный анализ ожиданий

Основная гипотеза корреляционного анализа ожиданий СУБД

https://dzen.ru/a/Z6zzzMzWGmYuR-bG?share_to=link

Корреляция операционной скорости и ожиданий и событий ожидания при использовании индекса

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

Корреляция операционной скорости и ожиданий и событий ожидания без использовании индекса

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

Коэффициенты корреляции

  • SPEED CORR: коэффициент корреляции между количеством активных сессий к БД и операционной скоростью.

  • BUFFERPIN CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа Bufferpin.

  • EXTENSION CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа Extension.

  • IO CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа IO.

  • IPC CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа IPC.

  • LOCK CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа Lock.

  • LWLOCK CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа LWLock.

Сравнительный анализ корреляций

  1. Коэффициент корреляции с событиями ожидания тяжеловесных и легковесных блокировок практически не изменился.

  2. При проведении нагрузочного тестирования без использования индексов, возникает сильная отрицательная корреляция с ожиданиями взаимодействия с другим процессом и слабая отрицательная корреляция с ожиданиями подсистемы ввода-вывода.

Корреляция между типом ожидания (wait_event_type) и событием ожидания(wait_event) - при использовании индекса

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

Средняя и очень сильная корреляция с событиями ожидания:

  1. Lock / transactionid: Ожидание завершения транзакции.

  2. Lock / tuple: Ожидание при запросе блокировки для кортежа.

  3. LWLock / LockManager: Ожидание при чтении или изменении информации о «тяжёлых» блокировках.

  4. LWLock / ProcArray: Ожидание при обращении к общим структурам данных в рамках процесса (например, при получении снимка или чтении идентификатора транзакции в сеансе).

  5. LWLock / BufferContent : Ожидание при обращении к странице данных в памяти.

  6. LWLock / WALWrite: Ожидание при записи буферов WAL на диск.

Корреляция между типом ожидания (wait_event_type) и событием ожидания(wait_event) - без использования индекса

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

От слабой до сильной корреляции с событиями ожидания:

  1. IO / RelationMapSync Ожидание помещения файла отображений отношений в надёжное хранилище.

  2. IO / DSMFillZeroWrite Ожидание заполнения нулями файла, применяемого для поддержки динамической общей памяти.

  3. IO / DataFileRead Ожидание чтения из файла данных отношения.

  4. IO / DataFileImmediateSync Ожидание немедленной синхронизации файла данных отношения с надёжным хранилищем.

  5. IPC / BufferIO Ожидание завершения буферного ввода/вывода.

  6. IPC / ParallelFinish Ожидание завершения вычислений параллельными рабочими процессами.

  7. IPC / BgWorkerShutdown Ожидание завершения фонового рабочего процесса.

  8. Lock / transactionid: Ожидание завершения транзакции.

  9. Lock / tuple: Ожидание при запросе блокировки для кортежа.

  10. LWLock / BufferMapping Ожидание при связывании блока данных с буфером в пуле буферов.

  11. LWLock / LockManager: Ожидание при чтении или изменении информации о «тяжёлых» блокировках.

  12. LWLock / BufferContent : Ожидание при обращении к странице данных в памяти.

  13. LWLock / SyncScan Ожидание при выборе начального положения для синхронизированного сканирования таблицы.

  14. LWLock / ProcArray: Ожидание при обращении к общим структурам данных в рамках процесса (например, при получении снимка или чтении идентификатора транзакции в сеансе).

Корреляция между событием ожидания(wait_event) и SQL запросами

При использовании индекса

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост
Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

Без использования индекса

Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост
Корреляционный анализ PostgreSQL - ожидания СУБД при отсутствии индексов Субд, Postgresql, Производительность, Корреляция, Тестирование, Длиннопост

Пользовательский запрос и события ожидания оказывающий наибольшее влияние на снижение производительности БД.

С использованием индекса

select custom_test( $1 )

События ожидания, оказывающие наибольшее влияние на снижение производительности БД

  1. Lock / transactionid: Ожидание завершения транзакции.

  2. Lock / tuple: Ожидание при запросе блокировки для кортежа.

Без использования индекса

select custom_test( $1 )

События ожидания, оказывающие наибольшее влияние на снижение производительности БД

  1. IO / DSMFillZeroWrite Ожидание заполнения нулями файла, применяемого для поддержки динамической общей памяти.

  2. IO / DataFileRead Ожидание чтения из файла данных отношения.

  3. IPC / BufferIO Ожидание завершения буферного ввода/вывода.

  4. IPC / ParallelFinish Ожидание завершения вычислений параллельными рабочими процессами.

  5. IPC / BgWorkerShutdown Ожидание завершения фонового рабочего процесса.

  6. Lock / transactionid: Ожидание завершения транзакции.

  7. Lock / tuple: Ожидание при запросе блокировки для кортежа.

  8. LWLock / BufferMapping Ожидание при связывании блока данных с буфером в пуле буферов.

  9. LWLock / LockManager: Ожидание при чтении или изменении информации о «тяжёлых» блокировках.

  10. LWLock / BufferContent : Ожидание при обращении к странице данных в памяти.

  11. LWLock / SyncScan Ожидание при выборе начального положения для синхронизированного сканирования таблицы.

  12. LWLock / ProcArray: Ожидание при обращении к общим структурам данных в рамках процесса (например, при получении снимка или чтении идентификатора транзакции в сеансе).

Итог и практическое применение результатов корреляционного анализа

  1. Результаты корреляционного анализа нагрузочного тестирования с использованием индексов являются нормальной картиной штатной работы СУБД в условиях массовых обновлений данных .

  2. Корреляция с ожиданиями IO и IPC - с высокой долей уверенности , свидетельствует о неоптимальном плане выполнения SQL запроса.

Показать полностью 23
[моё] Субд Postgresql Производительность Корреляция Тестирование Длиннопост
0
kznalp
kznalp
4 месяца назад
Postgres DBA
Серия СУБД PostgreSQL

Корреляционный анализ ожиданий для сценариев нагрузочного тестирования СУБД PostgreSQL⁠⁠

Взято с основного технического канала Postgres DBA

Корреляционный анализ ожиданий для сценариев нагрузочного тестирования СУБД PostgreSQL Субд, Postgresql, Исследования, Производительность, Корреляция, Анализ данных

Анализировать и сравнивать можно только вычисляемые сущности.

Постановка задачи

Установить характерные признаки ожиданий и результаты корреляционного анализа в зависимости от сценариев нагрузочного тестирования .

Database-1

База данных для сбора статистической информации производительности .

Database-2

Тестовая база данных для проведения нагрузочного тестирования .

Нагрузка создается пользовательским сценарием pgbench.

Рост количества подключений pgbench - экспоненциально от 6 до 111.

Сценарии нагрузочного тестирования и результаты экспериментов

Сценарий 1 - "Select Only"

Только читающая нагрузка на тестовую БД .

Сценарий 2 - "Insert Only"

Только пишущая нагрузка на тестовую БД .

Сценарий 3 - "OLTP"

Имитация теста TPC-B . Нагрузка "SELECT + UPDATE" в тестовой БД .

Характерные признаки сценариев нагрузочного тестирования

Сценарий 1 - "Select Only"

Сценарий характеризуется

1. Cильной корреляцией с событиями ожидания:

  • LWLock/LockManager: Ожидание при чтении или изменении информации о «тяжёлых» блокировках.

  • LWLock/ProcArray: Ожидание при обращении к общим структурам данных в рамках процесса (например, при получении снимка или чтении идентификатора транзакции в сеансе).

2. Очень низким относительной долей ожиданий: менее 1%

Сценарий 2 - "Insert Only"

Сценарий характеризуется

1. Очень сильной корреляцией с событиями ожидания:

  • MultiXactOffsetSLRU: Ожидание при обращении к SLRU-кешу данных о смещениях мультитранзакций.

2. Не высокой относительной долей ожиданий: 17-35%

Сценарий 3 - "OLTP"

Сценарий характеризуется

1. Очень сильной корреляцией с событиями ожидания:

  • Lock / transactionid: Ожидание завершения транзакции.

  • Lock / tuple: Ожидание при запросе блокировки для кортежа.

2. Высокой относительной долей ожиданий: 62-95%.

Показать полностью
[моё] Субд Postgresql Исследования Производительность Корреляция Анализ данных
0
kznalp
kznalp
4 месяца назад
Postgres DBA
Серия СУБД PostgreSQL

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL"⁠⁠

Взято с основного технического канала Postgres DBA

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Классический анализ - разбить проблему на составные части и внимательно изучить.

Продолжение работ по теме

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL".

Постановка задачи

Анализ событий ожиданий СУБД и определение SQL запросов оказывающих наибольшее влияние на производительность БД.

Основное отличие от предыдущей методики анализа производительности.

Корреляционный анализ проводится не по СУБД в целом , а по отдельным базам данных - Database-1 , Database-2.

Статистические показатели производительности Баз Данных.

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Ось X - точка наблюдения . Ось Y - операционная скорость.

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Ось X - точка наблюдения . Ось Y - операционная скорость.

Анализ операционной скорости

Деградация производительности Database-2 существенно сильнее .

Ожидания

WAITING RATIO

Относительная доля(%), времени ожиданий от времени работы базы данных.

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Ось X - точка наблюдения . Ось Y - относительная доля ожиданий.

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Ось X - точка наблюдения . Ось Y - относительная доля ожиданий.

Анализ относительной доли ожиданий

Доля ожиданий , при работе Database-2 выше на порядки.

WAIT_EVENT_TYPE (Типы ожиданий)

Database-1

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Наиболее значимый тип ожидания LWLock

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Ось X - точка наблюдения . Ось Y - количество ожиданий LWLock

Database-2

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Наиболее значимые типы ожиданий IO , Lock , LWLock.

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Ось X - точка наблюдения . Ось Y - количество ожиданий IO

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Ось X - точка наблюдения . Ось Y - количество ожиданий Lock

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Ось X - точка наблюдения . Ось Y - количество ожиданий LWLock

Анализ типов ожиданий (WAIT_EVENT_TYPE)

Относительная доля ожиданий для Database-1 существенно ниже , чем по Database-2.

Типы ожиданий IO , Lock - отсутствуют при работе Database-1.

Общий корреляционный анализ ожиданий

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Коэффициенты корреляции


  • SPEED CORR
    : коэффициент корреляции между количеством активных сессий к БД и операционной скоростью.

  • BUFFERPIN CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа Bufferpin.

  • EXTENSION CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа Extension.

  • IO CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа IO.

  • IPC CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа IPC.

  • LOCK CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа Lock.

  • LWLOCK CORR: коэффициент корреляции между операционной скоростью и количеством ожиданий типа LWLock.

Итоги

  1. Корреляция между активными сессиями и операционной скоростью для Database-1 очень слабая => Увеличение нагрузки на БД практически не ведет к снижению производительности БД.

  2. Корреляция между активными сессиями и операционной скоростью для Database-2 очень сильная =>Увеличение нагрузки на БД ведет к заметному снижению производительности БД.

  3. Для Database-1 отсутствует корреляция между операционной скоростью и ожиданиями => Снижение производительности БД не вызвано ожиданиями БД.

  4. Для Database-2 наиболее сильная отрицательная корреляция между операционной скоростью и ожиданиями типа Lock =>Тяжелые блокировки оказывают наибольшее влияние на снижение производительности СУБД.

Корреляционный анализ ожиданий для Database-2

Для проведения корреляционного анализа используется

Основная гипотеза корреляционного анализа ожиданий СУБД

Корреляция между типом ожидания (wait_event_type) и событием ожидания(wait_event)

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Наиболее коррелированные события ожидания(сильная корреляция):

  1. Lock/extend: Ожидание при расширении отношения.

  2. LWLock/BufferContent: Ожидание при обращении к странице данных в памяти.

Корреляция между событием ожидания(wait_event) и SQL запросами

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

SQL запросы , роли и корреляция с событиями ожиданияSQL запросы , роли и корреляция с событиями ожидания

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Список SQL запросов

Результат корреляционного анализа для Database-2

Результат корреляционного анализа для Database-2

Пользовательский запрос и события ожидания оказывающий наибольшее влияние на снижение производительности БД.

select custom_test( $1 )

События ожидания, оказывающие наибольшее влияние на снижение производительности БД

Корреляционный анализ ожиданий СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Статистика, Корреляция, Длиннопост

Коэффициенты корреляции между событиями ожидания в БД и SQL запросе.

  1. MultiXactOffsetSLRU: Ожидание при обращении к SLRU-кешу данных о смещениях мультитранзакций.

  2. MultiXactGen: Ожидание при чтении или изменении общего состояния мультитранзакций.

  3. extend: Ожидание при расширении отношения.

  4. BufferContent: Ожидание при обращении к странице данных в памяти.

  5. WALInsert: Ожидание при добавлении записей WAL в буфер в памяти.

  6. ProcArray: Ожидание при обращении к общим структурам данных в рамках процесса (например, при получении снимка или чтении идентификатора транзакции в сеансе).

  7. CheckpointerComm: Ожидание при управлении запросами fsync.

  8. BufferMapping: Ожидание при связывании блока данных с буфером в пуле буферов.

  9. DataFileExtend: Ожидание расширения файла данных отношения.

  10. LockManager: Ожидание при чтении или изменении информации о «тяжёлых» блокировках.

Итог и практическое применение результатов корреляционного анализа

Для оптимизации и повышению производительности запроса "select custom_test( $1 )" необходимо выявить причины и оптимизировать работу с мультитранзакциями.

Планы на будущее и развитие

Корреляционный анализ событий ожидания СУБД в зависимости от сценариев нагрузочного тестирования.

Показать полностью 15
[моё] Субд Postgresql Производительность Статистика Корреляция Длиннопост
0
kznalp
kznalp
4 месяца назад
Postgres DBA
Серия СУБД PostgreSQL

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL"⁠⁠

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Мониторинг, Анализ данных, Корреляция, Длиннопост

А теперь начинается самое интересно - анализ и поиск закономерностей

Выполненные сценарии нагрузочного тестирования

"OLTP"- нагрузочное тестирование СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL".

"SELECT ONLY" - нагрузочное тестирование СУБД PostgreSQL использованием оперативно-тактического комплекса "PG_HAZEL".

"INSERT ONLY" - нагрузочное тестирование СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL".

"HEAVYWEIGHT" - нагрузочное тестирование СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL".

Результаты нагрузочного тестирования

График операционной скорости СУБД за период

Короткий период медианного сглаживания - синий график.

Долгий период медианного сглаживания - красный график.

Ось X - точка наблюдения. Ось Y - значение операционной скорости.

"OLTP"- нагрузочное тестирование СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL".

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Мониторинг, Анализ данных, Корреляция, Длиннопост

"SELECT ONLY" - нагрузочное тестирование СУБД PostgreSQL использованием оперативно-тактического комплекса "PG_HAZEL".

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Мониторинг, Анализ данных, Корреляция, Длиннопост

"INSERT ONLY" - нагрузочное тестирование СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL".

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Мониторинг, Анализ данных, Корреляция, Длиннопост

"HEAVYWEIGHT" - нагрузочное тестирование СУБД PostgreSQL с использованием оперативно-тактического9 комплекса "PG_HAZEL".

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Мониторинг, Анализ данных, Корреляция, Длиннопост

Ключевой момент

  1. Значения операционной скорости после определенного роста нагрузки для сценариев "INSERT ONLY" / "HEAVYWEIGHT".

Корреляция между операционной скоростью и количество сессий в состоянии 'active'

Ось X - точка наблюдения. Ось Y - коэффициент корреляции .

"OLTP"- нагрузочное тестирование СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL".

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Мониторинг, Анализ данных, Корреляция, Длиннопост

"SELECT ONLY" - нагрузочное тестирование СУБД PostgreSQL использованием оперативно-тактического комплекса "PG_HAZEL".

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Мониторинг, Анализ данных, Корреляция, Длиннопост

"INSERT ONLY" - нагрузочное тестирование СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL".

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Мониторинг, Анализ данных, Корреляция, Длиннопост

"HEAVYWEIGHT" - нагрузочное тестирование СУБД PostgreSQL с использованием оперативно-тактического комплекса "PG_HAZEL".

Анализ результатов нагрузочного тестирования СУБД PostgreSQL с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Мониторинг, Анализ данных, Корреляция, Длиннопост

Ключевой момент

  1. График скользящей корреляции для сценариев "SELECT ONLY" / "INSERT ONLY" очень похожи.

  2. График скользящей корреляции для сценария "HEAVYWEIGHT" в противо фазе с графиками "SELECT ONLY" / "INSERT ONLY" после определенной нагрузки.

Показать полностью 9
[моё] Субд Postgresql Производительность Мониторинг Анализ данных Корреляция Длиннопост
1
kznalp
kznalp
4 месяца назад
Postgres DBA
Серия СУБД PostgreSQL

Сценарий "INSERT ONLY" - корреляционный анализ производительности СУБД с использованием оперативно-тактического комплекса "PG_HAZEL"⁠⁠

Сценарий "INSERT ONLY" - корреляционный анализ производительности СУБД с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Корреляция, Мониторинг, Анализ данных, Длиннопост

Постановка задачи

Анализ и определение причины деградации производительности СУБД за заданный период .

Сценарий нагрузки "INSERT ONLY".

Общее описание схемы и метрик производительности

PG_HAZEL - оперативно-тактический комплекс мониторинга производительности СУБД PostgreSQL .

Анализ метрик производительности СУБД.

График операционной скорости СУБД за период

Короткий период медианного сглаживания - синий график.

Долгий период медианного сглаживания - красный график.

Сценарий "INSERT ONLY" - корреляционный анализ производительности СУБД с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Корреляция, Мониторинг, Анализ данных, Длиннопост

Ось X - точка наблюдения. Ось Y - значение операционной скорости

Отличительная особенность сценария "INSERT ONLY" - резкий скачок операционной скорости. Скорее всего причина - изменение нагрузки на СХД виртуальной машины.

Сессии в состоянии 'active'

Сценарий "INSERT ONLY" - корреляционный анализ производительности СУБД с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Корреляция, Мониторинг, Анализ данных, Длиннопост

Ось X - точка наблюдения. Ось Y - количество активных сессий на точку времени.

Корреляция между операционной скоростью и количество сессий в состоянии 'active'

График скользящей корреляции.

Сценарий "INSERT ONLY" - корреляционный анализ производительности СУБД с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Корреляция, Мониторинг, Анализ данных, Длиннопост

Ось X - точка наблюдения. Ось Y - значение коэффициента корреляции.

Обращает на себя внимание факт непостоянного значения скользящей корреляции, близкой к косинусоиде.

График практически повторяет график скользящей корреляции для сценария "SELECT ONLY"

Сценарий "INSERT ONLY" - корреляционный анализ производительности СУБД с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Корреляция, Мониторинг, Анализ данных, Длиннопост

Сценарий "SELECT ONLY". Ось X - точка наблюдения. Ось Y - значение коэффициента корреляции.

Коэффициент корреляции между операционной скоростью и количеством активных сессий за период наблюдений = 0,868388508671336 .

Сильная положительная корреляция между операционной скоростью и нагрузкой на СУБД .

Корреляционный анализ ожиданий СУБД

Гипотеза

Для определения SQL запроса оказывающего наибольшее влияние необходимо определить запрос с наибольшим значением коэффициента корреляции между ожиданиями СУБД и ожиданиями по SQL запросу.

Чуть подробнее

Результат корреляционного анализа

Сценарий "INSERT ONLY" - корреляционный анализ производительности СУБД с использованием оперативно-тактического комплекса "PG_HAZEL" Субд, Postgresql, Производительность, Корреляция, Мониторинг, Анализ данных, Длиннопост

Нет деградации производительности СУБД за период проведения теста .

Итог

  1. Количество ожиданий СУБД - не является признаком деградации производительности СУБД

  2. Для сценарий "INSERT ONLY" текущая нагрузка далека от предельной.

Показать полностью 6
[моё] Субд Postgresql Производительность Корреляция Мониторинг Анализ данных Длиннопост
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии