У любой проблемы есть корневые и сопутствующие причины.
Задача
Установить причину неудачного нагрузочного тестирования СУБД по сценарию повышенной нагрузки на CPU.
Виртуальная машина 06
CPU = 2
RAM = 2GB
Astra Linux 1.7
PostgreSQL 15
Сценарий тестирования-1
Select only : 50% нагрузки
Select + Update : 30% нагрузки
Insert only : 15% нагрузки
Сценарий тестирования-2
Select only : 50% нагрузки
Select + Update : 30% нагрузки
Insert only : 15% нагрузки
CPU Load : 5% нагрузки
Нагрузка
Ось X - точка наблюдения. Ось Y - количество сессий pgbench
Операционная скорость - 2
Ось 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 и может значительно снизить производительность СУБД.