Задержки при выполнении асинхронного вызова по вертикали базы данных - PullRequest
0 голосов
/ 26 мая 2020
• 1000 Мы тестируем 55 TPS, и мы используем начальное соединение 100 db с максимальным количеством соединений до 250 db в пуле.

Ниже приведен снимок из Dynatrace (время ожидания для вызова клиента JDB C заняло 6 секунд, хотя getConnection заняло миллисекоды): enter image description here Я думаю, проблема связана с рабочим поток, шина событий или вертикаль базы данных перегружены. Пожалуйста, найдите ниже код вызова службы 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));
                    });
}

}

...