【问题标题】:Alter new and existing session Command Timeout value更改新的和现有的会话命令超时值
【发布时间】:2013-02-19 13:53:56
【问题描述】:

我是一名自学成才的 DBA,在制造环境中到处都是喜欢摆弄的工程师。 虽然我没有给他们系统管理员或任何明确的额外权限,但我对一些运行“杀手”查询的工程师有疑问,其中一些是 io 密集型的。 考虑到连接的默认命令超时时间通常为 30 秒,这通常不会成为问题,但其中一些工程师购买了 SQL Developer,纯粹是为了自动完成功能,当然这默认情况下会将它们与无限的“命令超时”连接起来。

我想做的,在某种程度上,是改变一个/或新的连接/会话,并将它们的 CommandTimeout 设置为更合理的值,可能小于 30 秒。 对于新连接,我设想它是某种数据库触发器,然后在其上下文中执行命令? 现有的连接,也许系统表中有一些可怕的东西?

【问题讨论】:

    标签: session sql-server-2008-r2 connection command-timeout


    【解决方案1】:

    很遗憾,您无法覆盖客户端 CommandTimeout 值。您可能已经注意到它是客户端配置,而不是与实例相关的配置。

    但是,您可以使用查询(资源)调控器来避免长时间运行的查询。

    我建议进一步阅读这个主题:

    http://msdn.microsoft.com/en-us/library/bb933866.aspx

    http://technet.microsoft.com/en-us/library/ms191219.aspx

    很抱歉没有提供完整的答案,但我认为这会对您有所帮助。

    【讨论】:

    • 首先,感谢您的评论。非常感激。我已经开始研究您对资源管理的建议。到目前为止,仍然在玩,我发现它只是由于减少了资源分配而延长了查询时间。查询仍在运行,只是需要更长的时间......它也没有告知为什么它需要更长的时间。我还没有弄清楚如何在设定的执行时间结束查询。
    • 我还看过:1...服务器登录触发器:由于执行时会话尚不存在,因此无法正常工作。 2...数据库触发器:没有 LOGON 或 SELECT 属性。 3...EXECUTE AS:不会附加和更改现有会话。
    • 我还通过查看 sys.dm_exec_requests.total_elapsed_time 发现查询执行了多长时间。在这种情况下,我有一个可以运行的脚本,它会在一段时间后“杀死”有问题的 SPID。听起来不错,但它会杀死他们的会话,因此它完全依赖客户端软件能够处理此问题并在之后重新连接,但他们仍然没有关于会话为何死亡的信息。也许有一种方法可以中止查询而不是终止会话?
    猜你喜欢
    • 2015-10-10
    • 2012-09-27
    • 2012-04-30
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多