如何通过高延迟连接使用Npgsql高效执行Postgresql查询?

时间:2015-12-03 09:35:28

标签: c# postgresql ssh tcp npgsql

当我在高延迟连接(200-300 ms)内使用Npgsql选择充满字符串数据的大表时,我遇到了一些麻烦。 总字段值大小类似于256kb。 我完全确定问题与网络传输有关,因为如果我在本地执行相同的查询,它会在非常短的时间内执行(10 ms - 20 ms),而不是执行查询通过慢速连接需要20-30秒。 此外,如果我使用长度(字段)测量表,则查询将在适当的时间(1-2秒)内执行。 我在不同的pc,不同的postgresql版本和npgsql上遇到了这个问题。 我认为这个问题与数据包的大小有关..也许增加缓冲区可以解决我的问题,但是,怎么做呢?在postgres?还是在npgsql中?

1 个答案:

答案 0 :(得分:2)

根据评论,您正在使用SSH隧道。

像SSH这样的TCP-in-TCP隧道对于承载大量数据来说是非常糟糕的。期待它表现得非常糟糕。拥塞控制和窗口缩放不能正常工作,重传是一个问题,重新排序和重组是低效的,慢启动不能正常工作等。

不要那样做。使用带有SSL的直接TCP / IP,或使用基于UDP的隧道/ VPN。

PostgreSQL的协议对流水线非常友好,并且每个字段或获取结果时每行获取的往返次数为零。你只需继续阅读,直到没有什么可读的。所以往返延迟不应该是这里的问题。

这很可能是隧道引起的问题。