求优化高好的支持DX11神优化的大型单机游戏戏,不限类型,不限大小,只要支持DX11且优化好就行!越多越好

【dx11官方下载】DirectX11官方最新版 64位-下载王
您所在的位置:&>&&>& >>
DirectX11官方最新版 64位dx11官方下载
软件大小:90.7MB
软件授权:免费软件
更新时间:
软件语言:简体中文
官网下载:
软件评分:
应用平台:WinXP/Win2003/Vista/Win7/Win8
DirectX 11Directx 11 64位官方最新版 下载可以说是为游戏行业开辟了一条光明而又坦途的道路。自DirectX 11推出之日起,各类高品质、高画质的单机大作不断涌现出来。下载王提供该软件的下载。
Directx 11 64位官方可以说是为游戏行业开辟了一条光明而又坦途的道路。自DirectX 11推出之日起,各类高品质、高画质的单机大作不断涌现出来,但是,也对玩家显卡造成了吃紧的问题。随之而来的就是配置、再升级...不过,也正符合时代进步的潮流。这里,小编为大家带来DirectX 11 64位官方完整版,希望能帮到你。
Directx 11 64位官方下载说明
DirectX 11 64位(//win8.1)介绍
01、最终用户运行时Web安装程序
微软的DirectX 11最终用户运行时提供更新和以前版本的DirectX 9.0c的Windows核心&驱动技术,高速多媒体和游戏在PC上。
02、清除工具
此工具检查您的计算机感染的特异性,流行的恶意软件(包括冲击波,震荡波,和Mydoom)和帮助如果发现去除感染。微软将在每月第二个星期二发布此工具的更新版本。
03、微软安全要点
微软安全要点为您的家庭或小型企业的PC,免受病毒,间谍人员提供实时保护,和其他恶意软件。
04、Win 7升级顾问
下载并运行Win 7升级顾问看看你的电脑准备Win 7。它会扫描您的硬件,设备安装的程序,和已知的兼容性问题,给你指导如何解决潜在的问题,并建议做什么再升级。
05、DirectX最终用户运行时(2010年6月)
这里提供的DirectX 11最终用户可再发行,开发商可以包括他们的产品。
Directx 11 64位官方下载有哪些新功能?
DirectX 11 64位(win7/win8/win8.1)新特性
Direct3D11渲染管线
DirectX 11加入了对Tessellation(镶嵌)的支持。Tessellation 由外壳着色器(Hull Shader)、镶嵌单元(tessellator)以及域着色器(Domain Shader)组成。同时还加入了计算着色器(Compute Shader)
Tessellation镶嵌技术
tessellator可以把一些较大的图元(primiti)分成很多更小的图元,并将这些小图元组合到一起,形成一种有序的几何图形,这种几何图形更复杂,当然也更接近现实。这个过程也被称作细分曲面(Subdivision Surs)。举例来说,tessellator可以让一个立方体,通过处理看起来像是个球形,这样的话无疑节省了空间。此外,图形的质量、性能以及可控性也达到了一定的促进。
多线程的支持
DirectX 11特性还包括很重要一点:支持多线程(multi-threading)。directx 11的这种多线程技术可能并不能加速绘图的子系统(特别是当我们的GPU资源受限时),但是这样却可以提升线程启动游戏的效率,并且可以利用台式CPU核心数量不断提高所带来的潜力。
计算着色器Compute Shader
CS的这一渲染管线能够进行更多的通用目的运算。我们既能在某种可以用来被执行数据的操作中看到这种特性,又能在某种可以用来操作的数据中看到这种特性。
Shader Model 5.0
DirectX 11包含的SM 5.0,采用面向对象的概念,并且完全可以支持双精度数据。随着SM 5.0的发布,微软也会将HLSL语言更新至最新版本,其中包含了诸如动态着色、动态分支和更多的对象等。
改进的纹理
DirectX 11提出了更为出色的纹理压缩算法&&BC6和BC7。BC6是为HDR图像设计的压缩算法,压缩比为6∶1;而BC7是为低动态范围纹理设计的压缩模式,压缩比为3∶1。两种压缩算法在高压缩比下画质损失更少,效果更出色。
Directx 11怎么安装?
Directx 11 64位官方下载安装方法
1、先下载DirectX 11 64位官方完整版
2、在解压后的文件夹内找到DXSETUP.exe文件,双击运行
3、提示安装,勾选&我接受此协议&,点击【下一步】按钮即可开始安装DirectX 11
4、等待安装过程,可能需要几分钟
5、Directx 11 64位官方下载安装完成后,直接点击【完成】,然后即可正常使用Directx 11功能
怎么看是否已成功安装DirectX 11
按[Win+R]组合键,打开运行,然后输入Dxdiag,点击【确定】(win键就是Ctrl和Alt中间那个键)
&&dx11官方下载32/64位通用下载地址极速下载本地下载
DirectX11官方最新版 64位
&正在下载,用户还下载了
12345678910
12345678910突然想明白,真正让游戏渣优化的是老黄和N卡。。 - 3DMGAME论坛 - Powered by Discuz!
3DMGAME论坛
标题: 突然想明白,真正让游戏渣优化的是老黄和N卡。。
作者: RAW狼& & 时间:
标题: 突然想明白,真正让游戏渣优化的是老黄和N卡。。突然想明白,真正让游戏渣优化的是老黄和N卡。。
你们想想最近一开始被喷渣优化,后续又因为发现关掉一个两个效果就很流畅,或者补丁优化下就能证明其实能做得很流畅的游戏有几个。。
刺客信条大革命。
蝙蝠侠阿甘骑士。
这5个都是一出来就被喷渣优化的,有啥共同特征?
就是都是支持Nvidia Game Work的。都是属于开了就卡死,关了就很流畅的。但是大部分玩家是不会懂那么多,都是直接全开,然后就去喷。因为按照他们的硬件,其他游戏全开都是很流畅的。。
所以NGW技术真是的坑了自己又坑别人。。
虽然都是老黄给了钱的游戏。。但是这个技术的确很坑。。
蝙蝠侠也是,关了NGW基本流畅。。
作者: davidweile& & 时间:
关了也有点卡,这游戏优化本身就有问题。不过ngw,确实肯爹,我估计这东西应该是个工具,对于开发者来说做起来很容易,但是优化却很难,所以基本开发商都会做开关。大革命可能就是开发的时候没做物理特效的开关,导致优化一直有问题。不过随着显卡性能的增强,早晚这玩意会在游戏里默认开启不设开关的,所以一块显卡撑四年基本不可能了。
作者: 哆啦B梦ら& & 时间:
顶一个!!!
作者: RAW狼& & 时间:
davidweile 发表于
关了也有点卡,这游戏优化本身就有问题。不过ngw,确实肯爹,我估计这东西应该是个工具,对于开发者来说做 ...
事实上这东西只是N卡自己搞出来基于DX11 API 之上的一个外挂特效,因为是外挂的所以效率低。但是随着DX12出现这些就会消亡。毕竟DX12没必要去整合人家的技术,就算整合了也不会用这个名字了。所以会没了,但是老黄肯定会高出新的很卡的特效就为了卖显卡。。
作者: davidweile& & 时间:
RAW狼 发表于
事实上这东西只是N卡自己搞出来基于DX11 API 之上的一个外挂特效,因为是外挂的所以效率低。但是随着DX12 ...
实际上只是英伟达现在市面上卖的显卡没法畅跑这些特效罢了。老黄实验室里肯定有能流畅运行这些特效的单卡的,只是没量产而已。谁让它出显卡那么快,库存销不光了吧。
作者: ADS658& & 时间:
老黄没有主机显卡份额了必须挑拨离间并顺带卖显卡
作者: & & 时间:
為了推銷顯卡,優化都免了。你玩遊戲會卡就是叫你換顯卡,你換顯卡老黃就有錢賺
作者: lin1983& & 时间:
新一代平台上的UBI游戏,都有一个共同点,游戏刚出优化不太好,都得等俩月完善优化。看门狗、ACU、惊魂4都这样。
作者: hzxs681953& & 时间:
本帖最后由 hzxs681953 于
01:06 编辑
然而你说的游戏都开了那些也很流畅,新显卡没有啥问题的说!AMD就算卖主机也没有老黄的1半份额多,至于挑拨么!30%都不到的市场份额,本身驱动又不给力,堆马甲比老黄专业,注定游戏玩不溜,别什么事都推给老黄!
作者: 5566998& & 时间:
老黄斜眼笑了笑,你农企值得我去费精力挑拨离间吗?
作者: Nicolasking& & 时间:
lin1983 发表于
新一代平台上的UBI游戏,都有一个共同点,游戏刚出优化不太好,都得等俩月完善优化。看门狗、ACU、惊魂4都 ...
搞笑等两月黄花菜都凉了,又有新的游戏谁还鸟你这蝙蝠侠
作者: baoyanoliver& & 时间:
我只知道当年玩镜之边缘时,如果开了物理特效,卡成幻灯片,关了,就流畅无比。英伟达有些技术完全依托于高端显卡,所以看似这几年显卡性能一代比一代强,但是完全跟不上游戏的发展,尤其是画面的突飞猛进。当然最主要的还是游戏的优化,就我目前经验,大部分配置要求很高的游戏,优化都好不到哪去。
作者: davidweile& & 时间:
Nicolasking 发表于
搞笑等两月黄花菜都凉了,又有新的游戏谁还鸟你这蝙蝠侠
这游戏是华纳的,不是育碧的,不过优化倒是蛮像育碧的,比魔多可差多了。
作者: Sychogensanlar& & 时间:
大革命能流畅了?660Ti能玩否
作者: b232323q& & 时间:
Sychogensanlar 发表于
大革命能流畅了?660Ti能玩否
你是 &黑绿& 忠实粉丝!!!
作者: 钢三丝& & 时间:
作者: 达闻西& & 时间:
hzxs681953 发表于
然而你说的游戏都开了那些也很流畅,新显卡没有啥问题的说!AMD就算卖主机也没有老黄的1半份额多 ...
估计那个市场份额是没有算上主机上的那些销量的吧,听说主机上的显卡是修改过的
作者: langxicc& & 时间:
老黄笑了笑...
作者: zjz8888& & 时间:
Sychogensanlar 发表于
大革命能流畅了?660Ti能玩否
你的签名 真牛
作者: & & 时间:
行了&&论了变天屌用都没有,玩不了的还是玩不了,玩不痛快的还是玩不痛快!
我们还是来看看15L的签名吧!
来来来 论点实际的!!
有地址吗??
作者: Fa1L& & 时间:
以后PC游戏只会越来越渣,显卡商给的钱比卖游戏赚得多
作者: rehab1987& & 时间:
技术还不成熟,但是还是支持搞新技术
会有一天现在性价比极低的特效会变得非常普及
巫师3的头发刚开始也卡倒了一大片人
语言和知识是一点,界面应该也更人性化一点,那些高级特效不该和普通选项放一起,这样比较菜的玩家就不会去理会了
作者: hman2& & 时间:
Nvidia Game Work 這個確實坑了不少玩家..
作者: xiaobo123we& & 时间:
老黄的物理特效 至今用的最好的可能就是4A的 地铁最后的曙光& &本人原先的用的N卡 现在用的A卡&&感觉就是开跟不开这项效果&&对帧率几乎没什么损失。个人认为估计物理效果支持的最好&&而且性能想要损失的少 估计必须得在做引擎的时候就要把这项效果加进去&&不然半路出家的引擎&&只能外挂这项技术
作者: 单机才是王道& & 时间:
没有老黄就没有PC版&&明白不
作者: 嚕出血的男人& & 时间:
只要跟老黃有關的PC遊戲,沒有一款優化能正常!幾乎都是罵聲一片
作者: 灌灌就闪& & 时间:
用着A卡的人就老老实实用,别没事找存在感,至于什么性价比,就只能呵呵,天下没有免费的午餐,一分钱一分货,商家永远是赚钱的,玩家总是选适合自己的,
不是喷A卡,我用N感觉就是玩游戏溜,A在游戏处理上的确没有N酸爽,至少我认为N卡花2500买个GTX970.A卡有卖2500的比N卡流畅的,在同一个游戏上都能支持那个特效的话,我肯定支持A卡。
作者: a5187213& & 时间:
本帖最后由 a5187213 于
07:34 编辑
davidweile 发表于
关了也有点卡,这游戏优化本身就有问题。不过ngw,确实肯爹,我估计这东西应该是个工具,对于开发者来说做 ...
开发者根本不用做什么优化啊..&&如果要做岂不是违背这套工具 简易开发的初衷
不过这套工具确实客观起到了打击对手的作用 实现同样特效可以专门针对己方显卡的优势来做 对面显卡的劣势来做..
作者: davidweile& & 时间:
a5187213 发表于
开发者根本不用做什么优化啊..&&如果要做岂不是违背这套工具 简易开发的初衷
不过这套工具确实客观起到了 ...
问题是己方也是深受其害呀,真的要起到打击对手的目的,我觉得要n卡的中端卡也能开启这样的效果,并保证30帧以上才行。起码现阶段n卡还做不到。
作者: order8550& & 时间:
嚕出血的男人 发表于
只要跟老黃有關的PC遊戲,沒有一款優化能正常!幾乎都是罵聲一片
简直是你别玩游戏了
作者: a5187213& & 时间:
davidweile 发表于
问题是己方也是深受其害呀,真的要起到打击对手的目的,我觉得要n卡的中端卡也能开启这样的效果,并保证3 ...
必然啊 无脑X64的曲面细分&&就是980也很难吃得消
不过& &只要让玩家心里有这么先入为主的概念& &A卡掉帧比N卡严重得多 就达到目的了
欢迎光临 3DMGAME论坛 (http://bbs.3dmgame.com/)
Powered by Discuz! X3.21308人阅读
怎样查出SQLServer的性能瓶颈
--王成辉翻译整理,转贴请注明出自微软BI开拓者[url]www.windbi.com[/url]
--原帖地址
如果你曾经做了很长时间的DBA,那么你会了解到SQLServe的性能调优不是一个精密的科学。即使是,对于为最佳的性能找到最佳的配置也是很困难的。这是因为对于调优来说很少东西是绝对的。例如,一个性能调优可能对某一方面有用,可是却会影响其他的性能。
我曾经做过DBA,在最后7年的日子里,我总结了一套SQLServer调优的清单。当第一次进行SQLServer性能调优的时候,可以用它来作为一个向导。我经常被邀请去检查SQLServer并提供一些性能方面的建议。直到现在,我还没有真正写下一个贯穿整个性能调优过程的方案。但是当我做了越来越多的性能调优的咨询工作后,我现在决定花点时间整理出来。你将会发现它是很有用的,就象我发现对我的用处一样.
SQLServer性能监控
这套性能优化的清单将至少准科学的帮助你找出你的SQLServer任何明显的性能问题。说是这样说,SQLServer的性能调优仍然是很困难的。我试图用这套清单去找出“容易”的sqlserver性能问题,困难的留待稍后。我这样做是因为很容易将容易和困难的的性能调优问题搞混。通过列出一个“容易”的性能调优范围,就很容易的将这些问题解决,一旦解决了这些容易的问题,那么你就能集中去解决更困难的问题。
使用这个SQLServer性能调优清单的一个好处是,它将不仅仅告诉你目前最容易解决的性能问题是什么,而且还帮助你正确的去解决。在某种程度上,你可以选择不同的顺序进行。换句话说,你可以故意做出特殊的决定而不是按照清单通常的顺序进行。某种意义上说你是对的,不是所有的性能调优建议都适合所有的情形。另外,你的决定是基于你的资源限制,例如没有足够的钱去买满足负荷的硬件。如果真是那样的话,你就别无选择了。还有,你的决定可能基于一些政治原因,那是你不得不作出的改变。不管怎样,你需要知道你能做什么,使用这个性能调优清单找出你能改变的范围并做出相应的改变提升你的SQLServer的性能。
一般来说,你将在你的每一个SQL服务器上执行这个清单。如果遇到清单中的一些问题,这会花掉你一些时间。我建议你从目前性能问题最多的的服务器开始,然后当你有时间的时候按照自己的思路去解决其他服务器。
一旦你完成了,可仍然有很多事情要去做。记住,这些只是一些容易的。一旦你完成了这些容易的,接下来你需要花时间去解决更困难问题。这个是另一篇文章要解决的问题了。
怎样进行你的SQLServer性能调优呢?
为了使其变得容易,我把它们分成了以下几个部分:
? 使用性能监视器找出硬件瓶颈&
? SQLServer硬件性能监控列表&
? 操作系统性能监控列表&
? SQLServer2000配置性能监控列表&
? 数据库配置设置性能监控列表&
? 索引性能监控列表&
? 应用程序和T-SQL性能监控列表&
? SQLServer数据库作业性能监控列表&
? 使用Profiler找出低效的查询&
? 怎样最好的实现SQLServer性能监控
管理你的SQLServe性能的最好方法是首先回顾上面每一部分的内容,把它们打印出来。然后完成每一部分的内容,写下你收集到的结果。你也可以按照你喜欢的顺序进行。上面的步骤仅仅列出了我执行的顺序,因为那样通常能达到一个比较好的效果。
性能监控列表
计数器名称 均值 最小值 最大值&
Memory: Pages/sec&
Memory: Available Bytes&
Physical Disk: % Disk time&
Physical Disk: Avg. Disk Queue Length&
Processor: % Processor Time&
System: Processor Queue Length&
SQL Server Buffer: Buffer Cache Hit Ratio&
SQL Server General: User Connections&
在上表输入你的结果.
使用性能监视器找出SQLServer硬件瓶颈&
开始SQLServer性能调优的最佳地方就是从性能监视器(系统监视器)开始。通过一个24小时的周期对一些关键的计数器进行监控,你将对你SQLServer服务器的硬件瓶颈了如指掌。
一般来说,使用性能监视器去创建一个一些关键的计数器的24小时周期的监控日志。当你决定创建这个日志的时候,你需要选择一个典型的24小时的周期,例如,选择一个典型的比较忙的日期,而不是周日或节假日。
一旦你将这些捕获的数据形成日志后,在性能监视器的图形界面下会显示计数器的推荐值。你在上表中记下均值、最小值、峰值。做完这些后,用你的结果跟下面的分析比较。通过你的结果和下面的建议值进行比较,你将能快速的找到你的SQLServe正在经历的潜在的硬件瓶颈。
关键性能计数器说明&
下面是不同关键性能计数器的一个讨论,它们的建议值和为了帮助解决硬件瓶颈问题的一些选项。注意我已经限制了性能监视器需要监视的一些关键计数器。我这么做是因为在本文我们的目的是为了容易的找到显而易见的性能问题,许多其他的性能监视器计数器你能在本网站其他地方找到。
Memory: Pages/sec&
这个计数器记录的是每秒钟内存和磁盘之间交换的页面数。交换更多的页面、超过你服务器承受的更多的I/O,将轮流降低你SQLserver的性能。你的目的就是尽量将页面减少到最小,而不是消除它。
如果你的服务器上SQLServer是最主要的应用程序,那么这个值的理想范围是0~20之间。可能很多时候你看到的值都会超过20。这个值一般要保持在每秒的平均页数在20以下。
如果这个值平均总是超过20,其中最大的一个可能是内存瓶颈问题,需要增加内存。通常来说,更多的内存意味着需要执行的页面更少。
在大多数情况下,服务器决定SQLServer使用的适当内存的大小,页面将平均小于20。给SQLServer适当的内存意味着服务器的缓存命中率(Buffer Hit Cache Ratio 这个稍后会讲到)达到99%或者更高。如果在一个24小时的周期里你的sqlserver的缓存命中率达到99%或者更高,但是在这个期间你的页面数总是超过20,这意味着你或许运行了其他的程序。如果是这样的情况,建议你移除这些程序,使SQLServer是你的服务器的最主要的程序。
如果你的sqlserver服务器没有运行其他程序,并且在一个24小时的周期里页面数总是超过20,这说明你应该修改你对SQLServer的内存设置了。将其设置为“动态配置SQLServer的内存”,并且最大内存设置得高一些。为了达到最优,SQLServer将尽可能的获得多的内存以完成自己的工作,而不是去和其他的程序争夺内存。
Memory: Available Bytes&
另一个检查SQLServer是否有足够的物理内存的方法是检查Memory Object: Available Bytes计数器。 这个值至少大于5M,否则需要添加更多的物理内存。在一个专门的SQLServer服务器上,SQLServer试图维持4-10M的自由物理内存,其余的物理内存被操作系统和SQLServer使用。当可用的物理内存接近5M或者更低时,SQLServer最可能因为缺少内存而遇到性能瓶颈。遇此情况,你需要增加物理内存以减少服务器的负荷,或者给SQLServer配置一个合适的内存。
Physical Disk: % Disk Time&
这个计数器度量磁盘阵列繁忙程度(不是逻辑分区或磁盘阵列上独立的磁盘)。它提供一个对磁盘阵列繁忙程度相对较好的度量。原则上计数器% Disk Time的值应该小于55%。如果持续超过55%(在你24小时的监控周期里大约超过10分钟),说明你的SQLServer有I/O瓶颈。如果你只是偶尔看到,也不必太担心。但是,如果经常发生的话(也就是说,一个小时出现好几次),就应该着手寻找增加服务器I/O性能或者减少服务器负荷的解决之道了。一般是为磁盘阵列增加磁盘,或者更好更快的磁盘,或者给控制器卡增加缓存,或者使用不同版本的RAID,或者更换更快的控制器。
在NT4.0上使用该计数器之前,确认在NT命令提示符下输入diskperf -y,重启服务器,以便手动打开。在NT4.0下第一次必须将该计数器打开,Windows2000默认是打开的。
Physical Disk: Avg. Disk Queue Length&
除了观察物理磁盘的% Disk Time计数器外,还可以用Avg. Disk Queue Length计数器。磁盘阵列中的各个磁盘的该值如果超过2(在你24小时的监控周期里大约超过10分钟),那么你的磁盘阵列存在I/O瓶颈问题。象计数器% Disk Time一样,如果只是偶尔看到,也不必太担心。但是,如果经常发生的话,就应该着手寻找增加服务器I/O性能的解决之道了。如前所述。
你需要计算这个值,因为性能监视器不知道你的磁盘阵列中有多少物理磁盘。例如,如果你有一个6个物理磁盘组成的磁盘阵列,它的Avg.
Disk Queue Length值为10,那么实际每个磁盘的值为1.66(10/6=1.66),它们都在建议值2以内。
在NT4.0上使用该计数器之前,确认在NT命令提示符下输入diskperf -y,重启服务器,以便手动打开。在NT4.0下第一次必须将该计数器打开,Windows2000默认是打开的。
一起使用这两个计数器将帮助你找出I/O瓶颈。例如,如果% Disk Time的值超过55%,Avg. Disk Queue Length计数器值超过2,服务器则存在I/O瓶颈。
Processor: % Processor Time&
处理器对象: % Processor Time计数器对每一个CPU可用,并针对每一个CPU进行检测。同样对于所有的CPU也可用。这是一个观察CPU利用率的关键计数器。如果% Total Processor Time计数器的值持续超过80%(在你24小时的监控周期里大约超过10分钟),说明CPU存在瓶颈问题。如果只是偶尔发生,并且你认为对你的服务器影响不大,那没问题。如果经常发生,你应该减少服务器的负载,更换更高频率的CPU,或者增加CPU的数量或者增加CPU的2级缓存(L2
System: Processor Queue Length&
根据% Processor Time计数器,你可以监控Processor Queue Length计数器。每个CPU的该值如果持续超过2(在你24小时的监控周期里大约超过10分钟),那么你的CPU存在瓶颈问题。例如,如果你的服务器有4个CPU,Processor Queue Length计数器的值总共不应超过8。
如果Processor Queue Length计数器的值有规律的超过建议的最大值,但是CPU利用率相对不是很高,那么考虑减少SQLServer的&max worker threads&的配置值。Processor Queue Length计数器的值高的可能原因是有太多的工作线程等待处理。通过减少&maximum worker threads&的值,强迫线程池踢掉某些线程,从而使线程池得到最大的利用。
一起使用计数器Processor Queue Length和计数器% Total Process Time,你可以找到CPU瓶颈,如果都显示超过它们的建议值,可以确信存在CPU瓶颈问题。
SQL Server Buffer: Buffer Cache Hit Ratio&
SQL Server Buffer中的计数器Buffer Cache Hit Ratio用来指出SQLServer从缓存中而不是磁盘中获得数据的频率。在一个OLTP程序中,该比率应该超过90%,理想值是超过99%。如果你的buffer cache hit ratio低于90%,你需要立即增加内存。如果该比率在90%和99%之间,你应该认真考虑购买更多的内存了。如果接近99%,你的SQLServer性能是比较快的了。某些情况下,如果你的数据库非常大,你不可能达到99%,即使你在服务器上配置了最大的内存。你所能做的就是尽可能的添加内存。
在OLAP程序中,由于其本身的工作原理,该比率大大减少。不管怎样,更多的内存总是能提高SQLServer的性能。
SQL Server General: User Connections&
既然sqlserver的使用人数会影响它的性能,你就需要专注于sqlserver的General Statistics Object: User Connections计数器。它显示sqlserver目前连接的数量,而不是用户数。
如果该计数器超过255,那么你需要将sqlserver的&Maximum Worker Threads& 的配置值设置得比缺省&#高。如果连接的数量超过可用的线程数,那么sqlserver将共享线程,这样会影响性能。&Maximum Worker Threads&需要设置得比你服务器曾经达到的最大连接数更高。
SQLServer硬件性能监控列表
--王成辉翻译整理,转贴请注明出自微软BI开拓者[url]www.windbi.com[/url]
--原帖地址
性能监控列表
SQLServer硬件特征 相应的描述&
Number of CPUs&
CPU L2 Cache Size&
Physical RAM Amount&
Total Amount of Available Drive Space on Server&
Total Number of Physical Drives in Each Array&
RAID Level of Array Used for SQL Server Databases&
Hardware vs. Software RAID&
Disk Fragmentation Level&
Location of Operating System&
Location of SQL Server Executables&
Location of Swap File&
Location of tempdb Database&
Location of System Databases&
Location of User Databases&
Location of Log Files&
Number of Disk Controllers in Server&
Type of Disk Controllers in Server&
Size of Cache in Disk Controllers in Server&
Is Write Back Cache in Disk Controller On or Off?&
Speed of Disk Drives&
How Many Network Cards Are in Server?&
What is the Speed of the Network Cards in Server?&
Are the Network Cards Hard-Coded for Speed/Duplex?&
Are the Network Cards Attached to a Switch?&
Are All the Hardware Drivers Up-to-Date?&
Is this Physical Server Dedicated to SQL Server?&
在上表里输入你的值.
监控硬件是早期的重要步骤&
从以前的章节里(使用性能监视器),你可以找出一些潜在的硬件性能瓶颈。这一节里,我们将查看SQLServer硬件的每一个主要组件,以帮助最优化你硬件的性能。 将分以下几个部分进行:&
? Memory&
? Disk Storage&
? Network Connectivity&
作为监控的一部分,你需要完成上面的列表,这样,你就会对你的服务器无所不知了。&
这第一个是显而易见的,越多的CPU性能越快。SQLServer2000的标准版支持4个CPU。企业版支持最多32个CPU,具体根据操作系统而定。更多的CPU对于全面提升SQLServer的性能是很有效的。
对任何一个基于SQLServer的应用程序需要的CPU数量进行估算是很困难的。这是因为每个应用程序的工作都是不同的,并且它们的使用也不同。有经验的DBA总是对应用程序需要什么样的CPU有个大概的了解,却很难真正知道需要什么样的CPU,直到在真实条件下测试了服务器的配置。
由于选择合适的CPU的数量是困难的,所以你可以考虑下面的原则:&
? 尽可能的购买更多CPU数量的服务器。&
? 如果你做不到,那么至少要购买一个能扩展CPU数量的服务器。几乎所以的SQLServer在工作量增加时都需要更多的动力。
这是一些潜在的假设:&
? SQLServer将仅仅用来运行一个同时不超过5个用户的财务应用程序,并且你预期未来两年不会改变。如果是这样,单CPU的服务器就足够用了。如果预期用户数量在不久会增加的话,那么你需要考虑购买一个单CPU的,并且拥有可扩展一个CPU数量的服务器以备不时之需。&
? SQLServer用来运行一个内部的写程序,这个程序不仅仅包括OLTP,而且需要支持繁重的报表需求。预期用户同时不会超过25个。如果是这样,你需要考虑一个双CPU的服务器,但是它应该可以扩展到4个CPU。“繁重的报表需求”的真正含义是很难预计的。我曾经看到一些相当简单,但是不好的写报表,占用了服务器全部的CPU。&
? SQLServer运行一个目前用户为100到150之间的ERP包。对于象这样的“重型”程序,询问推荐的硬件配置。因为他们已经对他们的产品需要的CPU配置有了一个很好的建议。
我能提供一些其他的例子,但是通过这些我发现:正确预计基于SQLServer的一个特殊的应用程序的CPU的数量是很困难的。你通常应该购买一个比你认为要大的系统,因为在许多情况下,一个应用程序的使用需求经常是被低估了的。现在购买一个有多个CPU的大服务器来长期使用也不是很昂贵了,总比你在6到12个月后由于当初的低估不得不重新替换你整个服务器要划算得多。&
象CPU的数量一样,需要的CPU的速度 也是很难估计的。一般说来,尽量购买最快的CPU。购买速度快的总是好于速度慢的。&
CPU 2级缓存&
我曾经遇到一个比较普遍的问题:购买2级缓存较小的便宜的CPU好呢,还是购买2级缓存较大的昂贵的至强CPU好?事实上,在购买2级缓存较小的更快的芯片和购买较大2级缓存的芯片上做出决定是很困难的。这里有一些规则:
? 如果你仅有1、2个CPU,那么尽量买最快的,其次才考虑2级缓存。如果你一定要选择2级缓存大小的话,尽量选择较大的。&
? 但是,如果你有4个或更多的CPU,那么你需要较大2级缓存的CPU,即使它们的速度不太高。这是因为对于一个有4个或更多CPU的服务器来说,要想尽量让SQLServer运行良好的话,2级缓存一定要大,否则将浪费额外的CPU。
CPU监控列表&
既然本文是关于你SQLServer目前CPU性能的一个监控,那么你现在应该关注你目前的服务器是否存在CPU瓶颈。正如在《使用性能监视器找出硬件瓶颈》一文所讨论的那样,你可以使用性能监视器帮助你找到硬件瓶颈。
如果你CPU目前没有瓶颈问题,那么你可以忽略下一部分关于memory的讨论。但如果你的服务器目前存在CPU瓶颈,并且是主要的性能问题,那么你可以选择以下的方法去解决瓶颈:
? 减少服务器的负荷。可以通过减少用户数量、调优查询、调优索引、除去在服务器上运行的不必要的程序来达到目的。另外如果你的产品服务器上还运行有关于报表的程序,将其移到一个专门为报表做的服务器上。&
? 如果CPU瓶颈是由于缺少服务器内存引起的,请添加更多的内存。这是一个普遍的问题。&
? 如果你目前的服务器有更多的CPU插槽,那么请添加更多的CPU。&
? 如果可以的话,用更快的CPU升级你的服务器。&
? 购买一个新的有更多更快CPU的服务器。
不幸的是,这些方法在处理CPU瓶颈时也不是轻而易举的,当然除非你们公司有足够的钱。作为一个DBA来说,你可能唯一能做的就是“减少服务器的负荷”这一项了。&
在讨论完CPU后,现在开始讨论内存,不要认为它不象CPU那么重要。事实上,内存可能是任何SQLServer服务器最重要的硬件部分,它比其他硬件更能影响SQLServer的性能。
当我们讨论内存的时候,一般指的是物理内存,而不是虚拟内存。SQLServer不是设计来用虚拟内存的,尽管它也能用。 并非联合使用操作系统的物理内存和虚拟内存,SQLServer总是尽可能的使用物理内存。这主要是为了提高速度。访问内存中的数据总是比访问磁盘上的快得多。
SQLServer不能总是把数据放在内存(SQLServer缓存)中,它也访问磁盘,就像操作系统管理虚拟内存一样。但SQLServer的“缓存”机制比操作系统的虚拟内存更快更诡异。
快速的知道SQLServer是否有足够内存的方法是检查SQLServer的缓存命中率(在《使用performance Monitor找出硬件瓶颈》一文有过讨论)。如果这个计数器为99%或者更高,说明有足够的内存。如果这个计数器在90%与99%之间并且你对性能比较乐观的话,那么你的SQLServer可能有足够的内存,但是如果你不满意服务器性能的话,则需要添加内存了。
如果这个计数器少于90%,关键在于性能无法被接受(如果运行的是OLAP,少于90%通常也没问题),所以需要添加更多的内存。 SQLServer的物理内存的理想值应该超过服务器上最大数据库的大小。这总是不可能的,因为许多数据库是非常大的。如果你正在计算
SQLServer的大小,并且有足够的预算,那么尽量去购买能容纳整个数据库大小的物理内存。假定你的数据库是4G或者更小,那么这通常不会成太大的问题。但是如果你的数据库更大(或者预期会超过4G),那么你可能容易地提供超过4G的内存。SQLServer2000企业版支持高达64G的内存,没有太多的服务器支持这么大的内存。
即使SQLServer的缓存不能容纳整个数据库,SQLServer仍然能快速的获取数据。99%的缓存命中率意味着SQLServer需要的数据99%的时间都是在缓存中的,性能非常快。例如,我管理一个30G的数据库,但是服务器仅有4G的内存,而缓存命中率总是高于99.6%。这意味着大多数情况下用户没有同时访问数据库里所有的数据,仅仅一小部分而已,SQLServer也能将经常访问的数据始终放在缓存中,所以99%的请求在这种情况下能迅速完成,即使服务器的内存少于数据库的大小。
那么,要点是什么呢?如果你的缓存命中率少于90%,那么认真的考虑添加更多的内存了。
磁盘存储器&
在内存之后,磁盘存储器也是经常影响SQLServer性能的的最重要的因素。 它也是一个复杂的话题。在这部分,我将专注于磁盘存储器影响性能最容易的地方。 服务器上可用磁盘空间的总量 所有的磁盘阵列至少要20%的可用空间,这样对性能影响才不是很大。这是因为NTFS(假定你使用的是该磁盘格式)需要额外的空间才能工作得更好。如果没有可用空间,那么NTFS不能运行并且性能会降低。它也会导致更多的磁盘碎片,因为服务器读写数据更加可能。
查看你SQLServer的每一块物理磁盘,检查一下是否有至少20%或者更多的可用空间。如果没有,考虑以下方法:&
? 删除磁盘上任何不需要的数据(清空回收站、临时文件、setup文件等等)&
? 删除一些数据以留出更多的空间&
? 添加更多的磁盘空间
每一个磁盘阵列的物理磁盘数量 一个磁盘阵列通常由2个或者更多的物理磁盘作为一个单一的单元一起工作。例如RAID5阵列也许有4个物理磁盘。那么为什么了解你SQLServer的一个或多个磁盘阵列有多少个物理磁盘是很重要的呢?
除镜像磁盘(两个物理磁盘一起工作)外,磁盘阵列有越多的物理磁盘,对于磁盘阵列的读写就越快。 例如,假如想买一个新的做RAID5的至少有100M可用空间的SQLServer服务器,并要求提供以下两种不同的磁盘阵列配置:&
? 4个36G的磁盘(可用空间为108G)&
? 7个18G的磁盘(可用空间为108G)
按照要求这两者都符合标准。但是哪一种磁盘阵列能提供更快的读写性能呢?答案是第二种,即7个18G的磁盘。为什么呢?
一般说来,磁盘阵列中磁盘越多,可用来读写的磁盘头就越多。例如,SCSI磁盘可以同时读和写数据。所以一个磁盘阵列有越多的物理磁盘,该磁盘阵列的读写速度就越快。阵列中的每个磁盘分担一部分工作量,磁盘越多越好。这儿有一个限制,依赖于磁盘控制器,但通常说来,越多越好。 那么这对你来说意味着什么呢?在你查看了你的服务器有多少磁盘阵列、每个磁盘阵列有多少磁盘后,重新配置目前的磁盘阵列以更好的利用
是不是可行呢?
例如,假定你目前的服务器有2个磁盘阵列用来存储用户数据库。每一个是3个18G的磁盘组成的RAID5阵列。这种情况下,将两个阵列重新配置成一个由6个18G的磁盘组成的阵列会更好。这不仅仅提供了更快的I/O,而且也能获得18G的的磁盘空间。
仔细检查你目前的配置,你可以改变很多,也许不可以。但是如果你可以改变的话,你将在你改变之后立即从中得到好处。 SQLServer数据库通常使用的磁盘阵列的RAID级 或许你已经知道,磁盘阵列有不同类型的配置,称作RAID级别。每一级别都有各自的拥护者和反对者。下面是一些经常使用的RAID级别的简单总结,了解后你就知道在你的SQLServer怎样更好的使用它们:
? 操作系统(包括虚拟内存)和SQLServer最理想的是运行在RAID1磁盘阵列上。也有人将虚拟内存运行在一个独立的RAID1磁盘阵列上,但是我对这样做是否能提供虚拟内存性能表示怀疑,在一个好的配置的服务器上,那不是问题。&
? 如果你的SQLServer数据库非常小,所有的数据都能在一个磁盘下存储,那么请为你的数据库文件存储考虑RAID1级别。&
? 理想地,每一个独立的事务日志应该运行在一个独立的RAID1磁盘阵列上。这是因为事务日志在不断的读写,通过放在独立的磁盘阵列上,由于连续的磁盘I/O不和更慢的随机的磁盘I/O混合使用,从而使性能得到提升。
? 尽管这是比较流行的RAID级别,对于最优化SQLServer的I/O性能还不是最好的选择。如果数据库的写操作比例超过10%,大多数OLAP数据库都是这样,写性能会降低,从而伤害整个SQLServer的I/O性能。RAID5最好用于只读或者大部分时候是读的数据库。在微软的测试发现RAID5比RAID10几乎要慢50%。
? RAID10为SQLServer数据库提供了最好的性能,尽管它是最贵的。数据库的写操作越多,使用RAID10更重要。&
? RAID10阵列对于事务日志也是不错的选择,假定它只用来存储单个事务日志。
更可能的是,你目前的SQLServer配置不符合上面的建议。某些情况下,你需要更改你目前的配置以尽量符合上面的建议,但是大多数情况下,你可能不得不忍受直到有新的预算去买新的服务器和磁盘阵列。
如果你只能选择上面的一个 建议的话,我建议你使用RAID10。这将最大化你SQLServer的I/O性能。&
硬件RAID vs. 软件RAID&
可以通过硬件或者软件(通过操作系统)实现RAID。不要使用软件RAID,会很慢,总是使用硬件RAID,这是不争的事实。&
如果你在一个崭新的磁盘阵列上创建了一个新的数据库,数据库文件和事务日志文件会是一个连续的文件。但如果数据库文件或事务日志文件
在创建时指定的最大容量里增长(通常都会超过该容量),随着时间的推移文件可能会产生碎片。文件碎片(磁盘阵列上分散的许多块文件)
引起你的磁盘阵列在读写数据时变慢,从而影响磁盘I/O的性能。
作为性能监控的一部分,你需要了解你的SQLServer数据库和事务日志是怎样产生碎片的。如果你使用的是Windows2000或者2003,你可以使用内建的碎片整理工具去分析文件变成碎片的严重程度。如果你运行的是NT4.0,那么你可以借助第三方工具如DisKeeper来进行分析。 如果分析结果需要进行碎片整理,则进行。不幸的是,整理SQLServer数据库和事务日志的碎片不总是一件容易的事。运行着的文件,象在
SQLServer上运行的数据库和事务日志文件,不总是能进行碎片整理。例如,内建的碎片整理工具不能整理SQLServer的MDF和LDF文件,但是DisKeeper8.0在大多数情况下可以,而不是全部情况都可以。这意味着在某些情况下,为了整理SQLServer的MDF和LDF文件的碎片,你不得不使SQLServer离线。依赖文件整理的方式、文件的大小、这可能需要花费很多小时。
你真有必要对数据库文件进行碎片整理吗?如果你的I/O性能目前比较适中,那么你不需要进行碎片整理。但是如果你的I/O性能是个瓶颈的话 ,碎片整理是一个提升性能的便捷之道,尽管大多数情况下会花费一些时间。
理想地,你应该周期性的整理你的SQLServer数据库和事务日志碎片。这样,你能确信没有I/O性能问题。&
为了最佳性能,操作系统文件和SQLServer数据库文件(MDF、LDF文件)不要放在一个磁盘阵列上。另外,操作系统文件应该放在一个支持 RAID1、5或10的磁盘阵列上。
和大多数人一样,通常我也是在服务器的C盘上安装操作系统。并且为了容错和最好的性能将C盘配置为RAID1的镜像磁盘。 在大多数情况下, 只要你不把操作系统和SQLServer数据文件放在同一个磁盘阵列上,你在服务器上处理操作系统文件就会获得很大的性能。&
SQLServer程序&
象操作系统文件一样,SQLServer程序也不是很挑剔,只要不和SQLServer数据文件放在同一个磁盘阵列上就行。和操作系统文件一起,我通常将SQLServer程序放在被配置为RAID1镜像的C盘。 如果你在配置SQLServer7.0的群集,那么SQLServer程序不能安装在C盘,必须安装在共享磁盘阵列上。不幸的是这经常和SQLServer的数据文件是同一个磁盘阵列,除非你有足够的钱仅仅为提升SQLServer程序性能而购买一个独立的独立磁盘阵列。当性能被与数据库文件在同一磁盘阵列上的SQLServer程序轻微影响时,获得容错能力也是一个不太坏的折中方案。另一方面,升级到SQLServer2000群集是一个不错的选择。如果你在配置SQLServer2000群集,那么SQLServer程序必须放在本地磁盘上,而不是共享磁盘阵列上,所以性能不成问题。&
如果你有一台SQLServer的专用服务器,并且SQLServer的内存设置为动态(缺省),那么虚拟内存将很少用到。这是因为SQLServer通常不会太多的使用它。因此,虚拟内存放在任何一个特定的位置不是关键,除了不要放在SQLServer数据文件的同一磁盘阵列上。 通常,我把虚拟内存放在操作系统和SQLServer程序的同一磁盘阵列上,正如我前面所述,它是一个支持RAID1、RAID5、RAID10的磁盘阵列,通常是C盘,这使管理员更容易管理。
如果不是SQLServer专用服务器,除了SQLServer外还运行了其他程序,由于其他程序的原因,虚拟内存可能会有问题,为了获得更好的性能,你需要考虑将虚拟内存配置到一个专用的列上。然而,更好的方法是使用一台SQLServer的专用服务器。&
tempdb数据库&
如果tempdb数据库的使用比较繁重,为了提高磁盘I/O性能,考虑将它移到一个RAID1或者RAID10的独立磁盘阵列上。不要使用RAID5,因为对于写操作是慢的,如使用,会对tempdb产生副作用。如果不能提供独立的磁盘阵列,你有不想将它与数据库文件放在同一个磁盘阵列上,可以考虑放在操作系统的那个磁盘上,这将帮助减少I/O的争夺以提高性能。
如果应用程序非常多的使用tempdb数据库,从而引起文件增长超过它的缺省大小,那么你需要将tempdb的缺省大小增加到最近你的应用程序实际使用的tempdb的大小。这是因为每次SQLServer服务重新启动后,tempdb文件都会按照缺省值重建。当tempdb增长时会花费一些性能资源。通过在SQLServer重新启动时给tempdb分配一个合适的大小,你不必担心在使用时超过这个大小了。 另外,在tempdb数据库里繁重的操作会降低应用程序的性能。尤其是在创建一个或多个大的临时表去查询或者做联接时。为了加速这些查询,确信tempdb数据库的AUTOSTATS(自动更新统计信息)选项已打开,并且在这些临时表上创建一个或多个索引。大多数情况下,你将发现这能充分加速你的应用程序。但象许多性能建议一样,测试看看是否有实际的帮助。&
系统数据库&
系统数据库(master、msdb、model)没有大量的读写操作,所以把它们和你的SQLServer数据文件放在同一磁盘阵列上通常也没有性能问题。仅仅一种情况除外,就是有成百上千用户的大数据库。这种情况下,把系统数据库放在一个独立的磁盘阵列上以稍微提高I/O性能。&
用户数据库&
为了最佳性能,用户数据库文件放在它们自己的磁盘阵列上(RAID1、5或10),和所以的其他数据库文件,包括日志文件分开。如果再同一个SQLServer上有多个大数据库的话,考虑为每一个数据库文件分配一个独立的磁盘阵列以减少I/O争夺。&
理想地,每一个日志文件都应该有它自己独立的磁盘阵列(RAID1或10,注意RAID5会降低事务日志写操作的性能,低于你的预期)。原因是大多数时候,事务日志在连续的写操作,如果磁盘阵列能连续的写数据的话(不必中断去进行其他的读写操作),那么连续写会很快。但是如果你的磁盘阵列不能连续的写的话,由于它不得不随机的执行其他读写操作,连续写就得不到执行,性能就降低了。
当然,为每一个日志文件提供一个独立的磁盘阵列是很昂贵的。那么至少将所有的日志文件放在一个磁盘阵列上(RAID1或RAID10),而不要与数据库文件放在一个磁盘阵列上。连续的写性能尽管没有为每个日志文件提供一个独立的磁盘阵列那样好,它仍然比试图与数据库文件一起竞争磁盘I/O的性能好的多。&
服务器上磁盘控制器的数量&
单个的磁盘控制器,不论它是SCSI还是fibre,都有一个最大的吞吐量的限制。因此,你需要让磁盘控制器的数量与你期望的数据吞吐量相匹配。每个控制器都是不同的,我无法推荐一个明确的解决方案,但最少应该有2个磁盘控制器。一个用于非硬盘设备如CD-ROM、备份设备等等。另一个用于硬盘。目的是不要将快的和慢的设备放在同一个控制器上。 经常使用的一个较好的方案是:一个控制器为非硬盘设备,一个为RAID1的本地硬盘,第三个(有时更多)用于存放数据库文件和日志文件的磁盘阵列。确保不要为控制器捆绑超过它能处理的更多的磁盘,那样当它工作的时候,会降低性能。&
服务器上磁盘控制器的类型&
总是尽可能的购买最快的磁盘控制器,如果你想要最好的SQLServer性能的话。也许你知道,不同的磁盘控制器有不同的性能特征。例如,对于SCSI类型来说,就有Wide SCSI, Narrow SCSI, Ultra SCSI等不同的类型。光纤连接在更小的层次上,也和上述一样,不同的磁盘控制器有不同的性能特点。 由于控制器的种类很多,我不能做任何明确的建议。通常硬件厂商会提供不同的模型供选择。逐一咨询各自的利弊,选择最适合你的那一款。&
服务器上磁盘控制器的缓存大小&
当你购买磁盘控制器的时候,也要考虑它缓存的大小。一些磁盘控制器允许添加额外的磁盘缓存。通常你要购买的磁盘缓存应和控制器能容纳 的缓存一样多。SQLServer对I/O是非常强烈的,所以去做任何可以提高I/O性能的事,象购买一个大的磁盘缓存,将帮助很大的改善性能。
磁盘控制器上的写回缓存是开还是关?&
磁盘控制器上的磁盘缓存提供两个方法去加速访问。一个是为了读,一个是为了写。这其中最重要的是读,这是大多数SQLServer数据库花费磁盘I/O时间的地方。另一方面,一个写回缓存是用来加速写操作的,而写相对于读来说通常不是很多。不幸的是,大多数情况下,SQLServer采取写回缓存不打开,因此,写回缓存在大多数磁盘控制器上是被关掉的。如果你不那样,在一定环境下,在SQLServer写数据后(一旦它写完数据,它就会认为是正确地写的),可能会取得一些脏数据,但是由于某些原因(例如电力不够),写回缓存不会把数据写到磁盘上。
一些控制器提供了备份电池以防止这样的问题,但它们不总是能如预期的那样工作。个人认为,宁愿要正确的数据虽然写慢一点,也不要错误 的数据,尽管那样写更快。 换句话说,我建议你关掉磁盘控制器上的写回缓存,虽然那样会对写性能有一些非常小的影响。&
磁盘阵列里的磁盘有不同的转速。 正如你所想,为了最佳的性能,总是购买最快的磁盘。通常是15000转或更快。另外,不要将不同转速的磁盘放在同一个磁盘阵列里,那样会影响性能。&
服务器上的网卡数量是多少?&
幸运的是, 网络流量通常不会称为SQLServer的瓶颈。单个网卡总是足够用。但是如果你发现网络流量成问题了(你已经有成百上千个用户),那么添加多个网卡总是正确的,这能提高性能。另外,两个或者更多的网卡能增加冗余,减少宕机时间。&
网卡速度是多少?&
至少应使用100M的网卡,10M的不能满足你需要的带宽。如果一个或者更多的100M的网卡不能满足,考虑用G级的网卡。事实上,你可能需要完全地跳过100M的网卡而仅仅用G级的网卡代替。使用更快的网卡不会增加网络流量,它仅仅允许更多的流量通过,轮流的允许你的服务器在适宜的性能下运行。&
网卡硬编码是Speed/Duplex的吗?&
如果你的SQLServer有两个10/100或者10/100/1000的网卡,假定是自动识别网卡速度并设置为适合的,别相信那个能正常的工作。网卡通常不能正确的自识别,总是设置一个小于最佳速度的值或者duplex设置,这样会影响网络性能。你需要做的是手工设置卡的速度和duplex设置,以便你能确认它已经正确的设置了。&
网卡是连在交换机上的吗?&
在一个大的数据中心这是显而易见的,但是对于小的机构来说,使用一个Hub来连接服务器。要是那样,请认真考虑用适当的交换机替换掉Hub,用可能最高的性能去配置交换机,例如100M并且全双工通信。将Hub替换为交换机后在网络性能上会有一个戏剧性的不同。&
所有硬件的驱动都是最新的吗?
诚然,这是一个烦人的话题,但它比你认为的更重要。最大的性能消耗之一是有Bug的驱动(会引起一些奇怪的不常见的问题),无论它们是在磁盘控制器中还是网卡中,或者别的地方。通过使用最新的驱动,你有可能得到更好更快的性能的驱动,从而提高SQLServer的性能。 你应该定期的检查你的硬件是否有新的驱动可用,当你有时间的时候去安装它们。我本人曾经将一个老的有很多bug的驱动更新后是性能得到了彻底的根本提升。&
SQLServer服务器是专用的吗?&
前面我间接提到过,SQLServer应该运行在一个专用的服务器上,而不是和其他应用程序、软件共享一个服务器。当你将SQLServer和其他软件共享时,你迫使SQLServer去争取物理资源,这样调优SQLServer性能就更加困难。有很多次我在查找SQLServer性能低下的原因时都发现是另一个和SQLServer运行在同一台服务器上的应用程序的缘故。
性能监控列表&
操作系统性能相关项 你的配置
操作系统版本&
磁盘分区格式是NTFS5.0吗?&
NTFS数据文件加密压缩是否关闭?&
SP是否最新?&
服务器是否有最新的微软认证的硬件驱动?&
服务器是否是独立的服务器?&
应用程序响应是否设置为为后台访问最优化性能?&
安全审计是否打开?&
服务器的虚拟内存文件PAGEFILE.SYS有多大?&
不必要的服务是否关闭?&
所有不必要的网络协议是否关闭?&
是否使用杀毒软件?&
在上表输入你的结果.&
配置Windows服务器是很容易的,但却很关键&
这一部分性能监控将着重于基本的操作系统,为了获得最佳的SQLServer性能怎样去优化操作系统。 和SQLServer一样,Windows服务器也是自我调优的。但我们也可以象调优SQLServer一样,通过调优操作系统来提升性能。在提升操作系统性能的同时,SQLServer的性能也得到相应的提升。&
是否选择了性能最佳的操作系统?&
SQLServer可以运行在NT4.0,win2000和Win2003上,这里将讨论作为最新版本操作系统的Win2003。对于NT4.0和Win2000,将在其他的文章里进行介绍。 如果你想发挥SQLServer最佳的性能,你需要运行在Win2003上,它比提供了更多的性能改善,包括:&
? 更好利用Intel超线程CPU的能力。&
? 使用Intel芯片最多可支持32个CPU和64G的内存,使用Itanium芯片最多可支持64个CPU和512G的内存。&
? I/O通道和磁盘I/O性能得到充分提升的同时,减少了大量的I/O请求所需要的CPU资源。
如果你还没升级到2003,尽快升级吧。它会更快更容易的提升SQLServer的性能。&
磁盘分区格式是NTFS 5.0吗?&
如果你的服务器是新的,Win2000或Win2003也是最近安装的,呢帽所有的磁盘都是使用NTFS5.0格式化的。但是,如果服务器很老,且运行的是NT4.0,磁盘在升级到Win后没有重新格式化,磁盘格式可能还是NTFS4.0。 虽然NTFS5.0和4.0没有太多的不同,但升级也是值得的。NTFS5.0包括一些新的增强性能,这意味着在找文件时会访问更少的磁盘,通常磁盘读会更快。在Win以前,一些DBA将日志文件所在的磁盘或者磁盘阵列用FAT格式化,因为它比NTFS4.0稍微有些性能提升。在NTFS5.0下就不再是这样了,所以所有SQLServer的磁盘都用NTFS5.0格式化以达到最佳性能。
如果目前你在Win2000下用NTFS4.0格式运行你的SQLServer,对于你来说转到NTFS5.0也许是困难的。如果真是这样,我建议你不必担心,性能也不会有太大的伤害。但是如果你将NT4.0升级到2000,你需要用NTFS5.0重新格式化你的磁盘以利用每一个在你服务器上能发现的细微的性能提升。&
NTFS数据文件加密压缩是否关闭?&
2000下的NTFS5.0支持文件加密和压缩,在新安装的Win服务器上这两个值缺省是关闭的。这些特征确实在有限的环境下提供一些好处,却不能给SQLServer提供任何好处。事实上,使用一个或两者都用会极大地伤害性能。 正如你所知,SQLServer对I/O很敏感,任何增加磁盘I/O开销都会影响SQLServer的性能。文件加密和压缩显然增加了磁盘I/O开销,数据文件不论忙闲都得被维护。所以对SQLServer文件不论是压缩还是加密,都将极大地影响性能。
如果你作为DBA接手一个已经存在的SQLServer,你对它又不太熟悉,检查看看是否有人错误地打开了任何一个选项。如果是,关闭它,对所有的服务器用户来说,他们会认为你是性能高手。&
SP是否最新?&
每一个SP都有一个或更多的性能提升。因为微软进行了优化,或者修改了以前影响性能的Bug。 微软发布sp的时候不要安装,等测试完成后再安装。&
服务器是否有微软最新认证的硬件驱动?&
在很多场合,我在Win上都看到引起的性能问题的老的有Bug的硬件驱动。大多数情况下和磁盘或者网络驱动有关。 你应该周期性的检查你的服务器是否有最新的微软认证的硬件驱动。可以去硬件厂商的网站查看,或者通过微软的升级服务。大多数情况下,你在硬件厂商的网站上能找到新的驱动,但还没有经过微软的认证。我建议你等待微软的认证版本。尽管提升性能很重要,但软件的稳定性也很重要。&
Windows2000服务器是否配置为独立的服务器?&
Win可以配置为独立的服务器或者域控制器。为了最佳的性能,SQLServer应该运行在一个独立的服务器上。这是因为域控制器占用很多服务器资源,SQLServer的性能就会下降。&
应用程序响应是否设置为为后台服务最优化性能?&
在Win2000里,控制面板里的系统图标的高级标签下,单击性能选项,你可配置一个叫作“应用程序响应”的设置。可以从“应用程序”和“后台服务”中选择一个去优化性能。为了提升SQLServer性能,你应该选择“后台服务”,这样告诉操作系统你需要优先处理后台程序如SQLServer而不是前台程序。 在Win2003里,控制面板里的系统图标的高级标签下,单击性能下的设置按钮,单击高级标签。在这里,你可以象在2000里那样设置即可。
你也可以在这儿更改内存设置为程序和系统缓存二者之一。为了得到最佳的SQLServer性能,选择程序。这是告诉操作系统给程序如SQLServer而不是系统缓存分配更多的内存。 做完这些更改,可能需要重启服务器。&
安全审计是否打开?&
事实上,Win能审计服务器上的任何一个活动。许多安全审计确实是关闭的。为了最好的性能,不要打开另外的审计,否则会增加I/O开销,和SQLServer竞争I/O。当然,如果你不得不打开,尽可能的限制以尽量减少对性能的影响。&
服务器虚拟内存文件PAGEFILE.SYS有多大?&
微软建议PAGEFILE.SYS文件设置为物理内存的1.5倍。正确的数量需要依赖于运行的SQLServer。例如,如果你在运行全文索引服务,微软建议你设置为物理内存的3倍。 微软的建议是一个理想值,决定PAGEFILE.SYS大小的最佳途径是使用性能监视器监控Page File对象的% Usage计数器的值是多少,然后重新设置PAGEFILE.SYS的大小,最小应该稍微大于性能监视器记录的实际值,最大值比最小值大50M。
在Win2000中通过右击我的电脑,选择属性,单击高级标签,单击性能选项单击虚拟内存下的更改按钮,可以设置PAGEFILE.SYS的大小。更改后,需要重启生效。 在Win2003中,通过控制面板的系统图标的高级标签,单击性能下的设置按钮,然后单击高级标签,单击虚拟内存下的更改按钮,可以设置PAGEFILE.SYS的大小。&
不必要的服务是否关闭?&
为了最佳性能,关闭Win系统任何一个不需要的服务。这既节约了内存也节约了CPU,从而全面提升SQLServer性能。 下面是一些操作系统服务(不全),通常被认为是不重要可关闭的。其中一些服务也可不必安装,另外一些设置为“禁止”或“手动启动”, 这依赖于你服务器的安装和配置。一些服务仅仅在需要时启动,所以设置为手动启动,当不再需要的时候关闭。&
? Alerter&
? Application Management&
? Clipbook&
? Distributed Link Tracking Server&
? Fax Service&
? File Replication&
? FTP Service&
? Indexing Service&
? Internet Connection Sharing&
? Intersite Messaging&
? Kerberos Key Distribution Center&
? License Logging Service&
? Logical Disk Manager Administrative Service&
? Messenger&
? Microsoft Search&
? NetMeeting Remote Desktop Sharing&
? Network DDE&
? Network DDE DSDM&
? Print Spooler Service (if you won't be printing from this server)&
? QoS RSVP&
? Remote Access Auto Connection Manager&
? Remote Procedure Call (RPC) Locator&
? Routing and Remote Access&
? RunAsService&
? Smart Card&
? Smart Card Helper&
? SMTP Service&
? Telnet&
? Utility Manager&
? Windows Installer&
? World Wide Web Service
通常,我总是关闭这些服务,将它们的启动类型设置为手动。当然如果你需要任一服务,你不必关闭它。&
所有不必要的网络协议是否关闭?&
SQLServer通常只需要TCP/IP协议 。移除SQLServer服务器上其他不必要的网络协议可以通过减少网络流量来减少负荷。&
是否使用杀毒软件?&
实时的杀毒软件占去大量的SQLServer资源,在SQLServer服务器上不建议用,尤其是在集群上。
如果你担心病毒的话,你可以每天在不用SQLServer时进行远程扫描。
SQLServer配置项监控列表
--王成辉翻译整理,转贴请注明出自微软BI开拓者[url]www.windbi.com[/url]
--原帖地址
性能监控列表&
SQL Server配置设置 是否高级设置? 是否需要重启? 缺省值 当前值&
affinity mask Yes Yes 0&
awe enabled Yes Yes 0&
cost threshold for parallelism Yes No 5&
cursor threshold Yes No -1&
fill factor (%) Yes Yes 0&
index create memory (KB) Yes No 0&
lightweight pooling Yes Yes 0&
locks Yes Yes 0&
max degree of parallelism Yes No 0&
max server memory (MB) Yes No &
max text repl size (B) No No 65536&
max worker threads Yes Yes 255&
min memory per query (KB) Yes No 1024&
min server memory (MB) Yes No 0&
nested triggers No No 1&
network packet size (B) Yes No 4096&
open objects Yes Yes 0&
priority boost Yes Yes 0&
query governor cost limit Yes No 0&
query wait (s) Yes No -1&
recovery interval (m) Yes No 0&
scan for startup procs Yes No 0&
set working set size Yes Yes 0&
user connections Yes Yes 0&
在上表里输入你的结果.&
大多数SQLServer配置设置不必更改&
这一节,我们将讨论与性能相关的SQLServer配置设置。可以使用企业管理器或者系统过程SP_CONFIGURE对这些配置进行设置。&
正如标题所说,大多数情况下,你不应该修改SQLServer的这些缺省配置。这是因为大部分缺省值能为大多数SQLServer提供最优的性能。糟糕的是,如果你不知道改变这些值是什么意思的话,反而可能会影响SQLServer的性能。&
如果你是第一次处理SQLServer,首先应该了解各个配置的含义。然后一个一个的更改,跟缺省值比较看有什么变化。一旦你确定改变一个配置的值了,接下来你就应该知道为什么要改变它。如果你找不到原因,或者找到了但原因不可信,那么你需要修改回缺省值。接下来象前面那样去配置每一个值,以使其达到最合适。&
本文着重于SQLServer2000,不过大多数建议也适合SQLServer7.0。在SQLServer7.0下试图采用这些建议前,你需要从SQLServer7.0的帮助文档中确认。&
SQLServer2000中共有36个不同的配置 ,这里仅仅着重于23个与性能有关的关键配置。&
开始查看SQLServer的配置的最简单的方法是对你的每个服务器,在查询分析器里运行命令SP_CONFIGURE。&
你会看到类似下面的一个表:
name minimum maximum config_value run_value&
----------------------------------- ----------- ----------- ------------ ----------&
affinity mask -
allow updates 0 1 0 0
awe enabled 0 1 0 0
c2 audit mode 0 1 0 0
cost threshold for parallelism 0
cursor threshold -1
default full-text language 0
default language 0
fill factor (%) 0 100 0 0
index create memory (KB) 704
lightweight pooling 0 1 0 0
locks 647 0 0
max degree of parallelism 0 32 1 1
max server memory (MB) 4
max text repl size (B) 0
max worker threads 32 5
media retention 0 365 0 0
min memory per query (KB) 512
min server memory (MB) 0
nested triggers 0 1 1 1
network packet size (B) 512
open objects 0
priority boost 0 1 0 0
query governor cost limit 0
query wait (s) -1
recovery interval (min) 0
remote access 0 1 1 1
remote login timeout (s) 0
remote proc trans 0 1 0 0
remote query timeout (s) 0
scan for startup procs 0 1 0 0
set working set size 0 1 0 0
show advanced options 0 1 1 1
two digit year cutoff 49 2049
user connections 0
user options 0 &
第一列“Name”是SQLServer配置设置的名称,第二列“minimum”可用的最小配置,第三列“maximum”是可用的最大配置,第四列“config_value”是该项的设置值(但可能是也可能不是SQLServer目前的实际运行值,有些设置需要重启SQLServer才有效,有些需要RECONFIGURE WITH OVERRIDE选项运行后才有效),最后一列“run_value”是目前有效的设置值。如果你在最后一次重启SQLServer后没有更改任何值的话,最后两列的值将是相同的。&
不幸的是,这些配置的缺省值在运行SP_CONFIGURE没有列出来。为了方便,本文已列出它们的缺省值。(见最开始的那个表)&
怎样更改SQLServer配置设置&
SQLServer的这些配置大多数而不是全部可以在企业管理器中进行修改。但是更简单的一个途径是运行SP_CONFIGURE命令去更改这些值,象这样:&
SP_CONFIGURE ['configuration name'], [configuration setting value]
RECONFIGURE WITH OVERRIDE
configuration name指的是配置设置的名称(见上表)。注意名称必须用单引号括起来(或者是双引号,这依赖于查询分析器的配置)。configuration setting value指的是该配置的具体的数值(不用单引号)。&
一旦运行完SP_CONFIGURE命令,你必须做下面的工作,要么运行RECONFIGURE选项(用于常规设置),要么运行RECONFIGURE WITH OVERRIDE选项(用于那些如果你犯错了就会给你带来麻烦的设置),否则你的更改不会生效。与其试图记住什么时候需要用RECONFIGURE,还不如记住任何时候RECONFIGRE WITH
OVERRIDE都适用来得容易,RECONFIGRE WITH OVERRIDE适合于所以的配置。如果你用企业管理器更改了设置,RECONFIGURE WITH OVERRIDE会自动的执行,所以你不必再去执行。&
一旦你更改完毕,大多数的设置而不是全部会立即生效,有一些值在运行RECONFIGURE后也不会生效,除非重启SQLServer的服务。&
在完成本文之前,你应该知道:许多配置属于“advanced”设置。在使用SP_CONFIGURE命令更改这些值之前,你必须首先更改SQLServer配置中的一项,然后才能去更改那些配置。命令如下:
SP_CONFIGURE 'show advanced options', 1
RECONFIGURE
仅在你运行上面的代码后你才能运行SP_CONFIGURE来更改那些高级的SQLServer配置。&
现在你知道怎样更改这些SQLServer配置选项了,下面看看它们和性能的关系。&
Affinity Mask&
当SQLServer在Windows服务器下运行时,一个SQLServer线程可以在CPU之间迁移。这个特征允许SQLServer同时运行多个线程,这样服务器可以在多个CPU之间进行更好的负载均衡。每当一个线程从一个CPU移到另一个CPU,处理器缓存都要重载,大多数情况下会影响性能。&
在多于4个CPU的负荷繁重的服务器里,通过特定处理器运行特定的线程来提升性能。这会减少处理器缓存重载次数,提升了服务器的性能。例如你可以指定SQLServer只运行在一些CPU上,而不是所有可用的CPU上。&
&affinity mask&选项的缺省值是0,这意味着SQLServer允许Windows调度算法设置线程的亲和力。换句话说,是操作系统而不是SQLServer决定哪个线程运行在哪个CPU上,什么时候将线程从一个CPU迁移到另一个CPU。在一个有4个或更少CPU的服务器上,缺省值时最好的设置。对于多于4个CPU的不是过度繁忙的服务器来说,对于最优性能来说缺省值也是最好的设置。&
但是对于多于4个CPU有繁重负荷的服务器来说,由于一个或者更多的非SQLServer程序和SQLServer同时运行,你需要考虑将&affinity mask&选项的缺省值更改为一个更加合适的值。请注意如果服务器上只有SQLServer一个程序运行,使用&affinity mask&限制CPU的使用会伤害性能而不是提升性能。&
例如,假定服务器运行了SQLServer,多个COM+对象和IIS,服务器有8个CPU并且是很忙的。通过将SQLServer运行的CPU数量从8个减少到4个,SQLServer线程现在仅仅运行在4个CPU上,而不是8个CPU上。这将减少SQLServer线程在CPU间迁移的次数,减少处理器缓存重载的频率,减少CPU使用率,从而潜在的提升一些性能。剩余的4个CPU将用来运行操作系统和其他非SQLServer程序,减少线程迁移,提升性能。&
例如,一个8CPU的系统,使用SP_CONFIGURE命令设置SQLServer可以运行的CPU的值如下:&
十进制值 允许SQLServer线程运行的处理器&
7 0, 1和2&
15 0, 1, 2和3&
31 0, 1, 2, 3和4&
63 0, 1, 2, 3, 4和5&
127 0, 1, 2, 3, 4, 5和6
配置一个合适的affinity mask值是不容易的,你应该参考帮助文档以获得更多的信息。在你更改该选项的值后测试看看设置的值对性能是好还是坏。除了试错的方法,没有更好的方法为你的服务器设置一个合适的affinity mask值。&
作为监控的一部分,如果你发现affinity mask使用的不是缺省值,请找出原因。如果没有好的答案,将该值修改为缺省值。&
如果实在Win的任何版本下运行SQLServer2000的标准版,或者是在WinServer版下运行SQLServer2000的企业版,或者你服务器的内存少于4G,&awe enabled&选项将缺省为0,意思是AWE内存不被使用。&
AWE(地址窗口扩展)API允许在Win Advandced Server下,或在Win2000或Win2003 DataCenter Server下运行的程序访问超过4G的内存。SQLServer2000企业版(不是标准版)是AWE可用的,这样能利用服务器超过4G的内存。如果操作系统是Win Advandced
Server,SQLServer2000企业版能使用高达8G的内存。如果操作系统是Win2000或Win2003 DataCenter Server,SQLServer企业版能使用高达64G的内存。&
缺省地,在Windows 2000 and 2003 (Advanced and Datacenter)下运行SQLServer2000企业版,如果物理内存超过4G,SQLServer也不能访问超过4G的内存。为了使操作系统和SQLServer2000企业版利用更多的内存,需要完成2个步骤。 正确的配置AWE内存支持依赖于你服务器有多少内存。本质上配置Win2000或Win2003(Advanced或DataCenter)必须在boot.ini文件的启动行添加下面的语句以打开AWE开关,然后重启服务器:
? 4GB RAM: /3GB (AWE支持不被使用)&
? 8GB RAM: /3GB /PAE&
? 16GB RAM: /3GB /PAE&
? 16GB + RAM: /PAE
/3GB开关用来告诉系统允许SQLServer从Win本身支持的4GB的内存中使用3GB。如果你不指定这个选项,SQLServer将仅仅值使用服务器第一个4GB内存中的2GB,这样就浪费了1GB的内存。&
AWE内存技术仅仅用于超过4GB的内存,这就是为什么/3GB开关在你的服务器上被用来使用尽可能多的内存。如果你的服务器有16GB或者小于16GB的内存,那么使用/3GB开关是重要的。但是如果你的服务器有大于16GB的内存,那么你不必使用/3GB开关。原因是因为为了使用所有额外的AWE内存,1GB的额外内存需要服务器通过/3GB开关来提供。换句话说,如果你的服务器有大于16GB的内存的话,操作系统自身需要2GB的内存来管理AWE内存,如果你的服务器有16GB或者小于16GB的内存,那么操作系统置需要1GB的内存,允许SQLServer去使用另外1GB的内存。&
一旦完成该步骤,接下来就是设置&awe enabled&的值为1,然后重启SQLServer服务。只有这样SQLServerf才能使用服务器里额外的内存。&
使用&awe enabled&选项需要小心一点,就是在打开该选项后,SQLServer不再动态管理内存了。相反,它会使用所有可用的内存(除留给操作系统的128M的内存外)。如果你要禁止SQLServer使用所有的内存,你必须设置&max server memory&选项(将在后面做详细描述)来限制SQLServer使用内存。&
作为监控过程的一部分,你要检查这个设置的值是多少,是否与服务器的硬件和软件匹配。如果不匹配,相应地修改这个值。&
Cost Threshold for Parallelism&
使用并行去执行SQLServer查询有一定的成本。这是因为并行比串行占用了额外的开销。但是如果并行的好处高于成本开销的话,那么使用并行还是值得的。&
首要原则是,如果串行执行很快,就没有必要考虑用并行来完成,评估可能的并行所必须的额外时间也许会比串行长得多。&
缺省地,如果查询优化器发现一个查询少于5秒就能执行完成,那么SQLServer不会考虑并行。可以使用SQLServer选项&cost threshold for parallelism&来更改5秒这个数字。该值可以在0到32767之间任意配置。所以如果你设置该值为10,这就意味着如果一个查询执行完成少于10秒的话,查询优化器不会考虑对该查询进行并行处理。&
大多数情况下,你不用改变该值。但如果你发现你的SQLServer并行的运行了很多查询而CPU仍然很高的话,那么增加该值到一个大于5的值(你需要根据你的情形通过多次试错的方法来寻找一个理想的值),这样会减少使用并行的查询 的数量,也减少了CPU的使用率,这有助于提升你服务器的性能。&
另一个考虑的选项是将5减少到一个更小的值,,尽管大多数情况下可能会影响性能而不是提升性能。一个更小的值在SQLServer的数据仓库运行很多复杂查询下可能是有用的,因为一个更小的值会使查询优化器使用更多的并行。&
在你的服务器上使用一个修改的值前,你需要彻底地测试该值。&
如果SQLServer仅用一个CPU(要么是因为服务器上只有一个CPU,要么因为&affinity mask&设定的值),并行是不会被考虑的。&
如果你发现&cost threshold for parallelism&选项被使用,找出原因。如果你找不到答案,将其改回缺省值。&
Cursor Threshold&
如果你的SQLServer不使用游标或者很少使用,那么从不要更改该选项的的缺省值-1。
&cursor threshold&选项的值-1告诉SQLServer同步的执行所以的游标,如果游标的结果集不是很大,那么它是一个理想值。如果你的SQLServer有许多游标或者所以游标的结果集都很大,那么同步执行游标不是最有效的方法。&
&cursor threshold&选项对于运行大的游标来说除缺省值外还有2个值可设置。一个值是0,它表示所有的游标都异步的执行,如果SQLServer有许多游标或者所以游标的结果集都很大,这会提高效率。&
如果SQLServer有些游标的结果集小而另一些大,那么我们该怎么办呢?这种情况下,我们可以根据这些结果集的大小值来为SQLServer决定一个大小值。例如,考虑把结果集小于1000行的任何游标作为小结果集的游标,而大于1000行的作为大结果集的游标,这样,我们可以设置&cursor threshold&选项的值为1000。&
当&cursor threshold&选项的值被设为1000,这意味着查询优化器对于那些结果集小于1000行的游标采用同步处理的方式。而结果集大于1000行的将采用异步方式处理。&
大多数情况下,这个选项提供了最好的方式。唯一的问题就是需要决定&cursor threshold&值的大小,这需要进行测试。但是正如你所料,缺省值通常是最好的,如果你确定你的应用程序使用非常大的游标并且进行了测试以确定更改,那么更改该选项的值有助于性能的提升而不是影响性能。&
作为监控的一部分,你也需要知道游标执行的频率,结果集的大小。这样就可以为你的服务器配置一个最好的值。当然你尽量在服务器上不要使用游标,这样就可以保留缺省值而不必担心游标了。&
Fill Factor (%)&
这个选项允许你创建索引时更改索引的缺省填充因子。缺省地,该值通常为0。0有点使人迷惑,因为它意味着叶索引页100%(不是0%)的被填充,但是中间索引页(非叶子页)有一些空间而不是被100%的填满。该选项的取值范围为0到100之间。&
当创建索引时没有指定填充因子的值时系统会使用缺省的填充因子。如果指定了一个值,创建索引时会使用该值而不是缺省值。 大多数情况下,最好不要修改缺省值。如果你需要一个不同的值,在创建索引时指定即可。
作为监控的一部分,注意该值是不是不同于缺省值0。如果是,找出原因。如果你不能找到为什么要修改缺省值或者没有更好的原因,将其改回缺省值。 如果该值已经被更改,请记住任何索引在创建时都会使用这个更改后的缺省值。这样,你需要重新确定这些索引是否适合这个填充因子的值。
Index Create Memory (KB)&
index create memory选项用来控制索引创建排序时所需的内存数量。默认值是0,这意味着SQLServer动态确定该内存数量。在几乎所有的情况下,SQLServer会确定内存的最佳值。&
但在某些情况下,特别是对于非常大的表,可能导致SQLServer错误,因为大索引创建会很慢或根本不创建。如果你遇到这种情况,你需要设置一个Index Create Memory选项的值,尽管你不得不试错直到找到最佳值为止。该选项的合法范围在704到之间,它是SQLServer在创建索引时能提供的值,单位是KB。&
记住如果你确实要改变该选项,这个内存值只分配给索引创建而对其他的操作不起作用。如果你的服务器有更多的内存,那么这不是问题。但如果你的服务器没有太多的内存,更改该选项的值可能对SQLServer的其他产生一些消极影响。你可以考虑仅在创建或重建大索引时更改该选项,其他时间改回缺省值。&
和其他的选项一样,如果你监控发现该选项不同于缺省值,找出原因,如果找不到原因或者没有更好的原因,将其改回缺省值。&
Lightweight Pooling&
缺省地,SQLServer7.0和2000是以“线程模式”运行的。这就是说SQLServer使用UMS(用户模式调度)线程运行用户程序。SQLServer将为每个程序创建一个UMS线程,每一个线程在SQLServer忙时轮流处理许多用户程序。为了达到最佳效率,UMS试图平衡每个线程的用户程序数量,试图在服务器的所有CPU之间有效的均衡所有的用户程序。&
SQLServer也有一个优化模式叫纤程模式。这种情况下,SQLServer对每一个处理器使用一个线程(象线程模式一样),但不同的是每个线程里运行多个纤程,当正在运行的一个线程对于服务器上其他运行的SQLServer线程没有优先级别的时候使用纤程。想想在某些环境下,纤程作为轻量级线程,对它的管理比标准的UMS线程用更少的开销。使用SQLServer的配置选项&lightweight
pooling&来开启和关闭纤程模式,缺省是0,即纤程模式是关闭的。&
所有这些意味着什么呢?象所有的事情一样,在一种模式下或者另一种模式下运行总是有其赞成者和反对者。一般说来,当下列所有条件成立时,纤程模式才是有利的:&
? 服务器上有2个或更多的CPU(CPU越多,效果越大)&
? 所有的CPU大多数时间都运行在接近最大值也就是90-100%之间&
? 服务器上有许多context switching事件(性能监视器为系统对象:Context Switches/sec)。一般说来,每秒超过5000个context switches 事件就被认为过高了。&
? 服务器正在产生使用很少或者根本没用的分布式查询或者扩展存储过程。
如果以上都满足,那么将&lightweight pooling&选项打开,也许会看到5%或更大的性能改善。&
但是如果不满足任一条件,将&lightweight pooling&选项打开实际上可能降低性能。例如,如果你的服务器大量使用了分布式查询或者扩展存储过程,那么打开该选项会明确地引发问题,因为他们不能使用到纤程,即SQLServer不得不来回在纤程模式和所需的线程模式之间切换,从而影响性能。&
和其他设置一样,如果你发现该设置不是缺省值,试图去找到原因。另外,检查上面四个条件是否存在,如果是,打开该选项,否则使用缺省值0。&
每当SQLServer锁定一条记录时,锁会存储在内存中。缺省地,&locks&选项的值是0,即锁内存是动态管理的。SQLServer内部可以为锁保留2%到40%的可用内存。另外,如果SQLServer确定为锁分配额外的内存会引起操作系统级的页面调整,那将不会分配内存给锁,相反为了禁止页面调整会分配给操作系统。&
大部分情况下,允许SQLServer动态管理锁,保留其缺省值。如果你配置锁内存(合法值在3647 KB之间),那么SQLServer不能动态管理这部分内存,这可能引起SQLServer的其他区域的性能降低。&
如果得到一个错误消息:超过最大的可用锁数量,那么你可以有以下办法:&
? 检查查询看是否使用了过多的锁。如果是,性能可能会因为应用程序并发而受到影响。比改善坏查询更好的方法是为跟踪到的锁分配更多的内存。&
? 减少服务器上的应用程序数量&
? 为服务器添加更多的内存&
? 对锁数量设置一个较高的值(基于试错)。这是一个最少令人满意的选项,和给锁分配内存以阻止SQLServer为了其他目的而占用内存一样。
最大努力地不要使用这个选项。如果你发现这个选项设置的不是缺省值,找出原因,如果你找不到原因或者原因太少,就改回缺省值。&
Max Degree of Parallelism&
该选项允许你将并行打开、关闭、或者为某些CPU打开,但不是为全部的CPU打开。并行指的是查询优化器使用多于1个CPU去执行查询的能力。缺省地,并行是打开的并且尽可能多的使用服务器的CPU(除非被affinity mask选项限制)。如果你的服务器只有1个CPU,该选项会被忽略。&
这个选项的缺省值是0,这意味着并行是为所以可用CPU打开的。如果你改变该值为1,并行对所有CPU就关闭了。这个选项允许你设置并行能使用多少个CPU。例如,如果你的服务器有8个CPU,而你只想让并行运行在其中的4个CPU上,那么将该值设置为4。尽管这个选项是可用的,而想使用它来真正提高性能却是不确定的。&
如果并行是打开的,正如多CPU的服务器缺省那样,那么查询优化器将评估每个查询使用并行的可能性,会带来一些开销。在许多OLTP服务器上,查询本身通常不会采用并行去运行。这包括标准的SELECT、INSERT、UPDATE、DELETE语句。因此,查询优化器在评估每一个查询是否值得用并行只是在浪费时间。如果你了解到你的查询可能从来不需要并行,你可以通过关闭该选项来获得性能的一点提升,因为不会为查询评估并行。&
当然,如果查询本身能利用并行,你不需要关闭并行选项。例如,如果OLTP服务器上运行了许多相关联的子查询,或其他复杂的查询,那么你可能需要将并行开着。你需要测试这个选项看是否有所帮助。&
大多数情况下,因为许多服务器既运行OLTP又运行OLAP查询,并行应该保存打开。作为你性能监控的一部分,如果你发现并行关闭或受限,找出原因。另外,确认服务器是不是基于OLTP的。如果是,关掉并行也许更合适,尽管你需要通过测试看关闭是否有助于性能的提升。但如果服务器既运行OLTP,又运行OLAP,或者大部分OLAP查询,那么为了全面提升性能最好将并行打开。&
Max Server Memory (MB) & Min Server Memory (MB)&
为了最佳的SQLServer性能,你需要确定你的服务器仅仅运行了SQLServer,而没用其他的应用程序。大多数情况下,&maximum server memory& 和 &minimum server memory& 选项设置为缺省值即可。这是因为缺省值为了最佳性能允许SQLServer动态分配内存。如果你修改了最大或最小内存设置,可能你会冒影响性能的风险。&
另一方面,如果SQLServer不能运行在它自己的物理服务器上(其他程序和SQLServer运行在同一台物理服务器上),你需要考虑更改最小或最大内存值,尽管这通常是不需的。&
让我们仔细研究一下这两个选项。&
&maximum server memory&选项,当设置为缺省&#3647(单位MB),意味着SQLServer动态管理内存,即SQLServer将尽可能使用可用内存(除留给操作系统一些必要的内存外)。&
如果你想要SQLServer不使用服务器上所有的可用内存,你能手动设置最大内存。SQLServer能使用的指定的内存在4(你能输入的最小值)到你服务器上最大的物理内存(但不要分配服务器上所有的内存,因为操作系统也需要)。&
仅当SQLServer必须和同一台服务器上的其他应用程序共享内存,或者你想人工保持SQLServer使用可用的内存,你才需要去改变缺省值。例如,如果你其他的应用程序比SQLServer性能重要,那么你可以限制SQLServer的性能。&
如果你试图手动设置&maximum server memory& 选项的值,你可能会遇到两种潜在的性能瓶颈问题。第一,如果你分配了太多的内存给SQLServer,而对于其他的应用程序和操作系统没有足够的内存,那么操作系统别无选择地要做很多的页面调整,这将降低服务器的性能。而且,如果你使用了全文索引服务,你必须为它留出足够的内存。它的内存不是动态的分配,象剩余的SQLServer内存一样,要运行它必须有足够的适当的内存。&
&min server memory&选项的缺省值0(单位MB),意味着SQLServer动态管理内存,即SQLServer将按照需要分配内存,最小值将随着SQLServer的需要而变化。&
如果更改&min server memory&选项的值而不设置为缺省值0,这并不意味着SQLServer自动开始使用这个最小的内存设置,许多人是那样认为的,但是一旦由于需要超过了设置的最小的内存,那么将永远不再小于这个最小值。&
例如,如果你设置了最小值为100MB,然后重启SQLServer,SQLServer不会立即使用100MB这个最小的内存。相反,SQLServer仅仅使用需要的内存。如果你从不需要100MB,那么将从不会使用100MB。但是如果SQLServer使用超过了100MB,而以后不再需要100MB,那么这100MB将成为SQLServer分配的最低内存。因此,没有理由将&min
server memory&选项的值不设置为缺省值而改为其他值。&
如果服务器上只有SQLServer,根本没有理由去使用&min server memory&选项。如果还运行了其他程序,改变该值可能会获得一些微小的好处,但决定设置为何值是很困难的,并且这个性能的提升基本上可以忽略。&
如果你发现这些选项的值不是缺省值,找出原因。如果找不到原因,或者原因站不住脚,将它改回缺省值。&
Max Text Repl Size&
&max text repl size&选项可以设定在执行单个INSERT、UPDATE、WRITEEXT或者UPDATEEXT命令时可以增添到复制字段的 text 和 image 数据的大小(单位为字节)。如果你没用到复制或者复制没有用到text、image字段,那么该选项不用修改。&
缺省值是65536,最小值是0,最大值是(单位为字节)。如果对text、image数据有很多的复制,仅当数据超过64K,你应该考虑增加该值。但与这些设置的最大值一样,你将不得不用各种值去实验看哪个值在你的特殊环境下效果最好。&
作为监控的一部分,如果你不使用复制, 正确的值只有缺省值。如果缺省值被更改,你需要调查text、image数据是否被复制。如果没有,或者如果小于64KB,那么改回缺省值。&
Max Worker Threads&
SQLServer的配置选项&max worker threads&被用来决

我要回帖

更多关于 神优化单机游戏 的文章

 

随机推荐