【问题标题】:SQL Server's xp_cmdshell is slow after updatesSQL Server 的 xp_cmdshell 更新后速度很慢
【发布时间】:2019-08-27 19:23:57
【问题描述】:

更新 Windows 和 SQL Server 后,xp_cmdshell 运行缓慢。我们正在运行带有 SQL Server 2016 SP1 的 Windows Server 2016。我们已将 SQL Server 完全更新到 SP2 CU8,但行为没有任何变化。

我们的 Windows Server 的性能似乎很棒。此外,我们可以以极快的速度批量运行类似的命令。我们的 SQL Server 的性能似乎也很棒。

我猜问题出在每个命令都需要 Windows 环境,也许最近 Windows 发生了一些变化?但是,我们在运行相同版本 SQL Server 2016 的虚拟机上没有发现任何问题。

我们了解启用 xp_cmdshell 的安全风险并接受这些风险。

这是我们用来测试xp_cmdshell 速度的一些代码。

EXEC master..xp_cmdshell 'exit 0' --Simple, Open cmd, and exit
GO 25 --Run the command 25 times

我希望这段代码能在一秒钟内运行,但运行需要 15-20 秒。

【问题讨论】:

  • 我最近发现的一件事是,在我们的 xp_cmdshell 运行缓慢的服务器上,xp_cmdshell 创建了一个安全事件(事件查看器),它是一个提升的令牌。在没有问题的第二台机器上,提升的令牌为“否”。根据我的阅读,这会创建一个次要配置文件,一个提升,一个不提升。这是一个可能的罪魁祸首。有没有办法控制 xp_cmdshell 要求提升令牌与否?
  • 右键单击 SQL Management Studio 和“以管理员身份运行”。试试看这是否绕过提升的令牌。
  • 另外,您从哪个 SQL Server 版本升级?
  • 以管理员身份运行没有任何变化。从 Sql Server 2016 升级到 SP1

标签: sql-server performance xp-cmdshell


【解决方案1】:

您为什么希望它在一秒钟内运行?你在以前的版本上试过这个吗?如果是这样,您从哪个版本升级?之前需要多少时间?

我正在 SQL Server 2017 上对此进行测试,在 i7 笔记本电脑上需要 3 秒。

如果您想深入挖掘,可以关注this guide 并使用Process Monitor

如果您没有看到查询在您要升级的版本上运行得更快,请不要认为查询应该运行得更快。

请记住,xp_cmdshell 是一个相当古老的功能,现在已被弃用。

你正在通过xp_cmdshell 运行什么命令?

CMD 以其缓慢而闻名。如果您的机器也很旧,我不会留下深刻印象。

【讨论】:

  • 我们希望它能够及时运行。我们已经在以前的版本上尝试过这个。我认为这是我问题的前提。升级后,运行速度变慢。至于之前花了多少时间,这是我的预期,不到一秒。从我们升级的版本开始,我们已经看到它在这个硬件上运行得更快。这是我们知道它变慢的唯一方法。我没有看到微软在哪里弃用了 xp_cmdshell?我不知道 CMD 以慢而闻名?与探险家相比,它以速度非常快而闻名?机器不老……
  • 尤其是 shell 会话的初始化可能非常耗时:codeproject.com/Questions/240936/…。提供另一个您尝试运行的命令,因为打开/关闭 shell 太重了
  • 使用 xp_cmdshell 运行的每个命令都会打开和关闭一个 shell。这对我们的其他服务器或补丁之前的服务器来说并不算太重。
  • 我们现在有两个选择:1) 如果您有另一个 SQL Server 2016 SP1没有同样的问题:这是环境相关的,所以这意味着您有问题特定机器 2) 如果您有另一个 SQL Server 2016 SP1具有相同的问题:您在该特定 SQL Server 版本上发现了一个错误,您可以将其上报给 Microsoft
  • 我不相信这么简单。还有其他用户遇到了同样的问题,但没有得到解决。这不是特定于一台机器的问题。但是,这也无济于事。
猜你喜欢
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2017-01-13
相关资源
最近更新 更多