前几天遇到一个case,同样的应用在低端服务器上运行正常,一旦上到双socket的服务器上性能反而变慢。那天灵感闪过脑际,google了一下。
由于sql2000开发过早,对服务器多核支持有限,可以采取以下方法解决。
方法一:
运行以下语句:
sp_configure ‘show advanced options’, 1
go
reconfigure with override
go
sp_configure ‘max degree of parallelism’, 4
go
reconfigure with override
go
sql语句作用修改了在SQL Server中一个语句所使用的最多的CPU数(直接翻译就是最大并行度)。默认值是0,就是有几个空闲的CPU用几个CPU。设为4后,一个语句最多使用4个CPU。这样线程间通信的损耗就降下来了。降低最大并行度后,问题解决。
图形界面为:
- 停掉SQL所有服务
- 启动SQL Enterprise Manager
- 右键单击并选择”属性”在 <SQLSERVERNAME>
- 按一下”处理器”选项卡
- 找到部分”Parallelism”
- 部分下的”指定要使用的处理器数目的查询的并行执行”更改从缺省(“使用所有可用的处理器)来使用”
- 更改当前编号(例如, “8”)的处理器 2 (两个)
- 单击确定。
- 重新启动SQL Server
- 测试
方法二:
关掉CPU超线程,以降低CPU内核数。
建议使用方法一,毕竟不会影响其他应用和服务器的整个性能。举一反三,遇到老旧程序在新平台下运行缓慢都可采取这种方法来解决。
参考文献:
http://www.cnblogs.com/caiyuanzi/articles/1748400.html
http://www-01.ibm.com/support/docview.wss?uid=swg21371449
« Prev:《把时间当作朋友》 用GNS3模拟网络实验:Next »