导出 (0) 打印
全部展开

Azure SQL Database 故障排除

更新时间: 2012年10月

注:本页面内容可能不完全适用中国大陆地区运营的 Windows Azure服务。如要了解不同地区 Windows Azure 服务的差异, 请参考本网站.

本文档包含有关解决 Microsoft Microsoft Azure SQL Database 特有的问题的信息。

SQL Server 连接事件表

为了帮助跟踪数据库活动以及对数据库活动进行故障排除,Microsoft Azure SQL Database 提供了一组动态管理视图 (DMV),它们可记录与数据库连接有关的事件,其中包括:

  • 成功的连接

  • 失败的连接

  • 终止的连接

  • 限制

  • 死锁

在位于逻辑 master 数据库中的两个目录视图中收集和聚合事件:sys.database_connection_statssys.event_log。你可以将这些视图一起使用来对数据库活动进行故障排除。例如,你可以使用 sys.database_connection_stats 视图标识发生错误的时间间隔,然后使用 sys.event_log 视图显示那些错误的详细信息。

sys.database_connection_stats

此视图提供数据库连接成功和失败信息的摘要。此视图中包含的列和它收集的事件在 sys.database_connection_stats 中进行说明。

例如,以下查询显示数据库“my_user_db”的所有连接统计信息:

select * from sys.database_connection_stats
where database_name = 'my_user_db'
order by start_time desc

下面的示例显示了查询所生成的输出(未显示所有列):


start_time                  end_time                    success_count total_failure_count connection_failure_count
 --------------------------- --------------------------- ------------- ------------------- ------------------------
 2012-09-27 14:20:00.0000000 2012-09-27 14:25:00.0000000 20            0                   0 
 2012-09-27 14:25:00.0000000 2012-09-27 14:30:00.0000000 2             0                   0 
 2012-09-27 14:30:00.0000000 2012-09-27 14:35:00.0000000 7             0                   0 
 2012-09-27 14:35:00.0000000 2012-09-27 14:40:00.0000000 14            0                   0 
 2012-09-27 14:40:00.0000000 2012-09-27 14:45:00.0000000 26            120                 120 
 2012-09-27 14:50:00.0000000 2012-09-27 14:55:00.0000000 9             0                   0 


sys.event_log

此视图包含与连接有关的事件的详细信息。此视图中包含的列和它收集的事件类型在 sys.event_log 中进行说明。

例如,以下查询显示数据库“my_user_db”的所有失败连接:

select * from sys.event_log 
where database_name ='my_user_db'
and event_type <> 'connection_successful'
order by start_time desc

此查询生成以下输出(未显示所有列):


event_type              event_subtype_desc       event_count description                                            
----------------------- ------------------------ ----------- -------------------------------------------------------
connection_failed       client_close             1           Client may have timed out when establishing connection.
connection_failed       client_close             1           Client may have timed out when establishing connection.
connection_terminated   idle_connection_timeout  1           Connection has been idle for longer than system defined
connection_terminated   idle_connection_timeout  1           Connection has been idle for longer than system defined
connection_failed       login_failed_for_user    90          Login failed for user.                                 
connection_terminated   idle_connection_timeout  1           Connection has been idle for longer than system defined
connection_failed       login_failed_for_user    110         Login failed for user.                                 
connection_failed       client_close             125         Client may have timed out when establishing connection.
connection_terminated   idle_connection_timeout  1           Connection has been idle for longer than system defined
connection_terminated   idle_connection_timeout  2           Connection has been idle for longer than system defined


下面的示例查询显示了在同一数据库中的所有死锁实例(同样,示例输出中未显示所有列):


select * from sys.event_log 
where database_name = 'my_user_db'
and event_type='deadlock'
order by start_time desc

event_category  event_type              event_subtype_desc       event_count description        
--------------- ----------------------- ------------------------ ----------- ------------------
engine          deadlock                deadlock                 1           Deadlock occurred. 
engine          deadlock                deadlock                 1           Deadlock occurred.


在网格模式下运行此查询将得到 additional_data 列中的死锁图形。

在以下示例中,此查询查找数据库上发生的所有限制事件:


select * from sys.event_log 
where database_name = 'my_user_db'
and event_type like 'throttling%'
order by start_time desc

event_type                   event_count description
---------------------------- ----------- ----------------
throttling_long_transaction  2           The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.


登录失败

Microsoft Azure SQL Database 要求使用 SQL 身份验证。如果你不能成功登录,则你的凭据无效或是你请求的数据库不可用。

如果需要找回登录名或密码,请与你的服务管理员联系,该管理员可以授予你对服务器和数据库的正确访问权限。服务管理员还可以使用 Azure 平台管理门户重置自己的密码。

服务不可用或不存在

如果服务器已设置且 Microsoft Azure SQL Database 服务可用(你可以使用 Azure 运行状态页进行检查),则可能的原因是你的现场安装中存在配置有问题。例如,你可能无法解析名称(可以使用 tracert 之类的工具进行测试),防火墙可能阻止 Azure SQL Database 使用的端口 1433,或是你可能使用了未正确配置的代理服务器。使用在 SQL Server 中使用的相同方法来解决这些难题。

note注意
若要查看所有 Azure 平台服务的状态,请使用 Azure 运行状态页。该状态页包含当前服务状态信息和历史服务数据。若要连接到该状态页并实时检查 Microsoft Azure SQL Database 服务的可用性,请单击 Azure 支持页上的“Service Dashboard”按钮,或单击 Azure 运行状态直接转到状态页。

常规网络错误

由于 Microsoft Azure SQL Database 可能在以下情况下断开用户连接,你可能会收到常规网络错误:

  • 当连接在过长时间内处于空闲状态。

  • 当连接消耗过多的资源,或在过长时间内持有事务。

  • 在服务器太忙时。

系统尽可能在断开用户连接之前发送表格格式数据流 (TDS) 错误标记。若要改进应用程序体验,我们建议你在你的 Azure SQL Database 应用程序中实现重试逻辑,以捕获这些错误。当错误发生时,重新建立连接,然后重新执行失败的命令或查询。

note注意
可允许的最大持续时间随资源使用情况而变化。空闲 30 分钟的已登录会话将被自动终止。

有关如何处理失去连接错误的详细信息,请参阅 TechNet Wiki 中的文章 Azure SQL Database 中的连接管理。本文列出了连接断开的原因,并且提供了关于如何在 Azure SQL Database 中管理连接生命周期的指导原则和最佳编码做法。

优化查询性能

若要提高 Azure SQL Database 中的性能,请使用通常对 SQL Server 使用的相同方法。有关详细信息,请参阅 SQL Server 联机丛书中的查询疑难解答

SQL Server 错误

Microsoft Azure SQL Database 使用 SQL Server 错误消息的子集。有关 SQL Server 错误的详细信息,请参阅 SQL Server 联机丛书中的错误和事件参考(数据库引擎)

另请参见

社区附加资源

显示:
© 2014 Microsoft