【问题标题】:bcp queryout dreadful performancebcp queryout 糟糕的表现
【发布时间】:2014-04-19 17:48:09
【问题描述】:

我使用的是 SQL Server 2008 R2。我有一个通过xp_command shell 运行bcp 的存储过程。在我的带有数据库副本的笔记本电脑上,拥有 50000 条记录的作业几乎是即时的,bcp 的性能是每秒 71K 行。

我在服务器上运行完全相同的存储过程,它需要 1 小时 51 分钟,bcp 性能是每秒 7 行(因此慢了 10,000 倍)。选择数据的查询在服务器 BTW 上运行不到一秒钟。这发生在上周,我们重新启动了 SQL Server 实例,它在服务器上再次运行得非常快。大约 5 天后,性能再次变慢,但重启 SQL 实例没有帮助。

我的命令是:

bcp "exec DBNAME.dbo.SPNAME 224,1 "  
    queryout "\\Server\path\OUTPUT\11111.txt" -c -t\t -Usa -P"PASSWORD" -SSQLSERVER

如果我运行活动监视器,我会看到我的存储过程进程并显示为 RUNNABLE。

服务器位于具有 4 个内核和 28GB RAM 的 VM 上。

如果我从 dos shell 运行相同的 bcp 命令,我会得到相同的结果。

我现在不知道该去哪里找。有人有什么建议吗?

TIA

标记

【问题讨论】:

  • 不写入UNC共享(\\Server\path\OUTPUT\11111.txt)而是直接放在C:\ SQL 服务器?这会告诉你它是否是网络。
  • 这实际上是一个本地驱动器。我确实尝试使用驱动器号。有同样的表现
  • 查找的逻辑位置是索引。如果您的本地 PC 上有服务器没有的索引,则可能会发生这种情况。
  • 索引是相同的。正如我在帖子中提到的,数据库是服务器的副本,选择数据的查询在服务器上运行不到一秒钟。

标签: sql-server-2008-r2 bcp


【解决方案1】:

要回答“在哪里看”的问题,并且因为您尝试完成的任务涉及分布式资源(我在这里假设是因为您使用的是 UNC 路径)...您必须研究环境之间的差异,在比较服务器和笔记本电脑之间的执行时......几乎就是一切。

存储(和可用存储) CPU(和可用的 CPU) 网络(和可用带宽) 内存(和可用内存) SQL Server 版本/更新 维护计划(笔记本电脑可能没有) 并发活动(笔记本电脑可能没有)

您似乎处理过的数据。您可以确认数据/数据库对象是否相同?这是您在笔记本电脑上使用的还原数据库(从服务器还原?),或者如果不是从服务器还原,您手动检查了表和索引?

如果不恢复,笔记本的数据会不会少一些?

要进行故障排除,您需要的不仅仅是活动监视器。您需要性能监视器。

这是前一段时间的(不知道为什么像这样的东西在这里不会过期,但是哦,好吧)。

【讨论】: