sql执行的并行化

默认情况下,sql优化器在生产执行计划时,不会考虑生成并行的执行计划,只有当预估的执行开销超过了阀值,才会考虑生成并行执行计划。

如果返回的数据量较大(几十万、百万),我们可以手动设置sql并行执行,原来是单线程执行这个sql,现在变成了多个线程来执行sql,速度会明显提高。


(1)基本原理

从优化思路上说,就是投入更多资源来做任务,而且和IT项目上有很多共同点。


比如,公司接了个项目,这个项目评估工作量是1000人天,原来公司有50个开发,有40个开发在开发、维护其他项目,现在只有10个人可以投入开发,那么把人天除以10个人,就是要100天才能完成任务,


于是公司有新招聘10人,于是工作量除以20人,就是50天,大概就是2个月,从预估的时间上是明显缩短了,但是由于人多了,

管理、沟通、培训、新人熟悉工作的成本增加了,所以效率实际上并不会有线性的增长。


回到SQL并行执行的问题,如果线程成从1个变成了4个,执行时间并不会减少为原来的4分之1,因为线程之间也要通信,也会有有的线程执行快,有的执行慢,会有相互等待的情况出现。


(2)如何启用并行

sql server服务器有2个参数:

max degree of parallelism 是最大的并行度,这个参数可以根据服务器cpu的个数来设置,建议开始的时候设置小一点,比如服务器有64个逻辑cpu,开始时设置成4~8个,如果设置过大,再加上生成的执行计划有问题,很有可能导致整个服务器挂住,导致其他的任务都没办法正常运行。

cost threshold for parallelism是并行的开销阀值,默认值是5,一般不用修改。


除了设置服务器参数,还可以在sql语句中指定并行度,这个更加灵活,会在后面文章中讲到。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值