почему установление соединения PostgreSQL связано с процессором - PullRequest
0 голосов
/ 27 октября 2018

У меня есть бэкэнд C #, работающий на AWS Lambda. Он подключается к базе данных PostgreSQL в том же регионе.

Я заметил очень медленное время запуска при холодном запуске после добавления кода подключения к БД. После выделения большего объема памяти для моей лямбда-функции время выполнения значительно сократилось.

Время выполнения, измеренное с помощью лямбда-консоли:

  • 128 МБ (~ 15,5 с)
  • 256 МБ (~ 9 секунд)
  • 384 МБ (~ 6 секунд)
  • 512 МБ (~ 4,5 с)
  • 640 МБ (~ 3,5 с)
  • 768 МБ (~ 3 с)

Напротив, после комментирования кода подключения к БД:

  • 128 МБ (~ 5 с)
  • 256 МБ (~ 2,5 с)

Таким образом, открытие соединения с БД сильно повлияло на время выполнения.

Согласно документации AWS:

В модели ресурсов AWS Lambda вы выбираете объем памяти, который вы хотите для вашей функции, и выделяются пропорциональные мощности процессора и другие ресурсы.

Поскольку пиковое использование памяти постоянно оставалось на уровне ~ 45 МБ, это явление, по-видимому, предполагает, что установление соединения с базой данных является вычислительно-интенсивной операцией. Если так, то почему?

Код, о котором идет речь (я использую Npgsql ):

var conn = new NpgsqlConnection(Db.connStr);
conn.Open();
using(conn)
{ // print something }

Обновление 1

Я установил экземпляр MariaDB с той же конфигурацией и провел некоторое тестирование.

Использование MySql.Data для синхронной работы:

  • 128 МБ (~ 12,5 с)
  • 256 МБ (~ 6,5 с)

Использование MySqlConnector для асинхронной работы:

  • 128 МБ (~ 11 сек)
  • 256 МБ (~ 5 с)

Интересно, что время выполнения на моем ноутбуке увеличилось с ~ 4 секунд (для Npgsql) до 12 ~ 15 секунд (для MySql.Data и MySqlConnector).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...