SQL Azure出现问题。
我们的(asp.net)网站上出现以下异常:
操作超时。在操作完成之前超时期已过或者服务器未响应。语句已终止。
它还导致SMSS中的更新和插入语句无法完成。查询sys.dm_tran_locks
时不存在X或IX锁,查询sys.dm_tran_active_transactions
或sys.dm_tran_database_transactions
时也不存在任何事务。
该问题存在于数据库中的每个表中,但是同一实例上的其他数据库不会引起此问题。问题的持续时间可能从2分钟到2小时不等,并且不会在任何特定的一天时间发生。
数据库没有满。
有一次我无法解决这个问题,但我能够通过查询sys.dm_exec_connections
找到最长运行的会话,然后将其结束来解决问题。奇怪的是,该连接已经存在15分钟了,但锁定问题已经存在了3个多小时。
还有其他什么我可以检查吗?
编辑
根据Paul以下的答案。实际上,在他回答之前我已经跟踪到了问题。如果以下步骤对其他人有帮助,我将在下面发布我用于解决此问题的步骤。
当出现"超时期"时,运行以下查询:
select * from sys.dm_exec_requests
我们可以看到,所有的WAIT请求都在等待会话1021,而该会话是复制请求!TM Request
表示DTC事务,我们不使用分布式事务。您还可以看到SE_REPL_COMMIT_ACK
的等待类型,这再次说明了复制。
select * from sys.dm_tran_locks
再次等待会话1021
SELECT * FROM sys.dm_db_wait_stats ORDER BY wait_time_ms desc
是的,SE_REPL_CATCHUP_THROTTLE
的总等待时间为8094034毫秒,即134.9分钟!!!
另请参阅以下论坛以了解此问题的详细信息。 http://social.technet.microsoft.com/Forums/en-US/ssdsgetstarted/thread/c3003a28-8beb-4860-85b2-03cf6d0312a8
我在与 Microsoft 交流中得到了以下答复(我们在欧盟数据中心的15个数据库中有4个出现了此问题):
问题:在过去的三周内,这些软限制是否有更改,即自我的问题开始以来?
答案:没有。
问题:有什么方法可以防止或警告我们接近限制?
答案:没有。该问题可能不是由您的应用程序引起的,而可能是由依赖于相同物理硬件的其他租户引起的。换句话说,您的应用程序可能负载很少,但仍可能遇到问题。换句话说,您自己的流量可能是此问题的原因,但同样也可能是依赖于相同物理硬件的其他租户引起的。没有办法事先知道问题将很快发生 - 它可能随时发生而没有警告。SQL Azure 运营团队不监视此类错误,因此他们不会自动尝试为您解决问题。因此,如果您遇到问题,有两个选择:
创建数据库的副本并使用它,并希望 DB 放置在负载较轻的另一台服务器上。
联系 Windows Azure 支持,并告知他们有关问题,让他们为您执行选项 1。
SE_REPL_SLOW_SECONDARY_THROTTLE
,但微软支持团队仍然很慢承认这个问题。我不得不将受影响的数据库从SQL Azure迁移出去。 - Michael Petito