SQL SERVER日常运维巡检系列之-实例级参数

笔记哥 / 03-31 / 18点赞 / 0评论 / 842阅读
# 前言   做好日常巡检是数据库管理和维护的重要步骤,而且需要对每次巡检日期、结果进行登记,同时可能需要出一份巡检报告。   本系列旨在解决一些常见的困扰: 不知道巡检哪些东西 不知道怎么样便捷体检 机器太多体检麻烦 生成报告困难,无法直观呈现结果 实例的参数对系统性能和稳定的影响很重要,系统级别的参数可能会根据业务的变化而变化,但防止系统参数设置不合理或被意外修改,系统参数检查也是巡检中的必要项。 # 系统参数概览   1.在【检查项】-【全部】页面检查是否有设置不合理的参数,当参数设置未通过检查,会有警告。 ![](https://cdn.res.knowhub.vip/c/2504/01/20b961be.png?G1UAAOTcVkxwPx62iOF0Q2CDZqAijaBSz3q956x9A3x%2fMLLmZ7Q%2bY3%2f4ReszoDqaMzCyoSAFIVIUs6KeiLRexiolrxE%3d) ## 具体参数设置   在【参数】页查看具体的参数配置。   注:合理参数与不合理参数为平台计算公式所得,个人针对系统特点进行的调整可能会被列入不合理范围(此情况可忽略警告)。 ![](https://cdn.res.knowhub.vip/c/2504/01/8f36eddc.png?G1UAAETn9LwUhGLYvtMdbIlTE20GKtIIKvWs13vO2jfR94ewID%2bj9Rn7wy9an0GXs7mQsBgrUtBSwEBVQyrVlQ1w5DUC) ![](https://cdn.res.knowhub.vip/c/2504/01/115acefe.png?G1UAAETn9LyUAhjZvtMdbIlTE20GKtIIKvWs13vO2jfR94dALD%2bj9Rn7wy9an0GXo7iQQAoUKSizoUDFLTG7VVE15DUC) # 参数说明 参数设置不合理带来的影响: 参数设置不佳可能导致系统硬件无法发挥最大性能,或造成性能问题。例如:最大内存的设置,设置过小会导致系统无法利用内存而使性能出现严重问题,反之不设置或过大会导致在操作系统内存压力时强制释放SQL Server内存导致SQL Server无法工作。 1.最大并行度(max degree of parallelism) 一般建议系统如果超过32个CPU 那么设置成8或者4,如果系统中都是特别短小且频繁的语句建议设置成1(取消语句并行,要慎重真的符合你的场景才好) 注:很多时候并行度设置和你的服务器CPU配置有关,比如有几路、几核、是否超线程,一般来说不要跨物理CPU为好。 并行度的设置是针对实例级别的设置(SQL2016中可以对单独数据库设置) 微软官方建议:https://support.microsoft.com/zh-cn/kb/329204 2.并行开销的阀值(cost threshold for parallelism) 仅当运行同一查询的串行计划的估计开销高于在“并行的开销阈值”中设置的值时,SQL Server 才创建和运行该查询的并行计划。 开销指的是在特定硬件配置中运行串行计划估计需要花费的时间(秒)。 “并行的开销阈值”选项可设置为 0 到 32767 之间的任何值。 默认值为 5。 在某些情况下,即使查询的开销计划小于当前“并行的开销阈值”的值,也有可能选择并行计划。 出现这种情况,是因为使用并行还是串行计划是根据完成完全优化之前所提供的开销估计确定的。 注:主要控制SQL优化器何时选用并行计划,建议默认值,此值设置的越小优化器越容易选择并行计划。 3.服务器内存( min server memory 和 max server memory) max server memory (建议设置): 一般推荐如果内存较小操作系统预留3G-4G ,如果内存大256或512以上在数据库内存无压力时预留5%-10%给操作系统,剩下给SQL SERVER ,如果服务器还有其他应用还要在SQL 中减掉应用所占的内存。 min server memory(服务器存在多个实例建议设置):当计算机上存在其他占用大量内存的进程时,这种方法也十分有用,因为它可确保 SQL Server 至少获得合理的内存量。 这种方法的缺点是:当启动新的实例(或任何其他进程)时,运行的实例可能会花费一些时间来释放内存,如果实例必须将修改后的页写回到数据库中来释放内存,则花费的时间可能会更长。 带有工作负荷的第一个实例通常分配所有的内存。 空闲实例或稍后启动的实例最终可能会只使用最少的可用内存量运行。 SQL Server 不会尝试均衡分配各个实例的内存使用量。 但是,所有实例均将响应 Windows 内存通知信号以调整它们内存需求量的大小。 Windows 不会使用内存通知 API 来平衡各个应用程序使用的内存。 它只提供有关系统内存可用性的全局反馈。 注:最大服务器内存控制 SQL Server 内存分配,包括缓冲池、编译内存、所有缓存、QE 内存授予、锁定管理器内存和 CLR 内存(实际上是 sys.dm\_os\_memory\_clerks 中找到的任何内存分配器)。 线程栈的内存、内存堆、除 SQL Server 之外的链接服务器提供程序以及由非 SQL Server DLL 分配的任何内存都不受最大服务器内存控制。 注:SQL Server 不会在启动时立即分配 min server memory 中指定的内存量。 不过,除非降低 min server memory 的值,否则当内存使用量由于客户端负荷而达到该值后,SQL Server 不能释放内存。 4. xp\_cmdshell 使SQL SERVER可以使用cmdshell功能应用 xp\_cmdshell 属于外围应用配置在新安装的 SQL Server的默认配置中,功能并未启用。以最大限度地减少可能受到恶意用户攻击的功能数。 注:部分客户使用脚本备份数据库时开启xp\_cmdshell功能,可以使用master.dbo.xp\_delete\_file 等系统过程代替。 # 总结   参数设置不佳可能导致系统硬件无法发挥最大性能,或造成性能问题。例如:最大内存的设置,设置过小会导致系统无法利用内存而使性能出现严重问题,反之不设置或过大会导致在操作系统内存压力时强制释放SQL Server内存导致SQL Server无法工作。