如何在大型SQL Server查询中使用多个内核?

Jon*_*ter 3 sql-server-2005

我有两个SQL Server,一个用于生产,一个用作存档.每天晚上,我们都有一个运行的SQL作业,并将生产数据复制到存档中.随着我们的成长,这个过程需要更长,更长,更长.当我在运行存档过程的存档服务器上观察利用率时,我发现它只使用单个核心.由于这个盒子有八个核心,这是一个巨大的资源浪费.这项工作在凌晨3点运行,因此可以免费获取它可以找到的任何和所有资源.

所以,如果弄清楚如何构建SQL Server作业以便他们可以利用多个核心,我需要做什么,但我找不到任何解决这个问题的文献.我们正在运行SQL Server 2005,但如果2008年能解决这个问题,我当然可以推动升级.

Pau*_*ams 5

您是否有自动维护计划来更新统计信息,重建索引等?如果没有,SQL Server可能仍在您较旧的较小表统计信息上构建其查询计划.

如果满足某些条件,SQL Server会自动生成并行查询计划.来自MSDN上一篇文章:

1. SQL Server是否在具有多个微处理器或CPU的计算机上运行,​​例如对称多处理计算机(SMP)?只有具有多个CPU的计算机才能使用并行查询.

2.此时SQL Server安装的活动并发用户数是多少?SQL Server监视CPU使用情况并在查询启动时调整并行度.如果CPU使用率很高,则选择较低的并行度.

3.是否有足够的内存可用于并行查询执行?每个查询都需要一定量的内存来执行.执行并行查询比非并行查询需要更多内存.执行并行查询所需的内存量随着并行度的增加而增加.如果无法满足给定并行度的并行计划的内存要求,SQL Server会自动降低并行度,或者完全放弃给定工作负载上下文中的查询并行计划并执行串行计划.

4.执行的查询类型是什么?查询耗费大量CPU周期是并行查询的最佳选择.例如,大型表的连接,实质性聚合以及大型结果集的排序是很好的候选者.通常在事务处理应用程序中找到的简单查询发现并行执行查询所需的额外协调超过了潜在的性能提升.为了区分受益于并行性的查询和不受益于并行性的查询,SQL Server将执行查询的估计成本与并行度值的成本阈值进行比较.虽然不推荐,但用户可以使用sp_configure更改默认值5.

5.在给定的流中是否有足够的行处理?如果查询优化器确定流中的行数太低,则不会引入交换运算符来分发流.因此,该流中的运算符被串行执行.在串行计划中执行运算符可避免启动,分配和协调成本超过并行运算符执行所获得的收益的情况.

其他因素:

SQL Server是否配置为与单个处理器具有亲缘关系?

最大并行度选项是否设置为1?

- 编辑 -

您是否尝试过分析此过程?看到SQL Server生成的查询计划会很有趣.

你有可以发布的示例代码吗?

如果您有自动夜间备份作业,是否可以将备份还原到存档?