Postgres Npgsql подключается медленнее, чем SQL Server - PullRequest
0 голосов
/ 29 августа 2010

Зачем подключаться к Postgres через Интернет или VPN медленнее, чем SQL Server?У меня есть тест

    DateTime now0 =  System.DateTime.Now;
    string sqlconnectsrting = "server=xxx.xxx.xxx.xxx;database=pubs;uid=sa;pwd=";
    for (int i = 0; i < 1000; i++)
    {
        SqlConnection connect = new SqlConnection(sqlconnectsrting);
        connect.Open();
        connect.Close();
    }
    System.DateTime now1 = System.DateTime.Now;
    Console.WriteLine(String.Format("SQL Connect time : {0}", now1 - now0));

    now0 = System.DateTime.Now;
    string npgconnectsrting = "Server=xxx.xxx.xxx.xxx;Port=5433;User Id=postgres;Password=postgres;Database=hr_data;";
    for (int i = 0; i < 1000; i++)
    {
        NpgsqlConnection connect = new NpgsqlConnection(npgconnectsrting);
        connect.Open();
        connect.Close();
    }
    now1 = System.DateTime.Now;
    Console.WriteLine(String.Format("Postgres Connect time : {0}", now1 - now0));

Когда подключение локальный, они похожи, но когда подключение через Интернет.SQL-соединение занимает 1-5 секунд, а postgres - 3-7 минут.Есть ли способ исправить это?

Туан Хоанг Ань

Ответы [ 3 ]

4 голосов
/ 29 августа 2010

Какая настройка для SSL?

SHOW ssl;

Создание SSL-соединения будет медленнее, даже если вы на самом деле не используете SSL. Выключите его, если вам не нужна дополнительная безопасность.

От 3 до 7 минут - от 180 до 420 секунд. Если вы создадите 1000 соединений, «только» потребуется от 0,18 до 0,42 секунды для каждого соединения. SQL Server не собирается устанавливать 1000 соединений в течение 1–5 секунд по сети, сеть будет работать слишком медленно. Похоже, пул соединений позволяет вам верить, что вы создали новое соединение.

0 голосов
/ 06 сентября 2010

Когда вы устанавливаете соединение, Npgsql пытается создать соединения minpoolsize.При первом подключении он запускает несколько запросов для проверки типов и некоторых поддерживаемых функций.Может быть, это замедляет ваши тесты.

Что странно, так это то, что Npgsql делает это только для первого соединения, так что после этого вы должны работать без проблем.Не могли бы вы протестировать только 2 цикла вместо 1000 и посмотреть, как это происходит?

0 голосов
/ 29 августа 2010

3-7 минут определенно слишком много для подключения (я не уверен, что это время для одного подключения или для 1000 подключений, которые вы пытаетесь)

Я почти уверен, что есть проблема с сетью.

Что именно вы имеете в виду под "через Интернет"? Эти серверы действительно находятся в общедоступном интернете? SQL Server и Postgres установлены на одном компьютере?

Если нет, где находятся эти машины? Если обе СУБД установлены на разных машинах, я бы посмотрел конфигурацию сети для сервера Postgres.

Помимо общей проблемы с Интернетом (например, медленной маршрутизации), это также может быть проблема с (физическим) сетевым интерфейсом. Однажды у нас это было с неисправной сетевой картой, которая пересылала каждый пакет 3-4 раза, что значительно замедляло работу.

...