Как сократить время, затрачиваемое на получение соединения JDBC?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как сократить время, затрачиваемое на получение соединения JDBC?

Сообщение Anonymous »

Это приложение SpringBoot v2, по умолчанию для создания источника данных используется Hikari. Мы пытаемся провести нагрузочное тестирование с 200 пользователями, имитирующими запуск одной конечной точки в течение 1 минуты.
Во время нагрузочного теста мы сталкиваемся с очень высокой средней скоростью ответа (например, 20 секунд ++). . Мы считаем, что основная причина связана с высокой загрузкой ЦП в экземпляре БД, что приводит к большим затратам времени на получение соединения JDBC.
Эта проблема возникает только во время нагрузочного теста, если мы вызываем API один раз, время ответа составит ~2 секунды (плюс минус).

Конфигурация Hikari
Ниже выполнена ли конфигурация Hikari:

Код: Выделить всё

spring.datasource.hikari.poolName=HikariCP
spring.datasource.hikari.minimum-idle= 50
spring.datasource.hikari.maximum-pool-size=100
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime= 1800000
spring.datasource.hikari.connection-timeout = 180000
*** Изначально максимальный размер пула составлял 30, а время ожидания — 10. Мы изменили эту конфигурацию, чтобы справиться с объемом нагрузочного тестирования. Мы специально поставили максимум 100 и 50 простоя, мы думали, что это уменьшит время, затрачиваемое на получение JDBC-соединения.

Нагрузочное тестирование
Первые несколько вызовов со статистикой времени были в порядке, но при дальнейшем срабатывании статистика времени отклоняется. Ниже приведено сравнение статистики первого и последнего раза.

Код: Выделить всё

First time stats:

Код: Выделить всё

2024-07-31 01:11:15.698  INFO 81931 --- [masked] i.StatisticalLoggingSessionEventListener : Session Metrics {
204927042 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
96128250 nanoseconds spent preparing 5 JDBC statements;
2582852833 nanoseconds spent executing 5 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
61844917 nanoseconds spent executing 4 flushes (flushing a total of 10 entities and 2 collections);
15162333 nanoseconds spent executing 5 partial-flushes (flushing a total of 8 entities and 8 collections)
}

Код: Выделить всё

Last time stats:

Код: Выделить всё

2024-07-31 01:12:15.678  INFO 81931 --- [masked] i.StatisticalLoggingSessionEventListener : Session Metrics {
6325645250 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
104583 nanoseconds spent preparing 5 JDBC statements;
9456613083 nanoseconds spent executing 5 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
1247332 nanoseconds spent executing 4 flushes (flushing a total of 10 entities and 2 collections);
254583 nanoseconds spent executing 5 partial-flushes (flushing a total of 8 entities and 8 collections)
}
Вопрос.
Что не так с нашей настройкой получения соединения JDBC? Как мы можем сократить время, проводимое там?

Подробнее здесь: https://stackoverflow.com/questions/788 ... connection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»