Долгое время соединения с Azure Postgres

У меня есть база данных Azure для службы PostgreSQL (PaaS). Когда я пытаюсь запросить его с помощью psql, тогда даже простой SELECT запрос из одной таблицы занимает ~ 1,5 секунды. Когда я нахожусь в консоли postgres, проблем нет, запросы выполняются менее 100 мс. Что может вызвать такую ​​задержку во времени соединения?

for I in {1..15} ; do /usr/bin/time -f "%es" psql -U postgres@user  -h  my-server.postgres.database.azure.com database_name -c "SELECT count(*) FROM table_name" > /dev/null ; done
1.86s
1.95s
1.60s
1.03s
1.59s
1.58s
1.60s
1.68s
1.60s
1.60s
1.62s
1.63s
1.61s
1.83s
1.70s

К вашему сведению: в таблице 11 записей

ОБНОВЛЕНИЕ Ниже тестового доказательства это задержка подключения, а не сам запрос на выполнение в postgres

$ psql -t -U postgres@resource-group  -h  postgresql-project.postgres.database.azure.com stage_table <<EOF
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
SELECT count(*), clock_timestamp() FROM my_table;
EOF
    17 | 2019-07-23 13:26:11.475655+00
    17 | 2019-07-23 13:26:11.506887+00
    17 | 2019-07-23 13:26:11.553769+00
    17 | 2019-07-23 13:26:11.585022+00
    17 | 2019-07-23 13:26:11.616273+00
    17 | 2019-07-23 13:26:11.64752+00
    17 | 2019-07-23 13:26:11.678787+00
    17 | 2019-07-23 13:26:11.710046+00
    17 | 2019-07-23 13:26:11.74129+00
    17 | 2019-07-23 13:26:11.772524+00
    17 | 2019-07-23 13:26:11.803794+00
    17 | 2019-07-23 13:26:11.835042+00
    17 | 2019-07-23 13:26:11.86629+00
    17 | 2019-07-23 13:26:11.897517+00
    17 | 2019-07-23 13:26:11.944397+00
$ 

Я также читал о accelerated networking на Azure, но похоже, что это применимо только к самой виртуальной машине. Могу ли я включить это ускорение в службе PostgreSQL? https://docs.microsoft.com/en-us/azure/virtual-network/create-vm-accelerated-networking-cli


person sobi3ch    schedule 18.07.2019    source источник
comment
Базы данных Azure имеют проблемы с производительностью при установлении новых подключений. После этого все выглядит нормально. Когда я пытался подключиться с отключенным SSL, я все еще вижу, что SSL включен, это явно указывает на то, что между клиентом и базой данных есть прокси. Прокси-сервер может вызвать задержку при запросах и установлении соединения.   -  person Sirisha Chamarthi    schedule 20.09.2019


Ответы (1)


Задержка - это длительное время, необходимое для установления соединения с базой данных.

1,5 секунды довольно хромает. Но это не обязательно должно быть убийственным, потому что вы должны использовать пул соединений и держать сеансы базы данных открытыми.

Для уверенности можно сравнить результат с

psql -U postgres@user -h  my-server.postgres.database.azure.com database_name <<EOF
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
SELECT count(*), clock_timestamp() FROM table_name;
EOF

Это должно быть быстрее. Разница будет во времени подключения.

person Laurenz Albe    schedule 18.07.2019
comment
Добавление ссылки MSDN для того же вопроса: social.msdn.microsoft.com/Forums/en-US/ - person Mike Ubezzi MSFT; 25.07.2019
comment
Вы работаете на виртуальной машине Azure или используете базу данных Azure для службы PostgreSQL PaaS? - person Mike Ubezzi MSFT; 25.07.2019