剧集

SQL Server 命令超时 - 应用程序超时 - 扩展事件注意

使用 ODBC 或 SqlClient 从 SQL Server 访问数据时,如果默认情况下,如果服务器在特定 (时间段内没有响应,) 默认为 30 秒,查询将被取消。 ODBC 或 SqlClient 将在将查询发送到 SQL Server 后启动计时器,如果在 30 秒内没有来自服务器的结果,查询将被取消,并将超时错误消息发送到应用程序。 如果网络数据包 (包含查询结果,) 在 30 秒内收到,如果预期其他网络数据包 (无法容纳在第一个网络数据包) 的其他行,则计时器将重新启动,如果下一个网络数据包在此 30 秒内未收到,则将取消查询。

SQL 命令超时的常见原因是长时间执行的非最佳架构或低效查询,或者错过索引或锁定等待问题。 优化查询而不是增加 SQL 命令超时设置非常重要。

在视频中,演示了一个示例,其中减少了网络数据包大小消除了超时,本演示介绍了如何涉及网络数据包重置计时器,并更好地了解超时。 更改网络数据包大小不是避免超时、优化非最佳架构或低效查询或添加索引或避免锁定等待的解决方案。

若要标识导致 SQL 命令超时错误的命令,可以使用扩展事件并监视事件“sqlserver.attention”。 视频中使用的扩展事件脚本在 www.sqlvideo.com/xevents 可用。

在 SQL Server Management Studio 中,可以使用连接对话框中的“选项”更改 SQL 命令超时。 默认情况下,此值设置为“0”,这意味着不会超时。 执行查询或存储过程时,如果单击“取消”按钮 (红色方) ,则相同的注意力将发送到 SQL Server (,例如 SQL 命令超时) 。 这反过来会在扩展事件中生成“sqlserver.attention”事件。

在下面的视频中,可以看到 SQL 命令超时的示例。 SQLTest 工具会为你模拟动手实验室,无需注册。 观看视频时,可以练习在线动手示例。