SAPR3性能优化指南.docx
MSSQ1.Server7.0的SAPR/3性能优化指南1998年I1.月发行读者本文档所提供的信息可以帮助SAPR/3数据库管理员理解Microsoft-SQ1.Server7.0的各个方面.这些方面可以健过优化,从而在与SAPR/3环境相关的带有他据卑工作负荷条件下提供最正确性能。虽然本文档是为SAPR/3站点量电定制的,但是一定要注您本文档中播逑的SQ1.Server功能和优化技巧不仅仅适用于SAPR/3。大型到郑大型数据卑(V1.DB)需要支持大量用户连接和大的工作负荷,工作于这一环境中的数据库管理员将从本文的信息中获装匪浅,引言本St有关性能优化的文档传讨论SAPR/3环境中的SQ1.Server7.0最正确配置.本指南分为四个逻辑局部,第一局«.讨论与MicrosoftMndovsNTServer相关的配置选项.第二局部.描逑SAPR/3环境中SQtServer的康耍配置选项.前面这两小局却直钱了当.其中还包含了在SQ1.Server的初始英置过程中几分件就可以完成的一些步彝.第三舄都,讨论SQ1.Server的索引设计,因为它与SAPR/3相关。索引分析往往是一个极其较手的过矍.为使懿据席性能最正确*要持续不断地执行案可分析。MicrosoftTechNet中的-MicrosoftSQ1.Server7.0性能优化指南"应该作为本文笊三局部的扑克读卷.该指国库合讨论硬件I/O性能.索引设计以及SQ1.Server性能优化工具.笫四阳部,讨论R/3敛据库中的SQ1.Server文件和文件组的最正确应用.WindowsNT配置WindoWSNT页面文件的大小应该至少比效劳养上安袋的RAM大三倍,而且要至少有10亿字节(IGB),设置页面文件大小1 .在开笫菜单上.指向设置.然后单击装制画杈.2 .双击系优,嫉后双击性能逸项卡.3 .单击要我,然后在大小.握中,输入页百文件的大小(按无字节OB)i+>.4 .单甘,4Jr通常,VMM(盅损内存管理界)巳好根据SQ1.Server安家的取认设Uit行了适当的纪置,检查和/或配置VMM设置1 .在开妁菜单上,指向来J1.然后单W控制面板2 .双击同络.练后单击效劳总项卡.3 .双社JtjH1.透择最大化IHi1.ft用程序吞吐量,然后©击更.配置最小影响的屏幕保护程序和墙纸1 .在开妁菜单上,指向设嬷后单击桂川田板.2 .双击显示,然后单击Ir景4项卡.3 .选定图案为(无),并选定治纸为无).4 .单m.应用.然后单击JMr保护盘序&项卡.5 .在屏*保护程序:,殳定B1.ankScreen.然后选定If巧保第6 .第3应用一些多处理器效劳器可以将承网I/O请求动态分发到最不繁忙的处理器,该硬件功能右助于防止在效劳于许多联网请求的系统中出现处理需瓶颈和不良网焙性能.该功能通常梆为对明:中断分发,使用该幼能可以改良可扩展性能并防止出现在其它处理器还有剩余容量时某一个处理器却成为瓶颈的情况。它荏Pentium处理器系列的WindowsNT-1.OHA1.(硬件拄身层)中可以找到。>in(Jos2000也支持该功能.不同处整器掾作平台使用不同方法分发中断.网卡的中断分发是由写个殳理落掇作平台的HA1.来控制的.HA1.实施的中断方案取决于处理器的性能。某些处理器包含了中断控制硬件.如高级可编程中断搜刎器(APIC).APIC允许於理霹得中断路由到计算机上的其它处理制.有关特定处理器操作平台所使用的分发方法的详切信息,请咨询操作平台供蛉南.在默认情况下,WindowsNT4.0不使用对梯中断分发,而是杵与网卡(NIC)相关的矣迟进程调用(DPC)活动分配管系统中馈号最大的处理器,在安装有多个NIC且NIC活动的系统中,每个款外的NIC的活动都指充到下一个潴号景大的处理器,如果处理器频繁以百分之百的容量(性能值视器所显示的Processor:«ProcessorTime=100%>操作而且一半以上时间昭于为DPC投供效劳上(即如果Processor:%11PCTime>50%),那么可以通过调整ProcessorAff1.nitjiiask来提薪性能.<注册袤编辑券使用彳:当会导致严聋的问题.看可能等要重新安装操作系统.便用建J泉餐要带JN小心“MierOSOft不保证能替睇决因注身来编辑卷使用不当而导致的何题.然议您在执行修改前备份注册表内容,这样在注野表修改出现问题时就能多复原内容。有关备份和复原注明表信息的说明可以在注用表G辑器的联机帮助中找到.在能够进行对称中断分发的多处理后效劳赛上,ftVindovsNT注柢表中PnceeaarAff1.nityi1.Bak数值项的值设置U,这样就会将网络1/0请求动态分发到最有空力处理请求的处理看中.ProcessorAffinitjIfask位于:HKEYAOCAkMACHINE'SystemXCurrentControSetrvicesNDISVParameiers.启动注册表编辑爆以设置ProcessorAffinityMask1 .在开始菜单上.平击运行.2 .俄入Fegedt32在注册表编辑劈中找到适当关键字1 .在窗口买单中选择HKEY-1.OCAkMAaiINE42 .在注册表娱经器左边格中,双击SYSTEM.3 .双击CurrentContro1.Set.双击Services,双击NDISft;后双击Parameters,将ProcessorAffinityMask设置为零1 .在注册表埃辑器右边畲格中,双击PMCMMrAffinityiiiak2 .她入0(零),然后单击定。3 .在注。衰菜单上,单击退出SQ1.Server配置SQ1.Server内存的推荐设置取决于R/3实例对敷絮库效劳器的使用情况.如果SQ1.Server是作为专用数据苣效劳器而运行,健议SQ1.Server按照/认值动态调整它所需妾的内存.R/3实例最小值最大值专用数据库效劳器默认值欢认值更新实例已安.装RAH的!0已安装KAM的65%中心实例已安装RAM的45%已安装RAM的45%在有2GBRAM的中心实例上设置内存的例子(EnterPriSeManager)1 .fcSft三.双击Sa1.ServerGroup图标.2 .双击R/3数据洋牧劳排的SQ1.Server图标.3 .单击Meeory选项卡.林后单击Useafixedaeoorysize(MB)。4,将UseafixedBeaorysizeOffi)下的滑块移动到9005 .选定Reservephysica1.BeaOryforSQ1.Server,iAn)Iy,然后©击.OK.完成SQ1.Server的内存正,之后,烫议使用NtVoridIWMtiM选项保存与SQ1.Server内存设置相等的物理内存空间。设置该选项意味着WindowsNT不转换出SQ1.Server页配Jt设Jt工作集大小选项的例子(EnterPriSeManager)1 .在右边窗格中,双击SQ1.ServerGroup图标。2 .双击R/3数据库效劳器的SQ1.Server图标。3 .单击NeOOry金项卡.然后选定se1.ectReservephysica1.BeaOryforSQ1.Server.4 .单击App1.y.嫣后单击国。SAP测试显示出,在大多数R/3敏据库效劳器操作环境下网络数据包大小为8.192字节时性能最正嘀。该选项雷要使用SQ1.ServerQueryAna1.yzer来设置O设置网络数据包大小(QUeryAna1.yzer)1.磁入exec8p-configue'networkpacketsize'.81922 .跳入reconfigurevithoverride3 .按CTR1.fE执行以上会令。在专用效劳器上,建议使用SQ1.Serverprioritybst嚏项.设置优先级提升选项(EnterPriSeManager)1 .在右边由格中,双击SQ1.ServerGroup图标。2 .双击R/3数据库效劳器的SQ1.Server图标。3 .单击Processor选J页卡,然与在ProcessorCOntrO1.板中.走aBoostSQ1.ServerpriorityonVindovsm建议将SQ1.Serveiindexcreateaeoory选项配置为16MB,该选J页需要使序SQ1.SUnOr歪询分析器耒设置,设Jt索引创立内存选项(QUeryAna1.yzer)1 .博人OXeCsp-configure'indexcreateMaOry160002 .破入reconfigurewithoverride.3 .按CTR1.÷E执行以上命令禁用VBHDR、VBMOD和VBDATA表的页面锁定(QUeryAna1.yzer)1 .在支询窗口键入以下命令:execsp_indexoption'VBIIDR','a1.Ioiipage1.ocks'.'fa1.se'execsp_indexoption'VBMOO','a1.Ioepage1.ocks'.'fa1.se'execspindexoption'VBDT',"a1.Iowpage1.ocks'.'fa1.se'2 .按CTR1.+E执行以上件令,如果敷描库效劳器上的所有处理器的利用率J很离(性能长视器说明在多处理器效劳器上所有处理器的处理器利用卑全部大于95),那么就有必要开SQ1.Server1.1.(htvi4htp1.ing.在所有处理得都非常接近完全利用时,Iightveightp1.ing可以环坳恢复大约5%5(7%的CPU,!开SQ1.Server1.ightweightp1.ing(EnterpriseManager)1 .在右边窗格中,双击SQ1.ServerGroup图标。2 .双击R/3数据库效劳器的SQ1.Server图标。3 .隼击Processor迭乐卡,选定se1.ectUseVindovsNTFibers-然后单击App1.y.4 .当提示更新.启动SQ1.Server时.卑击Yes.林后单击OkSQ1.ServereffinityaMk配置选项提供了不能执行SQ1.Server线程的特定续理器的标准。最好运用SQ1.Server关系挖码的默认谀置.即零。关系捷码的设置为零说明允许在所有处理器上执行SQ1.ServerS,几乎在所有情况下.该设置都会使性能最正确.因为它防止了在箕它处理器上有利余容量的情况下而在某一台处理器上的SQ1.Server连接非常繁忙的情况.Microsoft的IT机构和参与SQ1.Server7.0Ear1.yAdopter方案的SI,R/3用户已运用了关系推码的.耿认设置,结果性能良好.索引设计与维护-MicrosoftSQJ.Server7.0性能优化指南”根供了右关SQ1.Server余弓:和性能优化的更要信息.比文档可在“查找详细信息处找到。大型的SAPR/3安装会有一些包含非才多行的SQ1.rver表。有了大的表,需引时数据球I/O性能影畸极大。在单个数据库行或少量新据库行上侵索并执行操作,应该有一个基于提供最高级别选择性的一列或几列所定义的#聚集或聚集索引。这样,SQ1.Server查询处理器和存储引擎就能够将检索行所需的I/O控制到最小化。例如,如果必须走翔从车常大的(Mm表中根据orderid来检索单个定单记录.那么基于OHeHd列定义索引可以揄快左询的速度就是有意义的.在多数数据库行上授索和执行的操作应该基于定义花国扫描的列定义聚集索引.从零常大的七月份(Mm袤中检索所存友隼的宣询就是范IS扫描的一个例子.在这种情况下,Orders长的日即列就是聚集索引的景正瑜列,即杵发行的3APR/34.5B版本将带有一个影响SQ1.Server素巢索引选择灵活性的重要功能.在4.5B版中.R/3数据字典对除主徒列以外的列聚集索引有祓动支持.被动支持的意思是:在数据库表已改变以致于聚染索引从主俄移至了另一列或列集的情况下.SAPR/3数据字典会识别并记录SQ1.SerYer聚集索引的位置.创立聚集索引IF要使用与R/3工具对应的SQ1.Server工具。但是.JK集索引的位置在创立之后不会在数据库於换和R/3版本升级过程中丧失。4.5B以后的SAPR/3版本中有可能包含SQ1.Server聚臬索引的枳段支持。积极支持的意思是:除前面所讲到的R/3Da1.aDiCtionury供的支势外,R/3工具还将支持在SQ1.Server表上的列(除主钺列以外的聚集索引创立.聚集索引支持中的这些更改与希空改艮其RA报告登询性能的R/3数据库管理员的想法有很大出入。运行ShPR/3的大型公司的月末和季度报告可能会使用数据库效劳器上的苑图扫描.通常情瓦下会是这样一种慵况:在大表上所执行的范围扫描择不以与定义我的主规相同的列为其础.目前,SAPR/3SQ1.Server数屈阵关延将所有表上的主键配置为聚集主键,某些情况对测试非主版组成局部且常常为了报目的而用于大盘表的列的聚集索交的使用率常有利.A1.TERTAB1.E命令用于将聚集主键更改为非聚集主博.以下索引分析例如讨论了这样一种情况,即将聚集主虢更改为非聚集主键以便聚集索引可以基于另一列进行定义并情排将聚集主便更改为非聚集主父所涉及的步最,这一点是有意义的。有关聚臬和丰聚集索引选择的详钿信息,应参阅“MicrosofiSQ1.Server7.0性能优化指南”SAPR/3STCM车务处理中提供MSSTATS工具,可以帮助R/3致据库管理员跟踪数据阵效劳奉上所执行的SQ1.SerYer存储过程的资源占用.所有R/3与数据席效劳器的正常交互作用都使用存储过程执行。MSSTATS提供有助于根据侪说使用区分存储过程的信息,MSSTATS这回的信息的例子包若:存姑过程的调用次数.用于调用存转过程的平均和景长时向.存储过程调用所返回的行平均数和总行弱、存储过程是否使用了希坏、存镭过程用于提取的时向与空闭时同等等。MSSTATS提供了用于瑞定在R/3致据库效劳养上所运行的费用最高的存储过程的史要工具.性能分析应集中于这些费用最高的登询.使用以下Sq1.SerVer表例如可以模仿与许多SAPR/3表芈常类假的数据模式.两个例如登询将使用该此测试表进行分析。其目的是说期如何在R/3数据库效劳考环境中很好地用用SQ1.Server索引.例如数据以下的本创立名为Saptest1.的表并在其中参加100.000个记录.第一个名为oo1.1.的列没有选择性.每一行的CO1.1.数值是一样的(,000')1线是为了模拟SAPR/3中非常常见的MANDT列,通常它不大具有选择性。第二个名为812的列设计为带有一些选算性,因为每B100行就扬入了一个'a'ftffi.SQ1.Servermodu1.o(,%,)操作符用于检测每第100行的插入.最后一个名为CO1.S的列的选择性极高.每一行都有唯一的CO1.S数值.创立例如数据(QUeryAna1.yzer)1 .在查询窗口键入以下命令:createtab1.esaptest1(co1.1.char(4)notnu1.1.defau1.t'000',co1.2char(4)notnu1.1.defau1.t,xzzz,.co1.3intnotnu1.1.,fi1.1.erchar(300)defau1.t*abc,)dec1.arecounterintsetnocountonsetcounter=1whi1.e(Ocounter<三100000)beginif(Counter%1000三0)PRINT,1.oaded'+CONVERT(VRCHAR(10).Counter)4,of!000record,if(Scounter%100=0)begininsertsaptest1(co!2.co1.3)va1.ues(,a,.©counter)ende1.seinsertSaPteS1.1.(co!3)va1.ues(counter)setecounter=©counter-1end2 .按CTR1.÷E执行命令。例如索引SQ1.Server主键的SAPR/3欢伏配置是秤主袋谀置为必集主钝.这在大多数情况下都提供了极好的性能.但是,可能有一些强史的表,将聚集索岁放在除包含表的主发列以外的某一列上会对这些表很有用.为Saptest1.定义的聚集主键列在R/3数据库环境下是氢典5!的,因为它将完法的昨选择性列co1.1.(模拟典§!R/3环境的VANDT)敖在索引的开始处。#聚集索引nkey2模仿奥里的R/3索引就在于它是多列索引.创立例如索引(QUeryAna1.yzer)1 .在查询窗口键入以下命令:a1.tertab1.eSapteStJaddconstraintsapt.c1.PRIMARYKEVc1.ustered(co1.1.co1.2.co1.3)createindexnkey2onsaptest1(co!2.co1.3)2 .按SR1.÷E执行命令.例如查询se1.ect*fronsap1.est1.whereco!3=5000左询1根据与名为co1.3的列的匹配值从刑欷表中提取一:se1.ect*fronSap1.eStJwhereco1.2='a'亚询2是一个范8扫描,它根据与名为co1.2的列的匹更值从表中提取1.000行,在SQ1.ServerQueryAna1.yzer中报告查询1/0统计SQ1.ServerQueryAna1.yzer能够从笄个在QueryVindov执行的查询中提供布用价位的1/0统计.这在SQ1.Server文档中一般称为Statistics10,要启用该功能.可以执行一个T-SQ1.命令.或设置SieryAna1.yzcr菜单项i择项。通过T-SQ1.命令使用SETSTATISTICS10选项(QUeryAna1.yzer)1 .在支沟窗口键入以下命令:Setstatisticsioon2 .按CrR1.÷E执行命令。通过菜单项选择项使用SETSTATISTICS10选项(QUeryAna1.yzer)1 .在QueryAna1.yzer袋隼上,戊击Query.然后隼击CurrentConnectionOptions2 .5?ShovState1/0斜后隼击App1.y3 .单击OK第一组索引的结果单行提取数据:se1.ectfromsaptest1whereco1.3=5000基于文本的ShoWPIan输出::-Booknark1.ookup(BKM1.RK:(Bnk1.OOO).OBJECT:(ubs.dbo.saptest1.1.)IIndexScan(OBJIC:(pubs,dbo.saptest1.nkey2).WIERI-:(saptest1.co1.3=5000)等费图形显示方案喻出.Sta1.s1/0的杳询结果集和数据库1/0(QueryAna1.yzer):co1.1.co1.2coi3fi1.1.er000a5000«bc(1row(三)affected)Tab1.e'saptest.Scancount1.1.ogica1.reads240.physica1.reads0.read-aheadreads0.ShgP1.an输出显示查询续理界需要执行#聚臬东引nkey2的索引扫描.索引扫描是指:SQ1.SerVer需读取nkey2的B树结构的叶线的局部或全部.以便找到拢值5000.上操作要求SQ1.Server数据高速缓存中的210个1/0.也就是说能从SQ1.Server高速缓冲存储器勺液琰240个8KB的页面。构理读琰和狄柒读取所显示的零说明卷为此瓷沟&索数器,没有必要从碳叁中迸行读取.备注1/0统计是专用于运行的。固交词在某次运行中,所有读取邨会从高速墩冲存储器中出,并作为史辑读取而计敛,而在其它运行中,完全一样的查询有可能皆要使用惯读读取和/或物理法取以满足交询的1/0耍求.1/0统计的这种变化可能由许多因素造成的,最常见的就是其它连播可能正在执行查询并将数格放入高建姚冲存储器(它取代了被住视.查询正在使用的数据页).当分析查询时,在翻开1/0统计的情及下数次运行查询并比较其结果是很有W助的。标为Cort的Graphica1.Shoup1.an中标明的百分数表示在每个it询的特定局部上所花费的时间所占执行查询花费的息时网的百分数。范围扫描:se1.ectfromsaptest1.whereco1.2=,a'基于文本的ShoWP1.an埔出:1-C1.usteredIndexScan(OBJEC:(pubs.dbo.saptest11.saptc1.),WIHRE:(saptest1.co1.2=*)等费图形显示方案均巳:统计1/0的杳询结果集和敢搭库1/0(QueryAna1.yzer):co1.1.co1.2co1.3fi1.1.er000a100abcOOOa200abcOOOa99800abcOOOa99900ab<OOOa100OOOabc(1000row-(三)affected)Tab1.e'saptest.Scancount1,1.ogica1.reads4500,physica1.reads1.read-aheadreads4010.Showp1.an输出说明登询处理总帝要执行聚集索与ISaPjC1.的索弓I扫描。卡可扫描的惠.思是:SQ1.Server能要读取SaP1.CIB树结构眼表的实际行)的叶级的的局部或全部以便找到键值'a'.此操作密室从高速坡冲存储器中选取4.500个SK的页.忸读读取的数字4.010说明SQ1.Server便用Read-AheadManager在64KBIf1.块中注取了1.010个8KB页面.慎读读取比物理读取效率更有物理读取的数字1说明SQ1.Server/要从礁盘中读取一个8KBIii1.S作为单一8KB页面.由于情读读取和物理读取都是物理磁盘读取.因此它们比高速裳冲存储器的读取的逻辑读取速度使祖多。这就是为什么修的首要性能优化的目的立谖是农创物理读盘读1R.井尽量满足高速线冲存储器的所有我据库页读取.索引更改建议农引设计的目的是杵I/O藏乳景少以实现性能最优.在前百所示的几个例子中,上现了农引扫盗.与喉弓扫描相比.执行索引搜傕的效率更高,要想作史这一点,杵注意力集中于杳询的XHERE子句是算更案的.在单行提取情况下,CO13就是正在搜索的列.由于0013有极佳的可迭择性,E)此它是至聚臬索引的适官候选顼.对I/O性能景好的做法量是在CO1.S上定义本聚集.便C013成为唯一列或索引中的第一列。在范00扫描的情况下,0012就是正在搜索的列.C12的选择性还可以(100.000行中节有a'数值的有1.000行).因为需要所有带'a,的行,所以0012是聚集索引的适宜候选项。A1.TERTABIJ-话旬用于将聚集主键更改为推聚集主诜.M在任何情况下都不要更改与表的主键关联的列.如果更改可以保证性能优势,可以将聚集主徒更羡为非聚集主键,也可以为反时作为主键一局繇的列创立新的*聚集索引,但是在任何情况下主键列必然都保持一致,记住这一点极具重要。备注SAPR/3环业中,嚏议使用SE1.1.事务灾义乖聚集.昨主键索引,以便在R/3效据字典口维护除引信息。有关使用SE1.1.事务创立京引的详蒯信息,请参见SAP联机帮助.其位于SEI1.事务菜单项B1.p->ExUimMBe1.pc单击Indexes.然后按照乘机将示执行.执行索引更改(QUeryAna1.yzer)o1.tertab1.esaptest1dropconstraintsptc1.a1.tertab1.esaptest1addconstraintSaPJC1.PRIMARYKEYNoNC1.USTERED(co1.I.co1.2.co1.3)createc1.usteredindexckey1.onsaptes1.(co1.2)createindexnkey1onsaptest1(co13)2.按CTR1.-E执行命令。第二组索引的结杲改良索引的单行取数据:se1.ectfromsaptest1.whereco1.3=5000基于文本的ShowP1.an埔出:I-BoOkIIark1.ookup(B00mRK:(Bnk1.OOO).OBJECT:(pubs,(dbo.saptest1.)M11BPREFETCH)I-IndexSeek(OBJECT:(pubs,dbo.saptest1.nkey1.),SEEK:(saptest1.co13=5000)ORDERED)等量图形显示方案通出.统计I/O的查询结果集和数堀库I/O(QUeryAna1.yzer):co1.1.co1.2co!3fi1.1.er000a5000abc(1ro*,(三)affected)Tab1.e'saptest1.'.Scancount1.1.ogica1.reads5.physica1.reads0.read-aheadreads0.Sho.p1.an现在说用SQ1.Server正在对未引nkey1.使月索引援案而不是索引扫插.索引梭索是指:SWSerVer能够快速河览nkey1.B期转构(而不是果前面例子中的扫描索引的叶纹,并使用书答查找来找到与键tt1.5000关联的我据行。这一从索引扫描到索引搜索的改变对1/0性能有较大的影响。要执行查询.仅需要SQ1.Server效据高速缓存中的5个1/0,而前一个例子中,密妥240个。改良索引的范围扫描:se1.ectfromsaptest1.whereco1.2='a,基于文本的ShoWP1.an埔出:1-C1.usteredIndexSeek(OBJECT:(pubs."dbo.saptest1.ckey1.).SEEK:(saptest1.co1.2=,a*)ORDtRED)等费图形显示方案均出统计1/0的杳询结果集和敢搭库1/0(QueryAna1.yzer):co1.1.co!2co1.3fi1.1.er000a100abcOOOa200abc000a99800abc000a99900abcOOOa100OOOabc(1000row(三)affected)Tab1.e,saptest1.*.Scancount1,1.ogica1.rends48,physica1.reads0.read-ahe<dreads0.Showp1.an再次说现SQ1.Server正在对索引ckey1.使理索引搜去而不是京用扫描。在聚臬索引搜索情况下不需要进行书卷查我.因为袋集索克B现的叶级已包含表数据,索引扫描到索引搜索的改交再次对I/O性能产生重大而又枳校影响.要提取1.000行,仅常要对S(H.Server高速馒冲存储考的48次谀取,而在第一个例子中则带要4.500个I/O,I/O的敛量巳大大减少,因此,完成该查询不理需要物理碳#I/O,因为所我要的天在SQ1.Server数据商速线与中巳经有了,物理读象和颈读读取的数字都是零,这就设明了这一点。切记:TS误读取是每个读取为&1KB的物理磁宜读取.物理读取是每个读取为8KB的甥理磁盘漆取,索引分析的观察与结论从前百的例子中可以清楚看出:索引设计对SQ1.Server交词中的I/O性能起着举足轻重的作用。范图扫描的例子特别用来说明:R/3环境中.还可能有适合于除主饯列以外的列的聚集索引的情况。特别是对于要在其上执行报告的大型表来说,这是复有可能的,例如,如果大型表根据日期列遂行妆吉,但是日期列未包含在聚集主键中,那么时于聚集索引测试日期列的使用就非常有用。在SQ1.Server7.0中,聚集东引中所包含的列和字节越多,谈待定表的推聚集多亍绝大,这是因为谟表的聚集素引和非聚臬索引都使用构成聚集索小的列。非聚集京可包含群集健并使用件集找定位rowdata。如果表上没有聚集索引.则此情况不适用。相反,在这种情况下袤是作为堆集来管建的.有关详细信息,it#JJ1.SQ1.Server联机图书。既然至聚集索引在非聚集B树结构中包含侪集徒.要注克两种影晌,第一,一定要保持较小的聚集索引规模,因为它不仅影响聚集东引的大小和性能,而且还影响该表中的所有车聚集索引的大小和性能.第二,一定耍记住非聚集求引包含群集键,因为在手亲集索引包含满足查询(林集贝除外)所需的所有列的情况下,交询处理桂可以使用维值列存助涵击查询.涉及群集使的涵差查询例如以下是一个得单的例子,它说明了在韩集拢仅包含非聚集素涵击始定查询所需的其它信息的情况下,查询处理器将井聚集索引用作涵美京引,并无须使用书要查找从表中提取数据.有关涵英查询与宗引设计的详窗信息,请舂见"MicrosoftSQ1.Server7.0性能优化指南”.建立以下表(QUeryAna1.yzer)1 .在查询窗口键入以下命令:createtab1.esaptest2(co1.1.int.co1.2char(4)defau1.t'a',fi1.1.erchar(300)defau1.t,zzzz*)dec1.are耻OUnICrintset©counter三1whi1.e(ecounter<=1(KX)begininsertSaD1.eS12(co1.1.)va1.ues(ecounter)Setconter三0counter+1endinsertsaptest2va1.ues(1001.,sap,R3*)createc1.usteredindexsapCK1.onsaptest2(co1.1)createnonc1.usteredindexsapNCK1.onsaptest2(co!2)2 .按CR1.A1.执行命令.显示并比较以下两种查询方奥(QueryAnii1.yxer)1 .在左询窗口键入以下命令:se1.ect*fromSaPICSE2whereco1.2=,sap,se1.ectco1.1.co1.2fromsaptest2whereco1.2='sap'2 .分别:择每个查询想后按CTR1.+1.显示图形显示方案。使用第二个登询不需要书卷查找.因为非聚集索引培含怦集钺.因此屈差了查询,当侪决R/3程序长期存在的问题时,要牢记一种潜在的操作方法,卬使用pjrec<wi1.e标记存储过程以便快速更端译.SPjrecwi1.e占用叶何松少而且很有用。pj3pik命令迅速行延存储过程.以便为存偌过程生成新的左询方案,它反映表的效据.索引及统计的最新情况。各注;,.";正常操作情况下没有必要运行“urocapi1.因为在对其有利的情况下,SQ1.Server会自动壬新褊译存储过程,但是在R/3环境中也有过这样的情况.印SAP和MiCrQSOf1.已发现在有长堀存在且性能不良的更新和批找理过程运行的表中运行ejwxwi1.。是很有好处的。使用prec<wi1.最简便的方法之一是将表名称作为令今参数提交.这样就会为女新境译标记所有与表名称关靴的存储过程。例如,如果CCMS显示在VBRP表上操作的更新过程的执行时间转别长,班么就行必妾在谈表上运行Spjrecoapi1.e>执行sp-recompi1.e的例如(QUeryAna1.yzer)1 .林入execSpurocoapi1.e,VBRP'.2 .按CTR1.+E执行命令。SQ1.Server7.0提供列和索引统计的自动生成与维护.统计辅助查询处理后确定最正殖查询方案.胱认情况下,为所有东引包立了统计,并且在为列统计可能行用和优化器可能需要劝其进行推测的列编译查淘时,SQ1.Server会电动创立单列统计.为防止对未使用的统计的长期维护,SQ1.Server为自动包立的统计(仅指那些不是索引创立的陶花统计)制定有效时«.在几次自动更新之后,列统计不再被更新,而是被丢弃。如果以后雷曼.可以再次创立。统计更新与成立利的开销上没寄什么大的差异.此次效时间的制定不影晌用户创立的统计。为使性能最正确,建议使用自动统计。统计的自动出立和更新是SQ1.Server7.0的班认配置,该瞪议不适用于表VBHDR.VRMOO和VBDATAo封于这些表.迂议关闭自动统计。从本质上济,VBH1.)R、VBNOI)和VBDATA的大小极不稳定.也就是说它们可能疑繁地从空变成非常大,然后又变回空.R/3仅透过主破访问这些表.这丝表的箕它统计不会有什么用,因为使用主跄的同一查询方案也用于冷个访问.基于上述这些原因,在这些表中关闭自动统计功能是有利的.以下令集将防止以后在VBIIDR.VBMOD和VBDATA表上的笠计生成.要关闭VBHDR.VBMOD和VBDATA的自动统计(QUeryAna1.yzer)i.在查询窗口键入以下命令:execsp_autostatsVBHDR.'OFF'execsp_autostatsVBMOD,'OFF'execsp_autos1.utsVBDATA,'OFF'2,按CTR1.-E执行命令。VBHDR.VBMOD和VBDATA表上的现有统计可以通过以下命令从数据库中删除。除去现有统计(QUeryAna1.yzer)1 .便用IpJw1.p1.1.Mitt令台确定要除去的统计名.例如,要显示任何VBMOD上的现有统计名神,在杳询窗口中键入以下命令:execsphe1.pindexYHMOD2 .按CTR1.+E执行命令。变御分析器结果窗格中的index_D8M列潞显示所畲索引与统计的名称.3 .(1.dropStetistica母令中使用统计名称.例如,要除去名为WSysVBE1.X0I103的统计,在交询窗b中徙入以下母令:dropstatisticsVBRI,._WASysVBE1.Nj)AEA1.oA34 .按CTR1.+E执行命令.5 .时表VBMOI),VBIIDR和VBDATA上的所有统计史复执行1至4步索.DBccSiioucontig命令用于评估表中出现的钠理碎片(如果有)等级.运行DBCCSHOWCONTIG的例如(QUeryAnaIyZer)1 .在查询窗口低人以下命令:dec1.are«idintse1.ectGid=objectid('saptest)dbccshowcontig俺id)2 .按CTR1.+E执行命令。3 .应该出现以下输出:DBCCSHOWCOVIGscanning,satesttab1.e.Tab1.e:'saptes1.1.'(93357