我正在编写一些代码,将大量数据导入三个表中,目前这三个表的行数约为600万。我想在事务中这样做,这样如果有任何问题或用户取消导入,就不会导入任何内容。这在我自己的开发机器上运行良好,但在速度较慢的amazon ec2实例和micro-sql实例上,我得到了以下异常:
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding
现在我知道提交最终会完成,因为当我查看时,数据就在表中,所以我的问题是;如果不将connection timeout属性添加到我的连接字符串中(我只希望这一个操作不超时),这能很容易地避免吗?还是这真的很难/很危险?我不确定我是否应该导入到保留表中,然后在准备好时调用存储过程来移动数据,因为我认为这将导致更短的事务)
我使用的是Ms Sql服务器2012。如果我需要添加更多数据,请发表评论。非常感谢您的帮助
检查SP的获取时间。。如果你有任何第三方工具,如Redgate或Avicode,你可以找到它。。或者使用Profiler来找出它。。然后查看SP或查询的执行计划。。如果找到任何密钥查找或RID查找,请先解决它,然后重试。。