MSSQL 上的长 运行 查询

Long Running Query on MSSQL

在我的团队中,我们需要非常频繁地连接到 Oracle、Sybase 和 MSSQL...我们使用 Oracle 的 SQLDeveloper 3.3.2 版本来连接所有 3 个(使用第三方库)。这个工具经常有一个问题 select 查询永远不会结束...即使我们得到结果,它也会一直持续 运行... 因此我们会收到很长时间的数据库警报 运行 查询...

例如

Select * 来自产品

如果产品有百万条记录,则 SQLDeveloper 将显示最高记录,但在后台查询将继续 运行。

如何解决这个问题? 要么 有没有更好的产品可以满足我们的需求。

您的查询 - select * from products - 要求数据库引擎将数百万条记录发送到您的客户端应用程序(在本例中为 SQLDeveloper)。

虽然 SQLDeveloper(以及许多其他类似设计的 GUI)会向您显示前 30(或 50、或 100 等)行,但就数据库引擎而言,您仍然要求查看数百万行行,因此您的查询在数据库引擎中继续 'run'。

例如,在 Sybase ASE 中,查询将显示 'send sleep' 状态,这意味着数据库引擎正在等待客户端应用程序请求下一批记录以发送连接。

对于'solve'这个问题你有几种选择:

  • 使用 SQLDeveloper:滚动浏览(即显示在您的显示器上) 数百万行结果集的其余部分[可能不是你想要的 做;可能您没有 time/desire 来点击 'Next' 按钮 100的千次]

  • 在您 received/viewed 第一组 记录 [不推荐,因为有时您 'forget' 杀死您的查询,从而激怒您的 DBA]

  • 编写您的查询以仅提取您 真正 want/need 要查看的记录(例如,添加 WHERE 子句限制行集)

  • 看看 SQLDeveloper 是否有任何类型的配置选项来 自动终止任何 'long running' 查询 [我不知道这是不是偶数 在客户端应用程序中可行]

  • 查看 DBA 是否可以为您的登录配置资源限制(例如, 如果查询 运行 超过 XX 秒,则自动终止查询)