MSSQL上的长时间运行查询

时间:2017-06-19 13:16:36

标签: oracle sybase mssql-jdbc

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

E.g。

从产品中选择*

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

解决'这个问题你有几个选择:

  • 使用SQLDeveloper:滚动浏览(即在显示器上显示) 数百万行结果集的其余部分[可能不是你想要的 做;可能你没有时间/愿望去打下一个'下一个'按键 100次成千上万次

  • 在您收到/查看第一组后,终止您的查询 记录[不建议,因为很可能有时候你 '忘记'杀死你的查询,从而赢得DBA的愤怒]

  • 编写查询以仅回退真正想要/需要查看的记录(例如,添加 WHERE 子句来限制行集)

  • 查看SQLDeveloper是否有任何类型的配置选项 自动杀死任何长时间运行的'查询[我不知道这是否均匀 在客户端应用程序中可行]

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