5

PG_HAZEL : Определение причины неудачного выполнения нагрузочного тестирования СУБД

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

У любой проблемы есть корневые и сопутствующие причины.

У любой проблемы есть корневые и сопутствующие причины.

Задача

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

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

  • CPU = 2

  • RAM = 2GB

  • Astra Linux 1.7

  • PostgreSQL 15

Сценарий тестирования-1

  1. Select only : 50% нагрузки

  2. Select + Update : 30% нагрузки

  3. Insert only : 15% нагрузки

Сценарий тестирования-2

  1. Select only : 50% нагрузки

  2. Select + Update : 30% нагрузки

  3. Insert only : 15% нагрузки

  4. CPU Load : 5% нагрузки

Нагрузка

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

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

Операционная скорость - 2

Ось X - количество сессий pgbench. Ось Y - Операционная скорость.

Ось X - количество сессий pgbench. Ось Y - Операционная скорость.

Отсутствуют данные по нагрузке 39 - 115 .

Чек-лист IO (сценарий-1 и сценарий-2)

Чек-лист CPU (сценарий-1 и сценарий-2)

Чек-лист RAM (сценарий-1 и сценарий-2)

Причина ошибки сбора данных при нагрузочном тестировании по сценарию-2

Свопинг в ходе нагрузочного тестирования по сценарию-2.

📊 1. Механизм возникновения свопинга при нехватке памяти

  • При увеличении числа подключений к СУБД (например, с 5 до 115) каждый новый процесс требует выделения памяти для своих операций. Если физической памяти (RAM) недостаточно, система начинает использовать swap-пространство на диске для перемещения неактивных страниц памяти.

  • При конфигурации 2 GB RAM и интенсивной нагрузке на CPU процессы СУБД могут быстро исчерпать доступную оперативную память. Это активирует механизм подкачки, при котором демон kswapd начинает активно перемещать данные между RAM и диском, что дополнительно нагружает CPU.

⚙️ 2. Влияние свопинга на CPU и общую производительность

  • Процесс свопинга требует значительных вычислительных ресурсов. При активном использовании swap-пространства нагрузка на CPU может достигать 90-100%, причем большая часть этого времени тратится на системные (kernel) операции.

  • Это связано с тем, что ядро Linux должно управлять страницами памяти, определять, какие данные перемещать в swap, и обрабатывать дисковые операции ввода-вывода. В результате нагрузка на CPU возрастает даже при том, что основная задача свопинга — разгрузить оперативную память.

3. Экспоненциальный рост нагрузки и его последствия

  • Экспоненциальное увеличение числа соединений (с 5 до 115) приводит к нелинейному росту потребления ресурсов. Каждое новое соединение требует памяти для выполнения запросов, хранения временных данных и управления транзакциями.

  • При 2 GB RAM такой рост может быстро исчерпать доступную память. Например, если каждое соединение потребляет даже небольшой объем памяти (например, 20-50 MB), то при 115 соединениях общее потребление может превысить 2 GB, что активирует свопинг.

💎 Заключение

При конфигурации CPU=2 ядра и RAM=2 GB экспоненциальный рост нагрузки до 115 соединений с высокой вероятностью приведет к свопингу, что вызовет дополнительную нагрузку на CPU и может значительно снизить производительность СУБД.

Postgres DBA

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

Правила сообщества

Пока действуют стандартные правила Пикабу.