如何优化Windows OS使SQL Server性能最优化-阿里云开发者社区

开发者社区> 风移> 正文

如何优化Windows OS使SQL Server性能最优化

简介: #1.问题提出   这些天菜鸟又遇到麻烦事儿了。Server Team交给菜鸟的这批服务器跑起SQL Server来老是不顺畅。菜鸟情不至尽的想起了老鸟,于是,敲开了老鸟办公室的门:   “鸟哥,到底我们要如何定制化或者说如何优化我们的Windows Server OS来使得我们的SQL Server达到最大程度的性能优化呢?”。老鸟还没有反应过来,
+关注继续查看

1.问题提出

  这些天菜鸟又遇到麻烦事儿了。Server Team交给菜鸟的这批服务器跑起SQL Server来老是不顺畅。菜鸟情不至尽的想起了老鸟,于是,敲开了老鸟办公室的门:

  “鸟哥,到底我们要如何定制化或者说如何优化我们的Windows Server OS来使得我们的SQL Server达到最大程度的性能优化呢?”。老鸟还没有反应过来,菜鸟劈头盖脸的问道。

  老鸟顿了两秒,自信的回答道:“菜鸟,有进步啊,开始学会思考问题了。我们可以按照如下方法来优化我们的操作系统,使的SQL Server达到最大程度的优化。”。

2.SQL Server独享OS系统资源

  SQL Server做为数据存取的后台数据库服务,注定了具有先天的I/O敏感型,CPU密集型的特点。因此,最好是将Windows OS尽可能多的资源都分配给SQL Server,以期望能够获取最优的数据存取性能。

2.1.SQL Server独享物理机器

  要想获得最大的性能优化,SQL Server必须是独享Windows OS系统资源的。这一点非常容易理解,SQL Server需要像是独生子女家庭的孩子一样,集万千宠爱于一身,独享OS资源。

  试想一下,如果一个服务器既提供DC服务,又提供FTP文件下载上传服务,还要提供SQL Server的数据存取服务。那么,DC和FTP服务势必会与SQL Server争抢CPU,I/O,内存等系统资源。因此,SQL Server不可能取得最大的性能优化。

2.2.关闭不必要的服务

  基于上一小节的分析,我需要关闭SQL Server宿主服务器上不必要的服务,以免造成和SQL Server资源的争抢。这些服务包含但不仅限于:

  IIS、FTP、Index Service、Messenger、Microsoft Searching等。如果已经安装了这些服务,请将服务启动修改为Manual,以免服务开机自动启动。

3.NTFS文件系统

  关于Windows平台文件系统的选择,我们一般选择NTFS文件系统。但,就NTFS而言,我们的版本选择也有讲究。

3.1.版本选择

  2001年发布的Windows XP及以后的Windows版本,引入了NTFS 5.0。我们有充足的理由选择NTFS 5.0文件系统,因为它比更早的NTFS 有一些新的性能增强点,比如:

  更少的磁盘访问来找到想要的文件。

  总体更快的磁盘读取速度。

  当然,如果你的产品环境SQL Server已经使用了NTFS 4.0格式化你的文件系统,要想转化为NTFS 5.0就会变得非常困难。但是,当你有新的SQL Server实例需要安装时,建议你使用NTFS 5.0。以下是检查NTFS文件系统版本的方法,我的测试机是Windows 7:

>fsutil fsinfo ntfsinfo C:
NTFS Volume Serial Number :       0x8ca4ddeba4ddd832
Version :                         3.1
Number Sectors :                  0x0000000009fccfff
...

3.2.加密与压缩

  NTFS 提供了文件加密和数据压缩的功能,虽然默认情况下新安装的操作系统这两项功能都是关闭的,但是,为了避免人为错误的开启了这两项功能,我们还是非常有必要重点审查这两项功能。因为,这两项功能涉及到数据加密、解密、压缩和解压缩,都属于典型的I/O密集型和CPU密集型操作,而对于SQL Server而言,任何增加I/O和CPU消耗的行为对于SQL Server都是巨大的伤害。

  查看NTFS是否关闭压缩和加密功能:

>fsutil behavior query DisableCompression
DisableCompression = 0

>fsutil behavior query DisableEncryption
DisableEncryption = 0

  关闭NTFS压缩和加密功能

>fsutil behavior set DisableEncryption 1
NOTE: Changes to this setting require a reboot to take effect.
DisableEncryption = 1

>fsutil behavior set DisableEncryption 1
NOTE: Changes to this setting require a reboot to take effect.
DisableEncryption = 1

  如果想要启用加密和压缩功能,请将1修改为0。

3.3.参考链接

  NTFS Wiki

4.系统设置

  由于Windows OS是面向所有应用程序开发的,虽然它具有对于SQL Server数据库系统的自适应能力,但是,我们还是需要针对SQL Server数据库数据存取服务的特点来定制化系统的一些设置。

4.1.Best Performance

  修改操作系统为最佳性能模式,节约一些不必要的性能开销,方法如下:
Start => Run => SystemPropertiesAdvanced => Settings => Adjust for best performance => OK => OK
4_1_1

4.2.Background Services

  由于SQL Server是属于数据存取的数据库后台服务程序,所以,请将操作系统如何使用调度器的方法修改为Background services。方法如下:
Start => Run => SystemPropertiesAdvanced => Settings => Advanced => Adjust for best performance of Background services => OK => OK
4_2_1

4.3.Virtual Memory

  关于虚拟内存设置,其实存在很大的分歧。按照Microsoft官方的解释是建议SQL Server宿主机虚拟内存为主机物理内存的1.5倍大小;如果SQL Server需要使用Full-Text组件,建议虚拟内存设置为物理内存的3倍大小;建议SQL Server的Max Server Memory为物理内存的1.5倍大小。
个人对虚拟内存大小的建议持保留态度,两点理由:

  • 理由一:SQL Server Max Server Memory如果是物理内存的1.5的话,SQL Server会尽可能多做数据缓存,当物理内存塞满时,势必会导致虚拟内存的使用。由于虚拟内存实际上是将磁盘当着内存来使用,我们知道磁盘读写速度是远远低于内存读写的,哪怕是SSD。那么,这个时候,数据库会明显的变慢,连接暴增,甚至会导致服务挂起,最终导致数据库服务死掉。
  • 理由二:1.5或者3倍物理内存空间的虚拟内存大小,导致大量的磁盘空间浪费。因为,目前的服务器动辄上100GB的内存已是家常便饭的事了,有的生产环境的服务器已经达到256GB内存空间了,这样的话,有378GB - 768GB的空间浪费,如果磁盘是SSD的话,浪费的成本很更高。

  个人对虚拟内存大小设置的建议是,使用Windows性能监视器观察Pageing File % Usage计数器值一段时间(比如一天甚至一周,时间越长越准确),然后让虚拟内存的最大值和最小值保持一致,均设置为这个计数器的最大值再加上一个数字(比如10GB)。性能监视器中计数器的添加方法如下:
4_3_1

4_3_2

  虚拟内存大小设置方法如下: Start => Run => SystemPropertiesAdvanced => Settings => Advanced => Change => Custom Size => Set => OK。
4_3_3

  虚拟内存大小设置Microsoft的官方解释参见链接:Configuring Virtual Memory

4.4.Maximizing Data Throughput for Network Applications

  为了给SQL Server提供更好的系统内存优化,我们还应该限制系统使用文件缓存的内存数量,来为SQL Server提供更多的系统内存。所以,请确保系统缓存策略为Maximize data throughput for network applications,而不是Maximize Data Throughput for File Sharing。以下是Windows Server 2003的配置方法(Windows Server 2008的Maximize data throughput for network applications属性按钮是灰色的):
Start => Run => Control => Network Connects => Local Area Connection => General => Properties => File and Printer Sharing Microsoft Networks => Properties => Maximize data throughput for network applications
4_4_1

  以下是对四种系统缓存优化方案适用场景的解释:

  • Minimize memory used : 具有少量客户端连接的服务器;
  • Balance : 多用途使用的服务器优化。比如,提供文件共享和打印服务的交互式工作站。
  • Maximize data throughput for file sharing : 尽可能多的提供文件和打印服务的专有服务器。
  • Maximize data throughput for network applications : 为拥有自己的内存缓存机制的分布式应用程序优化系统缓存,比如像微软的SQL Server服务。

  参考链接,To configure File and Printer Sharing for Microsoft Networks

4.5.Lock Pages in Memory

  这个组策略项比较有意思,虽然它与SQL Server系统性能没有直接关系。但是,它关系着32位SQL Server是否有权限使用AWE(Address Windowing Extensions)。所以,它间接关系着32 位的SQL Server性能。

  请将Lock pages in memory策略里设置SQL Server启动用户拥有这个权限,否则,当我们启用AWE的时候,会报告如下错误:

Address Windowing Extensions (AWE) requires the 'lock pages in memory' privilege which is not currently present in the access token of the process.

  设置该策略的方法如下: Start => Run => gpedit.msc => Computer Configuration => Windows Settings => Security Settings => Local Policies => User Rights Assignment => Lock Pages in memory
4_5_1

4.6.Replication Memory Using Limitation Setting

  如果是单个SQL Server数据库实例上建立过多的Replication Publication链,可能会遭遇如下的错误:

Agent '%s' is retrying after an error. %d retries attempted. See agent job history in the Jobs folder for more details.

  这是因为SQL Server对Replication发布链使用的内存量有限制,我们通过修改注册表的 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerSubSystemsWindows]键值来解决Replication的问题。修改的方法是将SharedSection=1024,20480,768修改为SharedSection=1024,20480,2048

%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,2048 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16

5.安全

  关于安全,看起来好像和SQL Server性能没有什么直接的联系。但是,我们反过来想,如果SQL Server成为黑客的“肉鸡”来随意使用的话,当然会浪费大量的性能开销。

5.1.Service Pack

  Microsoft Windows操作系统或者SQL Server本身的Service Pack,要么解决了性能问题,要么解决了安全隐患,要么就是一些Bug Fix。所以,新的Service Pack出来并且稳定以后,我们还是很有必要打上这些Service Pack的。

5.2.Microsoft-Certified Hardware Drivers

  最常见的情况是与存储和网络相关的驱动器会影响到SQL Server主机性能,进而影响到SQL Server的性能。因此,我们最好能够周期性的检查服务器是否有最新,微软认证的硬件驱动器。微软认证这一点很重要,没有通过认证的驱动安全性,稳定性很难保证。所以,为了系统性能和稳定性,我们需要耐心等待微软认证的版本。至于检查的方法,我们需要到供应商的官方网站去查询或者开启微软更新服务。

6.尾声

  听完老鸟的娓娓道来,菜鸟茅塞顿开,赶紧去试验去了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
优化 Tengine HTTPS 握手时间
## 背景 网络延迟是网络上的主要性能瓶颈之一。在最坏的情况下,客户端打开一个链接需要DNS查询(1个 RTT),TCP握手(1个 RTT),TLS 握手(2个RTT),以及最后的 HTTP 请求和响应,可以看出客户端收到第一个 HTTP 响应的首字节需要5个 RTT 的时间,而首字节时间对 web 体验非常重要,可以体现在网站的首屏时间,直接影响用户判断网站的快慢,所以首字节时间(TTFB)是
1949 0
Linux性能测试 ss命令
ss即socket state,也就是说,是可以查看系统中socket的状态的。我们可以用netstat,但为什么还要用ss这个工具呢,当然ss也是有好处的。当我们打开的socket数量很多时,netstat就会变得慢了。
964 0
关于 Swift 编译时性能优化的一些思考
本文讲的是关于 Swift 编译时性能优化的一些思考,一行之前很简洁的代码,现在却出现了新的问题——它是否应该重构为9行代码来达到更快的编译速度? (nil coalescing 运算符就是一个例子)孰轻孰重?简洁的代码还是对编译器友好的代码?
1079 0
Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor
原文:Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor 一、工具概要     数据库应用系统性能低下,需要对其进行优化,     如果不知道问题出在哪里,可以使用性能检测工具sql server profiler。
1660 0
SQL Server Profiler和数据库引擎优化顾问
原文:SQL Server Profiler和数据库引擎优化顾问  简介           说到Sql的【性能工具】真是强大,SQL Server Profiler的中文意思是SQL Server事件探查,这个到底是做什么用的呢?我们都知道探查的意思大多是和监视有关,其实这个SQL Server Profiler就是一个Sql的监视工具,可以具体到每一行Sql语句,每一次操作,和每一次的连接。
1087 0
分布式实时分析数据库citus数据查询性能简单对比
分布式实时分析数据库citus数据查询性能简单对比 如果单纯看实时数据插入的速度,并不能体现citus的价值,还要看聚合查询的性能。下面将集群的查询性能和单机做个简单的对比。
2201 0
SQL SERVER全面优化-------Expert for SQL Server 诊断系列
现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高。软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治。开发人员解决数据问题基本又是搜遍百度各种方法尝试个遍,可能错过诊断问题的最佳时机又可能尝试一堆方法最后无奈放弃。
1290 0
+关注
风移
阿里云数据库专家,负责SQL Server数据库产品线。SQL Server从业10年,经历过SQL 2000、SQL 2005、SQL 2008、SQL 2008R2、SQL 2012、SQL 2014、SQL 2016和SQL on Linux各个版本。
75
文章
46
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载