在我的团队中,我们需要经常连接到Oracle,Sybase和MSSQL ……我们使用Oracle的SQLDeveloper 3.3.2版本来连接所有3个(使用第三方库)。这个工具经常有一个问题……
您的查询 - select * from products - 要求数据库引擎向您的客户端应用程序发送数百万条记录(在本例中为SQLDeveloper)。
select * from products
虽然SQLDeveloper(以及类似设计的许多其他GUI)将显示前30行(或50或100等),但就数据库引擎而言,您仍然要求查看数百万行,因此您的查询继续在数据库引擎中“运行”。
例如,在Sybase ASE中,查询将显示状态为“send sleep”,这意味着数据库引擎正在等待客户端应用程序请求下一批记录向下发送连接。
要“解决”这个问题,你有几个选择:
使用SQLDeveloper:滚动(即显示在你的显示器上) 数百万行结果集的其余部分[可能不是你想要的 做;可能你没有时间/愿望点击“下一步”按钮 成千上万的]
在收到/查看第一组后,终止查询 记录[不建议,因为很可能有时候你 '忘记'杀死你的查询,从而赢得你的DBA的愤怒]
编写您的查询以仅撤回您的记录 的 真 强> 想要/需要看(例如,添加一个 的 哪里 强> 子句限制行集)
看看SQLDeveloper是否有任何类型的配置选项 自动杀死任何“长时间运行”的查询[我不知道这是否是偶数 在客户端应用程序中可行]
看看DBA是否可以使用资源限制配置您的登录(例如, 如果运行超过XX秒,则自动终止查询)