LWLock/LockManager: Ожидание при чтении или изменении информации о «тяжёлых» блокировках.
LWLock/ProcArray: Ожидание при обращении к общим структурам данных в рамках процесса (например, при получении снимка или чтении идентификатора транзакции в сеансе).
2. Очень низким относительной долей ожиданий: менее 1%
Сценарий 2 - "Insert Only"
Сценарий характеризуется
1. Очень сильной корреляцией с событиями ожидания:
MultiXactOffsetSLRU: Ожидание при обращении к SLRU-кешу данных о смещениях мультитранзакций.
2. Не высокой относительной долей ожиданий: 17-35%
Сценарий 3 - "OLTP"
Сценарий характеризуется
1. Очень сильной корреляцией с событиями ожидания:
Lock / transactionid: Ожидание завершения транзакции.
Lock / tuple: Ожидание при запросе блокировки для кортежа.
Анализ событий ожиданий СУБД и определение SQL запросов оказывающих наибольшее влияние на производительность БД.
Основное отличие от предыдущей методики анализа производительности.
Корреляционный анализ проводится не по СУБД в целом , а по отдельным базам данных - Database-1 , Database-2.
Статистические показатели производительности Баз Данных.
Ось X - точка наблюдения . Ось Y - операционная скорость.
Ось X - точка наблюдения . Ось Y - операционная скорость.
Анализ операционной скорости
Деградация производительности Database-2 существенно сильнее .
Ожидания
WAITING RATIO
Относительная доля(%), времени ожиданий от времени работы базы данных.
Ось X - точка наблюдения . Ось Y - относительная доля ожиданий.
Ось X - точка наблюдения . Ось Y - относительная доля ожиданий.
Анализ относительной доли ожиданий
Доля ожиданий , при работе Database-2 выше на порядки.
WAIT_EVENT_TYPE (Типы ожиданий)
Database-1
Наиболее значимый тип ожидания LWLock
Ось X - точка наблюдения . Ось Y - количество ожиданий LWLock
Database-2
Наиболее значимые типы ожиданий IO , Lock , LWLock.
Ось X - точка наблюдения . Ось Y - количество ожиданий IO
Ось X - точка наблюдения . Ось Y - количество ожиданий Lock
Ось 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.
Итоги
Корреляция между активными сессиями и операционной скоростью для Database-1очень слабая => Увеличение нагрузки на БД практически не ведет к снижению производительности БД.
Корреляция между активными сессиями и операционной скоростью для Database-2очень сильная =>Увеличение нагрузки на БД ведет к заметному снижению производительности БД.
Для Database-1 отсутствует корреляция между операционной скоростью и ожиданиями => Снижение производительности БД не вызвано ожиданиями БД.
Для Database-2 наиболее сильная отрицательная корреляция между операционной скоростью и ожиданиями типа Lock =>Тяжелые блокировки оказывают наибольшее влияние на снижение производительности СУБД.
Корреляционный анализ ожиданий для Database-2
Для проведения корреляционного анализа используется
Корреляция между типом ожидания (wait_event_type) и событием ожидания(wait_event)
Наиболее коррелированные события ожидания(сильная корреляция):
Lock/extend: Ожидание при расширении отношения.
LWLock/BufferContent: Ожидание при обращении к странице данных в памяти.
Корреляция между событием ожидания(wait_event) и SQL запросами
SQL запросы , роли и корреляция с событиями ожиданияSQL запросы , роли и корреляция с событиями ожидания
Список SQL запросов
Результат корреляционного анализа для Database-2
Результат корреляционного анализа для Database-2
Пользовательский запрос и события ожидания оказывающий наибольшее влияние на снижение производительности БД.
select custom_test( $1 )
События ожидания, оказывающие наибольшее влияние на снижение производительности БД
Коэффициенты корреляции между событиями ожидания в БД и SQL запросе.
MultiXactOffsetSLRU: Ожидание при обращении к SLRU-кешу данных о смещениях мультитранзакций.
MultiXactGen: Ожидание при чтении или изменении общего состояния мультитранзакций.
extend: Ожидание при расширении отношения.
BufferContent: Ожидание при обращении к странице данных в памяти.
WALInsert: Ожидание при добавлении записей WAL в буфер в памяти.
ProcArray: Ожидание при обращении к общим структурам данных в рамках процесса (например, при получении снимка или чтении идентификатора транзакции в сеансе).
CheckpointerComm: Ожидание при управлении запросами fsync.
BufferMapping: Ожидание при связывании блока данных с буфером в пуле буферов.
DataFileExtend: Ожидание расширения файла данных отношения.
LockManager: Ожидание при чтении или изменении информации о «тяжёлых» блокировках.
Итог и практическое применение результатов корреляционного анализа
Для оптимизации и повышению производительности запроса "select custom_test( $1 )" необходимо выявить причины и оптимизировать работу с мультитранзакциями.
Планы на будущее и развитие
Корреляционный анализ событий ожидания СУБД в зависимости от сценариев нагрузочного тестирования.
Короткий период медианного сглаживания - синий график.
Долгий период медианного сглаживания - красный график.
Ось X - точка наблюдения. Ось Y - значение операционной скорости
Отличительная особенность сценария "INSERT ONLY" - резкий скачок операционной скорости. Скорее всего причина - изменение нагрузки на СХД виртуальной машины.
Сессии в состоянии 'active'
Ось X - точка наблюдения. Ось Y - количество активных сессий на точку времени.
Корреляция между операционной скоростью и количество сессий в состоянии 'active'
График скользящей корреляции.
Ось X - точка наблюдения. Ось Y - значение коэффициента корреляции.
Обращает на себя внимание факт непостоянного значения скользящей корреляции, близкой к косинусоиде.
Сценарий "SELECT ONLY". Ось X - точка наблюдения. Ось Y - значение коэффициента корреляции.
Коэффициент корреляции между операционной скоростью и количеством активных сессий за период наблюдений = 0,868388508671336 .
Сильная положительная корреляция между операционной скоростью и нагрузкой на СУБД .
Корреляционный анализ ожиданий СУБД
Гипотеза
Для определения SQL запроса оказывающего наибольшее влияние необходимо определить запрос с наибольшим значением коэффициента корреляции между ожиданиями СУБД и ожиданиями по SQL запросу.
Короткий период медианного сглаживания - синий график.
Долгий период медианного сглаживания - красный график.
Ось X - точка наблюдения. Ось Y - значение операционной скорости
Наблюдается резкое снижение с последующим переходом в горизонтальный тренд.
Сессии в состоянии 'active'
Ось X - точка наблюдения. Ось Y - количество активных сессий на точку времени.
Корреляция между операционной скоростью и количество сессий в состоянии 'active'
График скользящей корреляции.
Ось X - точка наблюдения. Ось Y - значение коэффициента корреляции.
Ключевые точки наблюдения.
1-40: положительная корреляция
41-142: отрицательная корреляция
143-179: положительная корреляция
180-197: отрицательная корреляция
Результат корреляционного анализа операционной скорости и активными сессиями :
Корреляция между операционной скоростью СУБД и нагрузкой на СУБД - непостоянна. Возможно причины снижения операционной скорости - вне СУБД.
Ожидания СУБД
Ожидания СУБД
Ось X - точка наблюдения. Ось Y - количество ожиданий
Отношение времени ожидания к общему времени работы СУБД
Ось X - точка наблюдения. Ось Y - % ожиданий
Результат анализа ожиданий СУБД:
Начиная с точки 56 - резкий рост метрик ожиданий СУБД
Количество ожиданий СУБД - очень не велико.
После точки 81 - относительная доля ожиданий снижается. Однако количество ожиданий не уменьшается , операционная скорость снижается.
Корреляционный анализ ожиданий СУБД
Гипотеза
Для определения SQL запроса оказывающего наибольшее влияние необходимо определить запрос с наибольшим значением коэффициента корреляции между ожиданиями СУБД и ожиданиями по SQL запросу.
Снижение операционной скорости вызвано повышенной нагрузкой на СУБД и нехваткой CPU. Ожиданий СУБД влияющих на производительность - не выявлено.
Подтверждением нехватки ресурсов СУБД является рост значений benchmark.
Ось X - точка наблюдения. Ось Y - медианное значение тестового запроса BENCHMARK
Итог
Используя методику статистического анализа производительности СУБД можно установить предельное значение читающей нагрузки на СУБД не вызывающее деградацию производительности.
Короткий период медианного сглаживания - синий график.
Долгий период медианного сглаживания - красный график.
Ось X - точка наблюдения. Ось Y - значение операционной скорости
Как видно из графика - имеется краткосрочная и долгосрочная тенденция снижения производительности СУБД.
Сессии в состоянии 'active'
Ось X - точка наблюдения. Ось Y - количество активных сессий на точку времени.
Корреляция между операционной скоростью и количество сессий в состоянии 'active'
График скользящей корреляции.
Ось 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].
Результат корреляционного анализа операционной скорости и активными сессиями :
После точки наблюдения 23 - СУБД работает в нештатном режиме.
Очень сильная корреляция между нагрузкой на СУБД и операционной скоростью СУБД.
Ожидания СУБД
Отношение времени ожидания к общему времени работы СУБД
Ось X - точка наблюдения. Ось Y - % ожиданий
Начиная с точки 60 - относительная доля ожиданий резко увеличивается. СУБД работает в нештатном режиме.
Корреляционный анализ ожиданий СУБД
Гипотеза
Для определения SQL запроса оказывающего наибольшее влияние необходимо определить запрос с наибольшим значением коэффициента корреляции между ожиданиями СУБД и ожиданиями по SQL запросу.
Результат корреляционного анализа
Результат работы сервисного скрипта
Наибольшее влияние на снижение производительности СУБД оказывает SQL запрос: queryid = -3703375232510669542 .
Шаги корреляционного анализа
1. Корреляция между операционной скоростью и определенными типом ожиданиям
Lock = -0,991080979500333
LWLock = -0,952840750047627
IPC = -0,00747093318897355
BufferPin = 0
Extension = 0
IO = 0
Ожидания типа Lock имеет большую корреляцию по сравнению с ожиданиями типа LWLock.
Ожидания типа Lock
Ось X - точка наблюдения. Ось Y - количество ожиданий типа Lock
Ожидания типа LWLock
Ось X - точка наблюдения. Ось Y - количество ожиданий типа LWLock
2.Корреляция между типом ожидания Lock и событиями ожиданий
transactionid = 0,999996784494388
tuple = 0,989898319693633
relation = 0,884541891919045
Ожидания transactionid
Ось X - точка наблюдения. Ось Y - количество ожиданий transactionid
Ожидания tuple
Ось X - точка наблюдения. Ось Y - количество ожиданий tuple
3. Корреляция между ожиданиями transactionid и SQL запросами
queryid = -3703375232510669542
Ось Y - количество ожиданий Lock/tuple для queryid =-3703375232510669542
Итоги
Гипотеза подтверждена экспериментально для данного сценария нагрузки.
Необходимо продолжение проведение экспериментов по корреляционному анализу :
Дополнительные сценарии нагрузочного тестирования .
Анализ метрик производительности при продуктивной нагрузке на СУБД.
Как известно, существует всего два метода для решения задач:
Метод анализа или метод дедукции, или от общего к частному.
Метод синтеза или метод индукции, или от частного к общему.
Применительно к оптимизации производительности СУБД . Анализ - поиск причин , влияющих на снижение производительности СУБД. Синтез - оптимизация SQL запросов с целью снижения стоимости плана выполнения . Изменение конфигурационных параметров СУБД.
Проблема аналитического метода : сложность и недостаточная проработка методологий - отсутствие однозначного определения понятия "производительность" .
Проблема синтетического метода : возможное влияние локального изменения на СУБД в целом. Классический пример - создание индекса увеличивает скорость чтения , но может замедлить скорость вставки данных.
Общая проблема : отсутствие строгой методики оценки результатов проведённых изменений .
Определение ожидания СУБД, оказывающего наибольшее влияние на производительность СУБД .
Эксперимент
Нагрузочное тестирование с использованием инструментария pg_stat_tester (Сценарий 2 : OLTP).
Анализируемые данные - коэффициент корреляции между операционной скоростью и ожиданиями СУБД .
Результаты эксперимента
Коэффициент корреляции между операционной скоростью и количеством ожиданий(все ожидания) .
Ось Y - коэффициент корреляции(все ожидания). Ось X - точка наблюдения.
Вполне ожидаемый результат - с ростом нагрузки коэффициент растет по модулю . Т.е. чем больше ожиданий, тем ниже операционная скорость.
Коэффициент корреляции между операционной скоростью и ожиданиями типа "Lock".
Ось Y - коэффициент корреляции(ожидания "Lock") . Ось X - точка наблюдения.
Коэффициент корреляции между операционной скоростью и ожиданиями типа "LWLock".
Ось Y - коэффициент корреляции (ожидания "LWLock"). Ось X - точка наблюдения.
Корреляционный анализ
Графический анализ.
График коэффициента корреляции по ожиданию "Lock" более ближе к графику по ожиданиям , чем график коэффициента корреляции по ожиданию "LWLock" .
Ось Y - все ожидания(синий), ожидания "Lock"(красный). Ось X - точка наблюдения.
Ось Y - все ожидания(синий), ожидания "LWLock"(красный). Ось X - точка наблюдения.
Статистический анализ
Значение стандартного отклонения разницы значений по всем ожиданиями и ожиданиям "Lock" = 0,08560839
Значение стандартного отклонения разницы значений по всем ожиданиями и ожиданиям "LWLock" = 0,339815
Значение стандартного отклонения для ожидания "Lock" ниже значения стандартного отклонения для ожидания "LWLock".
Итог
Для данного сценария нагрузки - ожидания типа "Lock" оказывают существенно большее влияние на снижение производительности, по сравнению с ожиданиями типа "LWLock".