Сообщество - Postgres DBA

Postgres DBA

157 постов 27 подписчиков

Популярные теги в сообществе:

0

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

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

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

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

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

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

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

Нагрузка создается пользовательским сценарием 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 - значение операционной скорости.

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

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

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

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

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

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

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

Ожидания

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

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

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

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

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

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

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

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

WAITING RATIO

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

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

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

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

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

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

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

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

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

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

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

Анализ WAIT_EVENT_TYPE

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

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

Ожидания Lock

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

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

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

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

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

Ожидания LWLock

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

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

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

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

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

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

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

Ожидания IO

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

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

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

Ожидания IPC

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

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

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

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

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

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

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

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

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

  • 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) - при использовании индекса

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

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

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

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

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

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

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

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

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

  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 запросами

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

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

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

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

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

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

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

Коэффициент корреляции Пирсона

Коэффициент корреляции Пирсона

Входные данные

Статистически обработанные значения количеств ожиданий по типам (wait_event_type) , событиям ожиданий (wait_event) на уровне кластера и SQL выражений , за заданный период анализа.

Общая интерпретация значений коэффициента корреляции :

  • Очень слабая корреляция: [0 до 0.2]

  • Слабая корреляция: (0.2 до 0.5].

  • ️Средняя корреляция: (0.5 до 0.7] .

  • ️Сильная корреляция: (0.7 до 0.9].

  • ️Очень сильная корреляция: (0.9 до 1].

Общая идея и последовательность действий

Шаг 1

Определяется тип ожидания (wait_event_type), имеющий наименьший коэффициент корреляции(❗отрицательная корреляция❗) с операционной скоростью.

Шаг 2

Определяется событие ожидания (wait_event) , имеющий наибольший коэффициент корреляции (❗положительная корреляция❗) с типом ожидания , определённом на предыдущем шаге.

Шаг 3

Определяется SQL запрос, имеющий наибольший коэффициент корреляции (❗положительная корреляция❗) между количеством ожидания(wait_event, определённом на предыдущем шаге) запроса и количеством ожиданий кластера .

ГИПОТЕЗА

Найденный SQL запрос будет запросом , имеющим наибольшее влияние на снижение производительности СУБД, в целом.

Важное дополнение

Чем больше заданный промежуток анализа данных, тем надёжнее результат .

Доказательство

Гипотеза не может быть строго доказана по причине неполноты собираемых данных об ожиданиях СУБД.

Например - не собирается статистика ожиданий CPU.

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

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

Дополнение по теме:

https://dzen.ru/a/Z8cqn5H5K3IHCENn

Показать полностью

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

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

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

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

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

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

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 с использованием оперативно-тактического комплекса "PG_HAZEL"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ожидания

WAITING RATIO

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

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

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

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

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

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

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

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

Database-1

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

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

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

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

Database-2

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

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

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

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

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

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

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

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

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

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

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

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

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


  • 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)

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

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

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

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

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

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

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

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

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

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

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

select custom_test( $1 )

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

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

Коэффициенты корреляции между событиями ожидания в БД и 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 с использованием разных сценариев оперативно-тактического комплекса "PG_HAZEL"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Показать полностью 9

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Гипотеза

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

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

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

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

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

Итог

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

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

Показать полностью 6

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ключевые точки наблюдения.

  • 1-40: положительная корреляция

  • 41-142: отрицательная корреляция

  • 143-179: положительная корреляция

  • 180-197: отрицательная корреляция

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

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

Ожидания СУБД

Ожидания СУБД

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

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

Отношение времени ожидания к общему времени работы СУБД

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

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

Результат анализа ожиданий СУБД:

  1. Начиная с точки 56 - резкий рост метрик ожиданий СУБД

  2. Количество ожиданий СУБД - очень не велико.

  3. После точки 81 - относительная доля ожиданий снижается. Однако количество ожиданий не уменьшается , операционная скорость снижается.

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

Гипотеза

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

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

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

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

Результат работы сервисного скрипта

Результат работы сервисного скрипта

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

Снижение операционной скорости вызвано повышенной нагрузкой на СУБД и нехваткой CPU. Ожиданий СУБД влияющих на производительность - не выявлено.

Подтверждением нехватки ресурсов СУБД является рост значений benchmark.

Ось X - точка наблюдения. Ось Y - медианное значение тестового запроса BENCHMARK

Ось X - точка наблюдения. Ось Y - медианное значение тестового запроса BENCHMARK

Итог

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

Показать полностью 8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ключевые точки наблюдения.

  • 1-19 : коэфaициент близок к 1

  • 23 - отрицательное значение коэффициента корреляции

  • 80 - значение коэффициента корреляции уменьшается(растет по модулю)

Общая интерпретация значений коэффициента корреляции :

  • Очень слабая корреляция: [0 до 0.2]

  • Слабая корреляция: (0.2 до 0.5].

  • ️Средняя корреляция: (0.5 до 0.7] .

  • ️Сильная корреляция: (0.7 до 0.9].

  • ️Очень сильная корреляция: (0.9 до 1].

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

  1. После точки наблюдения 23 - СУБД работает в нештатном режиме.

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

Ожидания СУБД

Отношение времени ожидания к общему времени работы СУБД

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

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

  1. Начиная с точки 60 - относительная доля ожиданий резко увеличивается. СУБД работает в нештатном режиме.

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

Гипотеза

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

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

Результат работы сервисного скрипта

Результат работы сервисного скрипта

Наибольшее влияние на снижение производительности СУБД оказывает SQL запрос: queryid = -3703375232510669542 .

Шаги корреляционного анализа

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

  1. Lock = -0,991080979500333

  2. LWLock = -0,952840750047627

  3. IPC = -0,00747093318897355

  4. BufferPin = 0

  5. Extension = 0

  6. IO = 0

Ожидания типа Lock имеет большую корреляцию по сравнению с ожиданиями типа LWLock.

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

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

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

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

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

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

2.Корреляция между типом ожидания Lock и событиями ожиданий

  1. transactionid = 0,999996784494388

  2. tuple = 0,989898319693633

  3. relation = 0,884541891919045

Ожидания transactionid

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

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

Ожидания tuple

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

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

3. Корреляция между ожиданиями transactionid и SQL запросами

queryid = -3703375232510669542

Ось Y - количество ожиданий Lock/tuple для queryid =-3703375232510669542

Ось Y - количество ожиданий Lock/tuple для queryid =-3703375232510669542

Итоги

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

Необходимо продолжение проведение экспериментов по корреляционному анализу :

  1. Дополнительные сценарии нагрузочного тестирования .

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

Показать полностью 10
Отличная работа, все прочитано!