Postgres Npgsql连接比SQL Server慢

时间:2010-08-29 11:57:32

标签: postgresql npgsql

为什么通过互联网或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));

当connect是localhost时,它们是相似的,但是当连接是通过Internet时。 SQL连接需要1-5秒,但postgres需要3-7分钟。 无论如何要解决这个问题吗?

Tuan Hoang Anh

3 个答案:

答案 0 :(得分:4)

SSL的设置是什么?

SHOW ssl;

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

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

答案 1 :(得分:0)

连接需要3-7分钟(我不确定这个时间是针对单个连接还是针对您正在尝试的1000个连接)

我很确定网络存在问题。

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

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

除了一般的“互联网”问题(例如慢速路由)之外,它也可能是(物理)网络接口的问题。我们曾经使用过错的网卡,将每个数据包重新发送3-4次,这大大减慢了速度。

答案 2 :(得分:0)

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

奇怪的是,Npgsql只对第一个连接执行此操作,因此,您应该在此之后顺利运行。你是否介意只测试2个循环,而不是1000个,看看它是怎么回事?