导出 (0) 打印
全部展开
此主题尚未评级 - 评价此主题

Windows Azure SQL Database 故障排除

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

本文档包含有关解决专门针对 Microsoft Windows Azure SQL Database 的问题的信息。 

SQL Server 连接事件表

为了帮助跟踪数据库活动以及对数据库活动进行故障排除,Windows 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.


登录失败

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

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

服务不可用或不存在

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

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

常规网络错误

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

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

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

  • 在服务器太忙时。

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

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

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

优化查询性能

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

SQL Server 错误

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

另请参见

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈

社区附加资源

添加
显示:
© 2014 Microsoft. 版权所有。