接上文:SQL Azure运用最佳实践进行数据库部署(2)
对于运行一个较长的事务,或者说该事务在连接的情况下被空闲的时间较长,SQL Azure就会切断现有连接。如果为了避免被SQL Azure切断,就必须在5分钟以内解决以上两个问题。就短短的那5分钟时间,你将如何快速的去处理呢?这就需要你在最短时间内保持连接打开避免闲置事务。当你执行完一条命令是,赶紧在有限时间内关闭连接同时把链接返回到池中。
演示代码如下:
using (SqlConnection cn = new SqlConnection(…))
{
cn.Open();
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandText = …;
…
}
}
当链接放入池中时,连接失效的几率是最小的。不过,如果你的命令执行超过五分钟并且很难处理则您的连接将由SQL Azure关掉。您可以把更新划分为若干批量的小任务。除此之外,需要确保数据库是索引良好的。
由于系统负载过高,SQL Azure限制数据库活动时您的连接也会断开。
为了防止在任何情况下的连接断开,应开发SQL Azure的应用程序使它们能够处理连接的错误并且不用用户参与即可透明的重连接。
此外,您可能需要添加代码来处理因为超时或者连接断开时对数据库进行的更新重试。这将是大量的额外代码,但幸运的是微软已经做了一些工作。在微软AppFabric客户咨询小组网站上检索到“Best Practices for Handling Transient Conditions in SQL Azure Client Applications”这篇文章。该文介绍了可能遇到的连接错误并给出如何处理它们的示例代码。该文结尾有一个链接可以让你下载示例代码。
最后一个建议是如何获得SQL Azure的客户支持。如果您的应用程序遇到问题并需要帮助,请先确保您获得应用程序会话的ID。SQL Azure在他们的网站上记录错误和活动。如果你给他们会话ID,支持团队可以更容易弄清楚是怎么回事。
下面的C#代码显示了如何检索连接的会话ID:
cmd.CommandText = "Select CONVERT(nvarchar(36), CONTEXT_INFO())";
SessionId = new Guid(cmd.ExecuteScalar().ToString());
本文讨论了若干开发人员和数据库管理员在与SQL Azure打交道时可能遇到的几个问题,并提供了如何处理这些问题的指南和最佳实践。