为什么通过互联网或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答案 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个,看看它是怎么回事?