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,即复制请求! TM Request
表示DTC事务,我们不使用分布式事务。您还可以看到SE_REPL_COMMIT_ACK
的wait_type,这再次暗示了复制。
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
ms,即134.9分钟!!!
有关此问题的详细信息,请参阅以下论坛。 http://social.technet.microsoft.com/Forums/en-US/ssdsgetstarted/thread/c3003a28-8beb-4860-85b2-03cf6d0312a8
在与我的沟通中,我得到了以下答案 微软(我们在欧盟的15个数据库中有4个看过这个问题 数据中心):
问题:这些软件是否有变化? 过去三周的节流限制,即我的问题 开始了吗?
答案:不,没有。
问题:我们有办法吗? 防止或被警告我们正在接近极限?
答案:不是。问题 可能不是由您的申请引起的,但可能是由其他人引起的 租户依赖相同的物理硬件。换句话说,你的 应用程序可以承受很小的负载,但仍会遇到问题。 换句话说,您自己的流量可能是导致此问题的原因,但是 它也可以由依赖于它的其他租户引起 物理硬件。事先没有办法知道这个问题 很快就会发生 - 它可以随时发生而不会发出警告。 SQL Azure运营团队不会监控此类错误,因此他们也是如此 不会自动尝试为您解决问题。所以,如果你跑 你有两个选择:
创建数据库的副本并使用它,并希望将数据库放置在负载较小的另一台服务器上。
- 醇>
联系Windows Azure支持并告知问题并让他们为您执行选项1
答案 0 :(得分:9)
您可能遇到了目前困扰很多人使用Sql Azure(包括我的公司)的SE_REPL *问题。
当您遇到超时时,请尝试检查等待类型的等待请求:
运行以下命令检查当前连接上的等待类型:
SELECT TOP 10 r.session_id, r.plan_handle,
r.sql_handle, r.request_id,
r.start_time, r.status,
r.command, r.database_id,
r.user_id, r.wait_type,
r.wait_time, r.last_wait_type,
r.wait_resource, r.total_elapsed_time,
r.cpu_time, r.transaction_isolation_level,
r.row_count
FROM sys.dm_exec_requests r
您还可以通过运行以下方式检查此类别的历史记录:
SELECT * FROM sys.dm_db_wait_stats
ORDER BY wait_time_ms desc
如果您看到很多SE_REPL *等待类型并且这些类型在您的连接上保持设置任何时间长度,那么基本上您已经搞砸了。 微软已经意识到了这个问题,但我现在已经开通了一个星期的支持票,他们现在仍然在努力。
当Sql Azure复制从属落后时,会发生SE_REPL *等待。 基本上整个db在复制赶上时挂起查询:/
因此,实质上使Sql Azure高度可用的方面导致数据库变得随机不可用。 如果没有杀死我们,我会嘲笑讽刺。