• 1000 Мы тестируем 55 TPS, и мы используем начальное соединение 100 db с максимальным количеством соединений до 250 db в пуле.
Ниже приведен снимок из Dynatrace (время ожидания для вызова клиента JDB C заняло 6 секунд, хотя getConnection заняло миллисекоды): Я думаю, проблема связана с рабочим поток, шина событий или вертикаль базы данных перегружены. Пожалуйста, найдите ниже код вызова службы db
dbService.rxFetchAll(query, params)
.subscribe(
results-> {}
и вертикальный код DBService
public class DatabaseServiceImpl implements DatabaseService {
private final Logger logger = LoggerFactory.getLogger(DatabaseServiceImpl.class);
private final JsonObject config;
private final JDBCClient client;
public DatabaseServiceImpl(Vertx vertx, JsonObject config,
Handler<AsyncResult<DatabaseService>> handler) {
this.config = config;
this.client = JDBCClient
.createNonShared(vertx, config.getJsonObject(AppLayerConstants.DATA_LOC));
getConnection()
.subscribe(conn -> {
logger.debug("Successfully created database connection.");
handler.handle(Future.succeededFuture(this));
},
ex -> {
logger.error("Failed to create database connection: {}.", ex.getMessage());
handler.handle(Future.failedFuture(ex));
});
}
public void fetchAll(String query, JsonArray params, Handler<AsyncResult<JsonArray>> handler) {
client.rxQueryWithParams(query, params)
.flatMapObservable(results -> Observable.fromIterable(results.getRows()))
.collect(JsonArray::new, JsonArray::add)
.subscribe(result -> {
logger.debug("Successfully executed query.");
handler.handle(Future.succeededFuture(result));
},
ex -> {
logger.error("Failed to execute query: {}.", query, ex.getMessage());
handler.handle(Future.failedFuture(ex));
});
}
}