0

为什么通过 Internet 或 VPN 连接到 postgres 比 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 分钟。有没有什么办法解决这一问题?

团黄英

4

3 回答 3

4

SSL的设置是什么?

SHOW ssl;

即使您实际上不使用 SSL,创建 SSL 连接也会更慢。如果您不需要额外的安全性,请将其关闭。

3 到 7 分钟大约是 180 到 420 秒,如果创建 1000 个连接,则每个连接“仅”需要 0.18 到 0.42 秒。SQL Server 不会在 1 到 5 秒内通过网络建立 1000 个连接,网络会太慢。听起来像是一个连接池,让您相信您已经创建了一个新连接。

于 2010-08-29T15:56:33.447 回答
0

3-7 分钟绝对是一个连接的时间(我不确定那个时间是用于单个连接还是用于您正在尝试的 1000 个连接)

我很确定网络有问题。

“通过互联网”到底是什么意思?这些服务器真的位于公共互联网上吗?SQL Server 和 Postgres 是否安装在同一台机器上?

如果没有,这些机器在哪里?如果两个 DBMS 都安装在不同的机器上,我会查看 Postgres 服务器的网络配置。

除了一般的“互联网”问题(例如缓慢的路由),它也可能是(物理)网络接口的问题。我们曾经遇到过有故障的网卡,每个数据包都要重新发送 3-4 次,这大大减慢了速度。

于 2010-08-29T12:12:44.200 回答
0

当你建立连接时,Npgsql 会尝试创建 minpoolsize 连接。在第一次连接时,它会运行一些查询来检查类型和一些支持的功能。也许这会减慢您的测试速度。

奇怪的是 Npgsql 只对第一个连接执行此操作,因此,之后您应该可以顺利运行。您介意只测试 2 个循环,而不是 1000 个循环,看看效果如何?

于 2010-09-06T17:05:23.707 回答