系统迁移到AWS上(Web+WCF+RDS),果断采用的RDS sql server , 不想再花费精力及备份数据库。 但从一开始 WCF连结RDS 就不定时爆出如下Error:

 (provider:  TCP  Provider,  error:  0  -  The  semaphore  timeout  period  has  expired


   在AWS forum 上发了咨询贴 ,也咨询了AWS 专家,回复一般是优化sql ,但我看看数据库资料,虽然加了一些index,但error持续,并且数据量还远不到要深度优化的地步。并且以前运行在机房时都是好好的,难道只能升级RDS DB 到large(只有RDS数据库级别比原先差),但目前RDS CPU ,connection,IPOS 都还很正常,不想花那冤枉钱。


   Google "semaphore  timeout" 发现这是windows 网络issue ,参见:

http://support.microsoft.com/kb/325487?wa=wsignin1.0

       但部署在AWS 上的EC2  可控的只有操作系统了,在Aws forum逛了很久很久,终于发现新的关联贴

https://forums.aws.amazon.com/thread.jspa?messageID=477159


正解如下

     IPv4 checksum offload - disable

     large receive offload - disable

     large send offlaod - disable

     tcp checksum offload - disable

     上图:

120644622.png

120646377.png




结果 : 目前已运行近一周,还未出现此error ,看来有效,还会持续观察。


   此设定的用意是让网卡硬件自己计算校验和,而不是交给操作系统的 tcp/ip 协议栈来计算。看来Ec2 Windows instance 有些Bottleneck ,也可能操作系统需要更改一些设定项吧(待查)。

         当然如果你的数据库达到百万级或者更高,也需考虑优化sql。