У меня есть базовая c конфигурация pgbouncer, настроенная для экземпляра Amazon EC2.
Мой клиентский код (лямбда-функция * 1023 или веб-сервер localhost при разработке) выполняет SQL запросов в мою базу данных через pgbouncer.
В настоящее время для выполнения каждого запроса требуется 150-200 мс, причем около 80% этого времени занимает время, необходимое для установления соединения.
Вот как я получаю соединение:
long start = System.currentTimeMillis();
Connection conn = DriverManager.getConnection(this.url, this.username, this.password);
log.info("Got connection in " + (System.currentTimeMillis() - start) + "ms")
this.url
- это просто расположение экземпляра pgbouncer. Вот как выглядит измеренная задержка, где Got connection
взято из приведенного выше фрагмента кода, а Executed in
- это другое время, которое измеряет истекшую длительность после выполнения PreparedStatement
. Первое соединение, как правило, немного медленное, что нормально, последующее соединение занимает примерно 100 мс довольно стабильно.
DBManager - Got connection in 190ms
DBManager - Executed in 232ms
DBManager - Got connection in 108ms
DBManager - Executed in 132ms
DBManager - Got connection in 108ms
DBManager - Executed in 128ms
Есть ли способ сделать это быстрее? Или я в основном застрял с минимальной задержкой ~ 100 мс на моих запросах? Я получаю аналогичные скорости от Lambda и localhost, и, к сожалению, я не могу выбросить Lambda в один и тот же VP C из-за случайной задержки холодного старта в 8-10 секунд после установки нового сетевого интерфейса Elasti c при использовании Лямбда в VP C.
Я впервые работаю с такими настройками, поэтому не знаю, с чего начать. Могу ли я выжать более высокую скорость, добавив больше мощности (RAM / CPU) в базу данных или pgbouncer? Разве я не должен получать новое соединение для каждого запроса (но это будет означать наличие пула соединений для Lambda, а затем отдельного пула pgbouncer)?
Я чувствую, что это, безусловно, довольно распространенная проблема, поэтому должны быть некоторые хорошие способы ее решения, но я ничего не смог найти.