Как я могу ускорить PostgreSQL подключений от pgbouncer? (получение соединения составляет ~ 80% задержки) - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть базовая 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)?

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

1 Ответ

2 голосов
/ 06 февраля 2020

Вы должны попросить поставщика выяснить, какая часть времени затрачивается на маршрут между вами и pgBouncer и pgBouncer и сервером базы данных. Я предполагаю, что это первая часть.

Если вы хотите иметь низкую задержку, размещенная база данных может не подойти вам.

Я бы предложил встроить пул соединений в ваше приложение. или используйте pgBouncer локально, чтобы вам не приходилось постоянно устанавливать sh соединения с хост-системами.

...