SQL Azure 问题。
我有一个问题,在我们的(asp.net)网站上表现为以下异常:
超时已过。在操作完成之前超时时间已过或服务器没有响应。该语句已终止。
它还导致更新和插入语句永远不会在 SMSS 中完成。查询时不存在任何 X 或 IX 锁:查询或sys.dm_tran_locks
时不存在事务。sys.dm_tran_active_transactions
sys.dm_tran_database_transactions
数据库中的每个表都存在问题,但同一实例上的其他数据库不会导致问题。问题的持续时间可以从 2 分钟到 2 小时不等,并且不会在一天中的任何特定时间发生。
数据库未满。
在某一时刻,这个问题并没有自行解决,但我能够通过查询sys.dm_exec_connections
找到运行时间最长的会话,然后终止它来解决这个问题。奇怪的是,连接已经存在 15 分钟,但锁定问题已经存在超过 3 个小时。
还有什么我可以检查的吗?
编辑
根据下面保罗的回答。在他回答之前,我实际上已经找到了问题。我将在下面发布我用来解决这个问题的步骤,以防他们帮助其他人。
当存在“超时期限”时,将运行以下查询。
select * from sys.dm_exec_requests
正如我们所见,所有的 WAIT 请求都在等待会话 1021,这是复制请求!表示 DTC事务TM Request
,我们不使用分布式事务。您还可以看到 wait_typeSE_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 运营团队不会监控此类错误,因此他们不会自动尝试为您解决问题。因此,如果您遇到它,您有两种选择:
创建您的数据库的副本并使用它,并希望将数据库放置在负载较小的另一台服务器上。
联系 Windows Azure 支持并告知问题并让他们为您执行选项 1