Найти в Дзене
Postgres DBA

Сценарий №4.2 "HeavyWeight": CPU utilization

Корреляционный анализ ожиданий при проведении тестового нагрузочного тестирование по сценарию "HeavyWeight" - повышенная утилизация CPU. Уточнить характерные признаки возникающие при нехватке вычислительной мощности CPU , при минимальном использовании IO. Виртуальная машина cat /proc/cpuinfo processor       : 0 model name      : Intel Xeon Processor (Skylake, IBRS, no TSX) cpu MHz         : 2693.670 processor       : 1 model name      : Intel Xeon Processor (Skylake, IBRS, no TSX) cpu MHz         : 2693.670 Тестовый запрос FOR counter IN 1..10000 LOOP SELECT gcd( ((random()*100.0) * (random()*100.0))::numeric , ((random()*100.0) * (random()*100.0))::numeric ) * lcm( ((random()*100.0) * (random()*100.0))::numeric , ((random()*100.0) * (random()*100.0))::numeric ) * power (gcd( ((random()*100.0) * (random()*100.0))::numeric , ((random()*100.0) * (random()*100.0))::numeric ) , lcm( ((random()*100.0) * (random()*100.0))::numeric , ((random()*100.0) * (random()*100.0))::numeric )) END LOOP;
Оглавление
Ослик не справится , если его перегрузить
Ослик не справится , если его перегрузить

Начало

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

Корреляционный анализ ожиданий при проведении тестового нагрузочного тестирование по сценарию "HeavyWeight" - повышенная утилизация CPU.

Уточнить характерные признаки возникающие при нехватке вычислительной мощности CPU , при минимальном использовании IO.

Реализация теста

Виртуальная машина

cat /proc/cpuinfo
processor       : 0
model name      : Intel Xeon Processor (Skylake, IBRS, no TSX)
cpu MHz         : 2693.670
processor       : 1
model name      : Intel Xeon Processor (Skylake, IBRS, no TSX)
cpu MHz         : 2693.670

Тестовый запрос

FOR counter IN 1..10000
LOOP
SELECT
gcd( ((random()*100.0) * (random()*100.0))::numeric , ((random()*100.0) * (random()*100.0))::numeric ) *
lcm( ((random()*100.0) * (random()*100.0))::numeric , ((random()*100.0) * (random()*100.0))::numeric )
*
power
(gcd( ((random()*100.0) * (random()*100.0))::numeric , ((random()*100.0) * (random()*100.0))::numeric ) ,
lcm( ((random()*100.0) * (random()*100.0))::numeric , ((random()*100.0) * (random()*100.0))::numeric ))
END LOOP;

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

explain ( analyze , buffers , summary ) select custom_test4();
QUERY PLAN
----------------------------------------------------------------------------------------
Result  (cost=0.00..0.26 rows=1 width=4) (actual time=459.522..459.522 rows=1 loops=1)
Buffers: shared hit=160
Planning Time: 0.066 ms
Execution Time: 461.071 ms
(4 rows)

Нагрузка на чтение с диска - отсутствует.

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

Время выполнения с итерации №6 до итерации №16.

Периодичность сбора данных = 1 минута.

Ось X - точка времени. Ось Y - значение операционной скорости СУБД.
Ось X - точка времени. Ось Y - значение операционной скорости СУБД.

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

Ось X - точка времени. Ось Y - ожидания СУБД.
Ось X - точка времени. Ось Y - ожидания СУБД.

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

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

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

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

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

События ожиданий (wait_event) по тестовому запросу

Фрагмент истории выполнения и ожиданий тестового запроса
Фрагмент истории выполнения и ожиданий тестового запроса

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

  • timestamp : точка времени сбора статистических данных уровня SQL.
  • datname : База данных, в которой выполнялся SQL запрос.
  • rolname : Роль, под которой выполнялся SQL запрос.
  • CALLS : Количество выполнений запроса .
  • WAITINGS : Количество ожиданий типа IO , LWLock .
  • WAITINGS TO CALLS : количество ожиданий на одно выполнение.
  • WAIT_EVENTS : события ожидания wait_event , возникающие при выполнении SQL запроса .
  • SQL : текст SQL запроса (не приведен).

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

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

Итог

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