当前位置: 首页 > news >正文

第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器

原文: 第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器

前言:

        SQLServer提供了一个系统存储过程,SP_Configure,可以帮助你管理实例级别的配置。微软建议使用默认配置,但是基于不同的服务器、不同负载的系统和你的用法,更改配置可能会给你的性能带来好处。在32位和64位系统中,sp_configure会有一些差异。

        我们经常见到SQLServer所在的服务器上还包含了如IIS、文件服务器或者域控制器这些服务或者功能。这些会影响你的性能甚至对正常运作有阻碍作用。

本系列文章将包含:

1、 为SQLServer配置更多的处理器。

2、 32位和64位系统中的内存配置。

3、 配置“对即时负载的优化”。

4、 优化SQLServer实例的配置。

配置SQLServer以使用更多的处理器:

         今时今日的系统,数据库变得越来越大。为了更快地从数据库获取信息,仅靠管理你的数据库并不足够,还需要更多的CPU来处理。

不管你如何高效地维护索引和统计信息,你都很难从一个使用低效CPU的SQLServer中获得足够好的响应时间。如何选择合适的CPU用于数据库的运作不在本系列的范围之内,但是我们将演示如何使的你的CPU运作得更加强大和有效。

        你是否曾经想过SQLServer在运行查询的时候会使用多少个CPU?用户经常希望通过购买更多、更快的CPU来加快SQLServer的运作,但是更重要的应该是关注在SQLServer在运行时需要用到多少个?

 

开始工作:

        在开始深入之前,需要了解你的服务器上有多少个CPU。可以使用一个SQLServer的DMV,sys.dm_os_sys_info来查找这部分的信息。这个DMV会尝试返回关于计算机和关于资源消耗等方面的信息:


SELECT  cpu_count AS 'Cores' ,--逻辑CPU总数
        hyperthread_ratio	--一个物理CPU的逻辑内核与物理内核的比
FROM    sys.dm_os_sys_info

  

步骤:

1、 为了设置在实例级别上运行查询时用到的CPU数量,执行下面语句:

--0是默认值
sp_configure 'max degree of parallelism', 0 
RECONFIGURE WITH OVERRIDE 
GO


2、 从语句级别去设置并行度的值,可以使用hint来实现,下面加上SETSTATISTICS TIME来看看不同的并行度的差异:


SET STATISTICS TIME ON 
SELECT  *
FROM    Sales.SalesOrderDetail
OPTION  ( MAXDOP 1 )
SET STATISTICS TIME OFF 
GO

SET STATISTICS TIME ON 
SELECT  *
FROM    Sales.SalesOrderDetail
OPTION  ( MAXDOP 0 )
SET STATISTICS TIME OFF
GO


下面是截图:



分析:

        SQLServer 有很优秀的算法体系去决定是否并行运行查询。改写SQLServer的决定需要经验和专业知识。至于使用多少个CPU,这个比较确定的方法就是——试验。

        在步骤1中,使用SP_Configure存储过程来把最大并行度设为0,也就是默认值,这个值代表这SQLServer是否生成并行执行计划,如果是,可以使用多少个CPU。如果你设置为4,SQLServer将使用4个核心来处理查询,如果设为1,就不会发生并行度。

        在步骤2中,使用OPTION来对特定查询设置并行查询。这里有两个SELECT语句同时执行。第一个查询使用了MAXDOP =1,意味着不使用并行度执行查询,而第二个查询使用了MAXDOP =0,意味着由SQLServer自己决定是否使用并行度运行。

        在加了SET STATISTICS TIME之后,可以看到每个查询总共消耗了多少CPU时间。

 

扩充知识:

        在生产环境中更改默认的最大并行度将会非常危险。所以尽可能保持现状,如果你想修改,需要和你的上司或者同事商讨。经验表明,SQLServer并不总是为了单一查询而使用所有CPU。除此之外,在OLTP系统中,不建议调整这个设置,但是在OLAP系统中,这却是可以考虑的。

        另外,如果你有16个核心,并把MaxDegree of Parallelism设为8,并不以为这只有8个核心会用在SQLServer上,仅仅代表单一查询不会使用超过8个核心而已,即使在并行运行,也如此。但是SQLServer依然会使用所有可用的核心。

相关文章:

  • mysql全文索引____ft_min_word_len
  • 浅谈Servlet
  • [推荐]DDOS攻击与防范知识介绍
  • leetcode------Reverse Words in a String
  • js中常用数组方法concat join push pop slice splice shift
  • 那些年,一起学的Java 2-4
  • 那些年,一起学的Java 3-3
  • Android SDK下载项的说明
  • Linux内存管理_stack区的地址方向
  • 简单易懂的现代魔法——Play Framework攻略1
  • struts2上传文件,文件大小默认最大值的修改
  • **PHP二维数组遍历时同时赋值
  • Windows server 2008系统的安装
  • 修正memcache.php中的错误示例
  • [每天一个知识点]34-职业生涯-用得着和用不着的知识
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • CSS相对定位
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java的Interrupt与线程中断
  • Linux下的乱码问题
  • MobX
  • Mysql优化
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Web Storage相关
  • 程序员该如何有效的找工作?
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 微信小程序实战练习(仿五洲到家微信版)
  • 原生JS动态加载JS、CSS文件及代码脚本
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • MyCAT水平分库
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (09)Hive——CTE 公共表达式
  • (12)目标检测_SSD基于pytorch搭建代码
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)windows配置JDK环境
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (三十五)大数据实战——Superset可视化平台搭建
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)图像的%2线性拉伸
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)Unity3DUnity3D在android下调试
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)项目管理杂谈-我所期望的新人
  • .a文件和.so文件
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET 发展历程
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • @Autowired自动装配
  • @font-face 用字体画图标