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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: #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.尾声

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

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
11天前
|
SQL 数据处理 数据库
专坑同事的SQL写法:性能杀手揭秘
【8月更文挑战第29天】在日常的数据库开发与维护工作中,编写高效、清晰的SQL语句是每位数据工程师的必修课。然而,不当的SQL编写习惯不仅能降低查询效率,还可能给同事的工作带来不必要的困扰。今天,我们就来揭秘八种常见的“专坑同事”SQL写法,助你避免成为那个无意间拖慢整个团队步伐的人。
24 1
|
14天前
|
SQL
慢sql治理问题之 Task 数量分布不均的问题你们是如何优化的
慢sql治理问题之 Task 数量分布不均的问题你们是如何优化的
慢sql治理问题之 Task 数量分布不均的问题你们是如何优化的
|
17天前
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
49 1
|
9天前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
22 0
|
9天前
|
Java XML Maven
跨越时代的飞跃:Struts 2 升级秘籍——从旧版本无缝迁移到最新版,焕发应用新生!
【8月更文挑战第31天】随着软件技术的发展,Struts 2 框架也在不断更新。本文通过具体案例指导开发者如何从旧版平滑升级到 Struts 2.6.x。首先更新 `pom.xml` 中的依赖版本,并执行 `mvn clean install`。接着检查 `struts.xml` 配置,确保符合新版本要求,调整包扫描器等设置。审查 Action 类及其注解,检查配置文件中的弃用项及插件。更新自定义拦截器实现,并验证日志配置。最后,通过一系列测试确保升级后的系统正常运行。通过这些步骤,可以顺利完成 Struts 2 的版本升级,提升应用的安全性和性能。
29 0
|
9天前
|
SQL 存储 数据库
|
9天前
|
SQL 数据管理 关系型数据库
SQL与云计算:利用云数据库服务实现高效数据管理——探索云端SQL应用、性能优化、安全性与成本效益,为企业数字化转型提供全方位支持
【8月更文挑战第31天】在数字化转型中,企业对高效数据管理的需求日益增长。传统本地数据库存在局限,而云数据库服务凭借自动扩展、高可用性和按需付费等优势,成为现代数据管理的新选择。本文探讨如何利用SQL和云数据库服务(如Amazon RDS、Google Cloud SQL和Azure SQL Database)实现高效的数据管理。通过示例和最佳实践,展示SQL在云端的应用、性能优化、安全性及成本效益,助力企业提升竞争力。
25 0
|
9天前
|
SQL 关系型数据库 MySQL
SQL索引构建与优化的神奇之处:如何用高效索引让你的数据检索飞起来?
【8月更文挑战第31天】在现代软件开发中,数据库索引对于提升查询性能至关重要。本文详细介绍了SQL索引的概念、构建方法及优化技巧,包括避免不必要的索引、使用复合索引等策略,并提供了实用的示例代码,如 `CREATE INDEX index_name ON table_name (column_name, another_column_name);`。通过遵循这些最佳实践,如了解查询模式和定期维护索引,可以大幅提高数据检索效率,从而增强应用程序的整体性能。
33 0
|
9天前
|
SQL 关系型数据库 MySQL
OceanBase 的 SQL 兼容性与优化
【8月更文第31天】随着分布式计算的发展,越来越多的企业开始采用分布式数据库来满足其大规模数据存储和处理的需求。OceanBase 作为一款高性能的分布式关系数据库,其设计旨在为用户提供与传统单机数据库类似的 SQL 查询体验,同时保持高可用性和水平扩展能力。本文将深入探讨 OceanBase 的 SQL 引擎特性、兼容性问题,并提供一些针对特定查询进行优化的方法和代码示例。
31 0
|
14天前
|
SQL 资源调度 流计算
慢sql治理问题之在 Flink 中, userjar 分发问题如何优化
慢sql治理问题之在 Flink 中, userjar 分发问题如何优化
下一篇
DDNS