为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

SAP性能优化指南

2023-02-15 19页 doc 40KB 4阅读

用户头像 个人认证

is_318014

暂无简介

举报
SAP性能优化指南MSSQLServer7.0的SAPR/3性能优化指南1998年11月发行读者本文档所提供的信息可以帮助SAPR/3数据库管理员理解Microsoft®SQLServer™7.0的各个方面。这些方面可以经过优化,从而在与SAPR/3环境相关的特有数据库工作负荷条件下提供最佳性能。虽然本文档是为SAPR/3站点量身定制的,但是一定要注意本文档中描述的SQLServer功能和优化技巧不仅仅适用于SAPR/3。大型到超大型数据库(VLDB)需要支持大量用户连接和大的工作负荷,工作于这一环境中的数据库管理员将从本文的信息中获益匪浅。引...
SAP性能优化指南
MSSQLServer7.0的SAPR/3性能优化指南1998年11月发行读者本文档所提供的信息可以帮助SAPR/3数据库管理员理解Microsoft®SQLServer™7.0的各个方面。这些方面可以经过优化,从而在与SAPR/3环境相关的特有数据库工作负荷条件下提供最佳性能。虽然本文档是为SAPR/3站点量身定制的,但是一定要注意本文档中描述的SQLServer功能和优化技巧不仅仅适用于SAPR/3。大型到超大型数据库(VLDB)需要支持大量用户连接和大的工作负荷,工作于这一环境中的数据库管理员将从本文的信息中获益匪浅。引言本篇有关性能优化的文档将讨论SAPR/3环境中的SQLServer7.0最佳配置。本指南分为四个逻辑部分。第一部分,讨论与MicrosoftWindowsNT®Server相关的配置选项。第二部分,描述SAPR/3环境中SQLServer的重要配置选项。前面这两个部分直截了当,其中还包含了在SQLServer的初始配置过程中几分钟就可以完成的一些步骤。第三部分,讨论SQLServer的索引,因为它与SAPR/3相关。索引分析往往是一个极其棘手的过程,为使数据库性能最佳需要持续不断地执行索引分析。MicrosoftTechNet中的“MicrosoftSQLServer7.0性能优化指南”应该作为本文第三部分的补充读物。该指南综合讨论硬件I/O性能、索引设计以及SQLServer性能优化工具。第四部分,讨论R/3数据库中的SQLServer文件和文件组的最佳应用。WindowsNT配置WindowsNT页面文件的大小应该至少比服务器上安装的RAM大三倍,而且要至少有10亿字节(1GB)。设置页面文件大小在开始菜单上,指向设置,然后单击控制面板。双击系统,然后双击性能选项卡。单击更改,然后在起始大小(MB)框中,输入页面文件的大小(按兆字节(MB)计)。单击确定。通常,VMM(虚拟内存管理器)已经根据SQLServer安装的默认设置进行了适当的配置。检查和/或配置VMM设置在开始菜单上,指向设置,然后单击控制面板。双击网络,然后单击服务选项卡。双击服务器,选择最大化网络应用程序吞吐量,然后单击确定。配置最小影响的屏幕保护程序和墙纸在开始菜单上,指向设置,然后单击控制面板。双击显示,然后单击背景选项卡。选定图案为(无),并选定墙纸为(无)。单击应用,然后单击屏幕保护程序选项卡。在屏幕保护程序下,选定BlankScreen,然后选定密码保护。单击应用。一些多处理器服务器可以将联网I/O请求动态分发到最不繁忙的处理器。该硬件功能有助于防止在服务于许多联网请求的系统中出现处理器瓶颈和不良网络性能。该功能通常称为对称中断分发,使用该功能可以改进可扩展性能并防止出现在其它处理器还有剩余容量时某一个处理器却成为瓶颈的情况。它在Pentium处理器系列的WindowsNT4.0HAL(硬件抽象层)中可以找到。Windows®2000也支持该功能。不同处理器操作平台使用不同方法分发中断。网卡的中断分发是由每个处理器操作平台的HAL来控制的。HAL实施的中断取决于处理器的性能。某些处理器包含了中断控制硬件,如高级可编程中断控制器(APIC)。APIC允许处理器将中断路由到计算机上的其它处理器。有关特定处理器操作平台所使用的分发方法的详细信息,请咨询操作平台供应商。在默认情况下,WindowsNT4.0不使用对称中断分发,而是将与网卡(NIC)相关的延迟进程调用(DPC)活动分配给系统中编号最大的处理器。在安装有多个NIC且NIC活动的系统中,每个额外的NIC的活动都指派到下一个编号最大的处理器。如果处理器频繁以百分之百的容量(性能监视器所显示的Processor:%ProcessorTime=100%)操作而且一半以上时间用于为DPC提供服务上(即如果Processor:%DPCTime>50%),那么可以通过调整ProcessorAffinityMask来提高性能。警告注册表编辑器使用不当会导致严重的问题,有可能需要重新安装操作系统。使用注册表编辑器要特别小心。Microsoft不保证能够解决因注册表编辑器使用不当而导致的问题。建议您在执行修改前备份注册表内容,这样在注册表修改出现问题时就能够还原内容。有关备份和还原注册表信息的说明可以在注册表编辑器的联机帮助中找到。在能够进行对称中断分发的多处理器服务器上,将WindowsNT注册表中ProcessorAffinityMask数值项的值设置为零。这样就会将网络I/O请求动态分发到最有能力处理请求的处理器中。ProcessorAffinityMask位于:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NDIS\Parameters。启动注册表编辑器以设置ProcessorAffinityMask在开始菜单上,单击运行。键入regedt32。在注册表编辑器中找到适当关键字在窗口菜单中选择HKEY_LOCAL_MACHINE。在注册表编辑器左边窗格中,双击SYSTEM。双击CurrentControlSet,双击Services,双击NDIS,然后双击Parameters。将ProcessorAffinityMask设置为零在注册表编辑器右边窗格中,双击ProcessorAffinityMask。键入0(零),然后单击确定。在注册表菜单上,单击退出。SQLServer配置SQLServer内存的推荐设置取决于R/3实例对数据库服务器的使用情况。如果SQLServer是作为专用数据库服务器而运行,建议SQLServer按照默认值动态调整它所需要的内存。R/3实例最小值最大值专用数据库服务器默认值默认值更新实例已安装RAM的40%已安装RAM的65%中心实例已安装RAM的45%已安装RAM的45%在有2GBRAM的中心实例上设置内存的例子(EnterpriseManager)在右边窗格中,双击SQLServerGroup图标。双击R/3数据库服务器的SQLServer图标。单击Memory选项卡,然后单击Useafixedmemorysize(MB)。将Useafixedmemorysize(MB)下的滑块移动到900。选定ReservephysicalmemoryforSQLServer,单击Apply,然后单击OK。完成SQLServer的内存配置之后,建议使用setworkingsetsize选项保留与SQLServer内存设置相等的物理内存空间。设置该选项意味着WindowsNT不转换出SQLServer页。配置设置工作集大小选项的例子(EnterpriseManager)在右边窗格中,双击SQLServerGroup图标。双击R/3数据库服务器的SQLServer图标。单击Memory选项卡,然后选定selectReservephysicalmemoryforSQLServer。单击Apply,然后单击OK。SAP测试显示出,在大多数R/3数据库服务器操作环境下网络数据包大小为8,192字节时性能最佳。该选项需要使用SQLServerQueryAnalyzer来设置。设置网络数据包大小(QueryAnalyzer)键入execsp_configure'networkpacketsize',8192。键入reconfigurewithoverride。按CTRL+E执行以上命令。在专用服务器上,建议使用SQLServerpriorityboost选项。设置优先级提升选项(EnterpriseManager)在右边窗格中,双击SQLServerGroup图标。双击R/3数据库服务器的SQLServer图标。单击Processor选项卡,然后在ProcessorControl框中,选定BoostSQLServerpriorityonWindowsNT。建议将SQLServerindexcreatememory选项配置为16MB。该选项需要使用SQLServer查询分析器来设置。设置索引创建内存选项(QueryAnalyzer)键入execsp_configure'indexcreatememory',16000。键入reconfigurewithoverride。按CTRL+E执行以上命令。禁用VBHDR、VBMOD和VBDATA表的页面锁定(QueryAnalyzer)在查询窗口键入以下命令:execsp_indexoption'VBHDR','allowpagelocks','false'execsp_indexoption'VBMOD','allowpagelocks','false'execsp_indexoption'VBDATA','allowpagelocks','false'按CTRL+E执行以上命令。如果数据库服务器上的所有处理器的利用率都很高(性能监视器表明在多处理器服务器上所有处理器的处理器利用率全部大于95%),那么就有必要打开SQLServerlightweightpooling。在所有处理器都非常接近完全利用时,lightweightpooling可以帮助恢复大约5%到7%的CPU。打开SQLServerlightweightpooling(EnterpriseManager)在右边窗格中,双击SQLServerGroup图标。双击R/3数据库服务器的SQLServer图标。单击Processor选项卡,选定selectUseWindowsNTFibers,然后单击Apply。当提示重新启动SQLServer时,单击Yes,然后单击Ok。SQLServeraffinitymask配置选项提供了不能执行SQLServer线程的特定处理器的。最好运用SQLServer关系掩码的默认设置,即零。关系掩码的设置为零表明允许在所有处理器上执行SQLServer线程。几乎在所有情况下,该设置都会使性能最佳,因为它避免了在其它处理器上有剩余容量的情况下而在某一台处理器上的SQLServer连接非常繁忙的情况。Microsoft的IT机构和参与SQLServer7.0EarlyAdopter计划的SAPR/3用户已运用了关系掩码的默认设置,结果性能良好。索引设计与维护“MicrosoftSQLServer7.0性能优化指南”提供了有关SQLServer索引和性能优化的重要信息。此文档可在“查找详细信息”处找到。大型的SAPR/3安装会有一些包含非常多行的SQLServer表。有了大的表,索引对数据库I/O性能影响极大。在单个数据库行或少量数据库行上搜索并执行的操作,应该有一个基于提供最高级别选择性的一列或几列所定义的非聚集或聚集索引。这样,SQLServer查询处理器和存储引擎就能够将检索行所需的I/O控制到最小化。例如,如果必须定期从非常大的Orders表中根据orderid来检索单个定单记录,那么基于orderid列定义索引可以加快查询的速度就是有意义的。在多数数据库行上搜索和执行的操作应该基于定义范围扫描的列定义聚集索引。从非常大的七月份Orders表中检索所有定单的查询就是范围扫描的一个例子。在这种情况下,Orders表的日期列就是聚集索引的最佳列。即将发行的SAPR/34.5B版本将带有一个影响SQLServer聚集索引选择灵活性的重要功能。在4.5B版中,R/3数据字典对除主键列以外的列聚集索引有被动支持。被动支持的意思是:在数据库表已改变以致于聚集索引从主键移至了另一列或列集的情况下,SAPR/3数据字典会识别并记录SQLServer聚集索引的位置。创建聚集索引需要使用与R/3工具对应的SQLServer工具。但是,聚集索引的位置在创建之后不会在数据库转换和R/3版本升级过程中丢失。4.5B以后的SAPR/3版本中有可能包含SQLServer聚集索引的积极支持。积极支持的意思是:除前面所讲到的R/3DataDictionary供的支持外,R/3工具还将支持在SQLServer表上的列(除主键列以外)的聚集索引创建。聚集索引支持中的这些更改与希望改进其R/3查询性能的R/3数据库管理员的想法有很大出入。运行SAPR/3的大型公司的月末和季度报告可能会使用数据库服务器上的范围扫描。通常情况下会是这样一种情况:在大表上所执行的范围扫描将不以与定义表的主键相同的列为基础。目前,SAPR/3SQLServer数据库实施将所有表上的主键配置为聚集主键。某些情况对测试非主键组成部分且常常为了报告目的而用于大型表的列的聚集索引的使用非常有利。ALTERTABLE命令用于将聚集主键更改为非聚集主键。以下索引分析示例讨论了这样一种情况,即将聚集主键更改为非聚集主键以便聚集索引可以基于另一列进行定义并预排将聚集主键更改为非聚集主键所涉及的步骤,这一点是有意义的。有关聚集和非聚集索引选择的详细信息,应参阅“MicrosoftSQLServer7.0性能优化指南”。SAPR/3在ST04事务处理中提供MSSTATS工具,可以帮助R/3数据库管理员跟踪数据库服务器上所执行的SQLServer存储过程的资源占用。所有R/3与数据库服务器的正常交互作用都使用存储过程执行。MSSTATS提供有助于根据资源使用区分存储过程的信息。MSSTATS返回的信息的例子包括:存储过程的调用次数、用于调用存储过程的平均和最长时间、存储过程调用所返回的行平均数和总行数、存储过程是否使用了游标、存储过程用于提取的时间与空闲时间等等。MSSTATS提供了用于确定在R/3数据库服务器上所运行的费用最高的存储过程的重要工具。性能分析应集中于这些费用最高的查询。使用以下SQLServer表示例可以模仿与许多SAPR/3表非常类似的数据模式。两个示例查询将使用该此测试表进行分析。其目的是说明如何在R/3数据库服务器环境中很好地利用SQLServer索引。示例数据以下脚本创建名为saptest1的表并在其中加入100,000个记录。第一个名为col1的列没有选择性。每一行的col1数值是一样的('000')。这是为了模拟SAPR/3中非常常见的MANDT列,通常它不太具有选择性。第二个名为col2的列设计为带有一些选择性,因为每隔100行就插入了一个'a'数值。SQLServermodulo('%')操作符用于检测每第100行的插入。最后一个名为col3的列的选择性极高。每一行都有唯一的col3数值。创建示例数据(QueryAnalyzer)在查询窗口键入以下命令:createtablesaptest1(col1char(4)notnulldefault'000',col2char(4)notnulldefault'zzzz',col3intnotnull,fillerchar(300)default'abc')declare@counterintsetnocountonset@counter=1while(@counter<=100000)beginif(@counter%1000=0)PRINT'loaded'+CONVERT(VARCHAR(10),@counter)+'of100000record'if(@counter%100=0)begininsertsaptest1(col2,col3)values('a',@counter)endelseinsertsaptest1(col3)values(@counter)set@counter=@counter+1end按CTRL+E执行命令。示例索引SQLServer主键的SAPR/3默认配置是将主键设置为聚集主键。这在大多数情况下都提供了极好的性能。但是,可能有一些独立的表,将聚集索引放在除包含表的主键列以外的某一列上会对这些表很有用。为saptest1定义的聚集主键列在R/3数据库环境下是很典型的,因为它将完整的非选择性列col1(模拟典型R/3环境的MANDT)放在索引的开始处。非聚集索引nkey2模仿典型的R/3索引就在于它是多列索引。创建示例索引(QueryAnalyzer)在查询窗口键入以下命令:altertablesaptest1addconstraintsapt_c1PRIMARYKEYclustered(col1,col2,col3)createindexnkey2onsaptest1(col2,col3)按CTRL+E执行命令。示例查询select*fromsaptest1wherecol3=5000查询1根据与名为col3的列的匹配值从测试表中提取一行:select*fromsaptest1wherecol2='a'查询2是一个范围扫描,它根据与名为col2的列的匹配值从表中提取1,000行。在SQLServerQueryAnalyzer中报告查询I/O统计SQLServerQueryAnalyzer能够从每个在QueryWindow执行的查询中提供有用价值的I/O统计。这在SQLServer文档中一般称为StatisticsIO。要启用该功能,可以执行一个T-SQL命令,或设置QueryAnalyzer菜单选项。通过T-SQL命令使用SETSTATISTICSIO选项(QueryAnalyzer)在查询窗口键入以下命令:setstatisticsioon按CTRL+E执行命令。通过菜单选项使用SETSTATISTICSIO选项(QueryAnalyzer)在QueryAnalyzer菜单上,单击Query,然后单击CurrentConnectionOptions。选定ShowStatsI/O然后单击Apply。单击OK。第一组索引的结果单行提取数据:select*fromsaptest1wherecol3=5000基于文本的ShowPlan输出:|--BookmarkLookup(BOOKMARK:([Bmk1000]),OBJECT:([pubs].[dbo].[saptest1]))|--IndexScan(OBJECT:([pubs].[dbo].[saptest1].[nkey2]),WHERE:([saptest1].[col3]=5000))等量图形显示计划输出。StatsI/O的查询结果集和数据库I/O(QueryAnalyzer):col1col2col3filler000a5000abc(1row(s)affected)Table'saptest1'.Scancount1,logicalreads240,physicalreads0,read-aheadreads0.Showplan输出显示查询处理器需要执行非聚集索引nkey2的索引扫描。索引扫描是指:SQLServer需读取nkey2的B树结构的叶级的部分或全部,以便找到键值5000。此操作要求SQLServer数据高速缓存中的240个I/O。也就是说要从SQLServer高速缓冲存储器中读取240个8KB的页面。物理读取和预读读取所显示的零说明要为此查询检索数据,没有必要从磁盘中进行读取。备注I/O统计是专用于运行的。当查询在某次运行中,所有读取都会从高速缓冲存储器中出来,并作为逻辑读取而计数,而在其它运行中,完全一样的查询有可能需要使用预读读取和/或物理读取以满足查询的I/O要求。I/O统计的这种变化可能由许多因素造成的,最常见的就是其它连接可能正在执行查询并将数据放入高速缓冲存储器(它取代了被监视查询正在使用的数据页)。当分析查询时,在打开I/O统计的情况下数次运行查询并比较其结果是很有帮助的。标为Cost的GraphicalShowplan中标明的百分数表示在每个查询的特定部分上所花费的时间所占执行查询花费的总时间的百分数。范围扫描:select*fromsaptest1wherecol2='a'基于文本的ShowPlan输出:|--ClusteredIndexScan(OBJECT:([pubs].[dbo].[saptest1].[sapt_c1]),WHERE:([saptest1].[col2]='a'))等量图形显示计划输出:统计I/O的查询结果集和数据库I/O(QueryAnalyzer):col1col2col3filler000a100abc000a200abc000a300abc...000a99800abc000a99900abc000a100000abc(1000row(s)affected)Table'saptest1'.Scancount1,logicalreads4500,physicalreads1,read-aheadreads4010.Showplan输出表明查询处理器需要执行聚集索引sapt_c1的索引扫描。索引扫描的意思是:SQLServer需要读取sapt_c1B树结构(即表的实际行)的叶级的的部分或全部以便找到键值'a'。此操作需要从高速缓冲存储器中读取4,500个8K的页。预读读取的数字4,010表明SQLServer使用Read-AheadManager在64KB组块中读取了4,010个8KB页面。预读读取比物理读取效率更高。物理读取的数字1表明SQLServer需要从磁盘中读取一个8KB页面作为单一8KB页面。由于预读读取和物理读取都是物理磁盘读取,因此它们比高速缓冲存储器的读取的逻辑读取速度慢得多。这就是为什么您的首要性能优化的目的应该是限制物理磁盘读取,并尽量满足高速缓冲存储器的所有数据库页读取。索引更改建议索引设计的目的是将I/O减到最少以实现性能最优。在前面所示的几个例子中,出现了索引扫描。与索引扫描相比,执行索引搜索的效率更高。要想作到这一点,将注意力集中于查询的WHERE子句是很重要的。在单行提取情况下,col3就是正在搜索的列。由于col3有极佳的可选择性,因此它是非聚集索引的合适候选项。对I/O性能最好的做法就是在col3上定义非聚集,使col3成为唯一列或索引中的第一列。在范围扫描的情况下,col2就是正在搜索的列。Col2的选择性还可以(100,000行中带有'a'数值的有1,000行)。因为需要所有带'a'的行,所以col2是聚集索引的合适候选项。ALTERTABLE语句用于将聚集主键更改为非聚集主键。警告在任何情况下都不要更改与表的主键关联的列。如果更改可以保证性能优势,可以将聚集主键更改为非聚集主键,也可以为同时作为主键一部分的列创建新的非聚集索引,但是在任何情况下主键列必须都保持一致。记住这一点极其重要。备注在SAPR/3环境中,建议使用SE11事务定义非聚集、非主键索引,以便在R/3数据字典中维护索引信息。有关使用SE11事务创建索引的详细信息,请参见SAP联机帮助,其位于SE11事务菜单项Help->ExtendedHelp。单击Indexes,然后按照联机指示执行。执行索引更改(QueryAnalyzer)在查询窗口键入以下命令:altertablesaptest1dropconstraintsapt_c1altertablesaptest1addconstraintsapt_c1PRIMARYKEYNONCLUSTERED(col1,col2,col3)createclusteredindexckey1onsaptest1(col2)createindexnkey1onsaptest1(col3)按CTRL+E执行命令。第二组索引的结果改进索引的单行取数据:select*fromsaptest1wherecol3=5000基于文本的ShowPlan输出:|--BookmarkLookup(BOOKMARK:([Bmk1000]),OBJECT:([pubs].[dbo].[saptest1])WITHPREFETCH)|--IndexSeek(OBJECT:([pubs].[dbo].[saptest1].[nkey1]),SEEK:([saptest1].[col3]=5000)ORDERED)等量图形显示计划输出。统计I/O的查询结果集和数据库I/O(QueryAnalyzer):col1col2col3filler000a5000abc(1row(s)affected)Table'saptest1'.Scancount1,logicalreads5,physicalreads0,read-aheadreads0.Showplan现在表明SQLServer正在对索引nkey1使用索引搜索而不是索引扫描。索引搜索是指:SQLServer能够快速浏览nkey1B树结构(而不是象前面例子中的扫描索引的叶级),并使用书签查找来找到与键值5000关联的数据行。这一从索引扫描到索引搜索的改变对I/O性能有极大的影响。要执行查询,仅需要SQLServer数据高速缓存中的5个I/O,而前一个例子中,需要240个。改进索引的范围扫描:select*fromsaptest1wherecol2='a'基于文本的ShowPlan输出:|--ClusteredIndexSeek(OBJECT:([pubs].[dbo].[saptest1].[ckey1]),SEEK:([saptest1].[col2]='a')ORDERED)等量图形显示计划输出。统计I/O的查询结果集和数据库I/O(QueryAnalyzer):col1col2col3filler000a100abc000a200abc000a300abc...000a99800abc000a99900abc000a100000abc(1000row(s)affected)Table'saptest1'.Scancount1,logicalreads48,physicalreads0,read-aheadreads0.Showplan再次表明SQLServer正在对索引ckey1使用索引搜索而不是索引扫描。在聚集索引搜索情况下,不需要进行书签查找,因为聚集索引B树的叶级已包含表数据。索引扫描到索引搜索的改变再次对I/O性能产生重大而又积极影响。要提取1,000行,仅需要对SQLServer高速缓冲存储器的48次读取,而在前一个例子中则需要4,500个I/O。I/O的数量已大大减少,因此,完成该查询不再需要物理磁盘I/O,因为所需要的页在SQLServer数据高速缓存中已经有了。物理读取和预读读取的数字都是零,这就说明了这一点。切记:预读读取是每个读取为64KB的物理磁盘读取,物理读取是每个读取为8KB的物理磁盘读取。索引分析的观察与结论从前面的例子中可以清楚看出:索引设计对SQLServer查询中的I/O性能起着举足轻重的作用。范围扫描的例子特别用来说明:在R/3环境中,还可能有适合于除主键列以外的列的聚集索引的情况。特别是对于要在其上执行报告的大型表来说,这是很有可能的。例如,如果大型表根据日期列进行报告,但是日期列未包含在聚集主键中,那么对于聚集索引测试日期列的使用就非常有用。在SQLServer7.0中,聚集索引中所包含的列和字节越多,该特定表的非聚集索引越大。这是因为该表的聚集索引和非聚集索引都使用构成聚集索引的列。非聚集索引包含群集键并使用群集键定位rowdata。如果表上没有聚集索引,则此情况不适用。相反,在这种情况下表是作为堆集来管理的。有关详细信息,请参见SQLServer联机图书。既然非聚集索引在非聚集B树结构中包含群集键,要注意两种影响。第一,一定要保持较小的聚集索引规模,因为它不仅影响聚集索引的大小和性能,而且还影响该表中的所有非聚集索引的大小和性能。第二,一定要记住非聚集索引包含群集键,因为在非聚集索引包含满足查询(群集键除外)所需的所有列的情况下,查询处理器可以使用键值列帮助涵盖查询。涉及群集键的涵盖查询示例以下是一个简单的例子,它说明了在群集键仅包含非聚集索涵盖给定查询所需的其它信息的情况下,查询处理器将非聚集索引用作涵盖索引,并无须使用书签查找从表中提取数据。有关涵盖查询与索引设计的详细信息,请参见“MicrosoftSQLServer7.0性能优化指南”。建立以下表(QueryAnalyzer)在查询窗口键入以下命令:createtablesaptest2(col1int,col2char(4)default'a',fillerchar(300)default'zzzz')declare@counterintset@counter=1while(@counter<=1000)begininsertsaptest2(col1)values(@counter)set@counter=@counter+1endinsertsaptest2values(1001,'sap','R/3')createclusteredindexsap_CK1onsaptest2(col1)createnonclusteredindexsap_NCK1onsaptest2(col2)按CTRL+E执行命令。显示并比较以下两种查询计划(QueryAnalyzer)在查询窗口键入以下命令:select*fromsaptest2wherecol2='sap'selectcol1,col2fromsaptest2wherecol2='sap'分别选择每个查询,然后按CTRL+L显示图形显示计划。使用第二个查询不需要书签查找,因为非聚集索引暗含群集键,因此涵盖了查询。当解决R/3程序长期存在的问题时,要牢记一种潜在的操作方法,即使用sp_recompile标记存储过程以便快速重编译。sp_recompile命令执行占用时间极少而且很有用。sp_recompile命令迅速标记存储过程,以便为存储过程生成新的查询计划,它反映表的数据、索引及统计的最新情况。备注在大多数R/3正常操作情况下,没有必要运行sp_recompile,因为在对其有利的情况下,SQLServer会自动重新编译存储过程。但是在R/3环境中也有过这样的情况,即SAP和Microsoft已发现在有长期存在且性能不良的更新和批处理过程运行的表中运行sp_recompile是很有好处的。使用sp_recompile最简便的方法之一是将表名称作为命令参数提交。这样就会为重新编译标记所有与表名称关联的存储过程。例如,如果CCMS显示在VBRP表上操作的更新过程的执行时间特别长,那么就有必要在该表上运行sp_recompile。执行sp_recompile的示例(QueryAnalyzer)键入execsp_recompile'VBRP'。按CTRL+E执行命令。SQLServer7.0提供列和索引统计的自动生成与维护。统计辅助查询处理器确定最佳查询计划。默认情况下,为所有索引创建了统计,并且在为列统计可能有用和优化器可能需要对其进行推测的列编译查询时,SQLServer会自动创建单列统计。为避免对未使用的统计的长期维护,SQLServer为自动创建的统计(仅指那些不是索引创建的附带统计)制定有效时间。在几次自动更新之后,列统计不再被更新,而是被丢弃。如果以后需要,可以再次创建。统计更新与创建间的开销上没有什么大的差异。此有效时间的制定不影响用户创建的统计。为使性能最佳,建议使用自动统计。统计的自动创建和更新是SQLServer7.0的默认配置。该建议不适用于表VBHDR、VBMOD和VBDATA。对于这些表,建议关闭自动统计。从本质上讲,VBHDR、VBMOD和VBDATA的大小极不稳定,也就是说它们可能频繁地从空变成非常大,然后又变回空。R/3仅通过主键访问这些表。这些表的其它统计不会有什么用,因为使用主键的同一查询计划也用于每个访问。基于上述这些原因,在这些表中关闭自动统计功能是有利的。以下命令集将防止以后在VBHDR、VBMOD和VBDATA表上的统计生成。要关闭VBHDR、VBMOD和VBDATA的自动统计(QueryAnalyzer)在查询窗口键入以下命令:execsp_autostatsVBHDR,'OFF'execsp_autostatsVBMOD,'OFF'execsp_autostatsVBDATA,'OFF'按CTRL+E执行命令。VBHDR、VBMOD和VBDATA表上的现有统计可以通过以下命令从数据库中删除。除去现有统计(QueryAnalyzer)使用sp_helpindex命令确定要除去的统计名。例如,要显示任何VBMOD上的现有统计名称,在查询窗口中键入下列命令:execsp_helpindexVBMOD按CTRL+E执行命令。查询分析器结果窗格中的index_name列将显示所有索引与统计的名称。在dropstatistics命令中使用统计名称。例如,要除去名为_WA_Sys_VBELN_0AEA10A3的统计,在查询窗口中键入以下命令:dropstatisticsVBRP._WA_Sys_VBELN_0AEA10A3按CTRL+E执行命令。对表VBMOD、VBHDR和VBDATA上的所有统计重复执行1至4步骤。DBCCSHOWCONTIG命令用于评估表中出现的物理碎片(如果有)等级。运行DBCCSHOWCONTIG的示例(QueryAnalyzer)在查询窗口键入以下命令:declare@idintselect@id=object_id('saptest1')dbccshowcontig(@id)按CTRL+E执行命令。应该出现以下输出:DBCCSHOWCONTIGscanning'saptest1'table...Table:'saptest1'(933578364);indexID:1,databaseID:5TABLElevelscanperformed.-PagesScanned................................:4167-ExtentsScanned..............................:521-ExtentSwitches..............................:520-Avg.PagesperExtent........................:8.0-ScanDensity[BestCount:ActualCount].......:100.00%[521:521]-LogicalScanFragmentation..................:11.21%-ExtentScanFragmentation...................:0.96%-Avg.BytesFreeperPage.....................:198.6-Avg.PageDensity(full).....................:97.55%DBCCexecutioncompleted.IfDBCCprintederrormessages,contactyoursystemadministrator.ScanDensity和ExtentScanFragmentation有助于评定磁盘上表的组织情况。百分之百ScanDensity是最佳的可能值,因为它表明使用中的扩展的最理想数量(例如,每个扩展八个页面的情况下,扩展完全得到利用)。ExtentScanFragmentation通过表明表关联的扩展是否曾经物理移动至磁盘序列之外,从而提供页拆分的附加信息。ExtentScanFragmentation仅在表定义了聚集索引的情况下才是有用的信息。Avg.PageDensity(full)以百分数表示每个SQLServer数据页上的平均数据量。有时,这个百分数也称为数据页的充满度。高的百分数说明每个8KB读取带入SQLServer高速缓冲存储器的数据多。总而言之,高的百分数说明高速缓存将包含更多的有用信息。举个例子,考虑一下如果DBCCSHOWCONTIG显示在您的数据库中有好几个平均页密度为50%的表的情况。如果这些表含有检索的多数数据,那么SQLServer高速缓冲存储器将包含多数仅包含50%有用数据的数据页。这就是说1GB高速缓冲存储器仅包含500MBSQLServer数据。如果将读取到高速缓冲存储器的所有表的平均页面密度提高到接近100%,那么一个1GB的高速缓冲存储器将包含接近1GB的SQLServer数据,这样就好多了。如果访问某表的查询的应答时间增长到无法忍受的程度,则在该表上运行DBCCSHOWCONTIG命令。如果Avg.PagesperExtent大大小于8.0,ExtentScanFragmentation大于10-20%或Avg.PageDensity(full)大大小于100%时,有必要考虑重建表的聚集索引,以便将表中的数据物理重排到物理连续的扩展中。重建聚集索引还提供了选择更完整的页面填充的选项,以便每8KB页压缩更多的数据。磁盘上有经过良好压缩而连续的数据对I/O性能是有利的,因为SQLServer可以在从此表中提取数据时利用有序I/O(比无序磁盘I/O快得多)并在每次读取时将最多的SQLServer有用数据带入高速缓冲存储器。FillFactor是CREATEINDEX语句的可用选项,它允许控制索引叶级的充满度。表聚集索引的叶级是表的数据页,因此使用FillFactor选项可以控制使用聚集索引的表的数据页的充满度。FillFactor的默认值为零。默认值对表内所有数据页都执行100%填充。Microsoft的IT机构一直在其SAPR/3环境下的多数SQLServer表中使用FillFactor的默认值,性能极好。建议将FillFactor的默认值用做R/3数据库服务器测试的起点。FillFactor要牢记的主要关系是应处理好将最大量的数据打包进每个数据与索引页的I/O性能与避免页拆分的性能优势之间的关系。当需要将数据插入某页,但该页已满时,就会发生页拆分。此时,必须使用新页,且数据在旧页和新页之间重组。SQLServer7.0增强型存储结构使页拆分操作比SQLServer6.5中的效率高得多;对页拆分的性能处罚也没有那么多。这就解释了为什么默认FillFactor设置是一个好的起点的原因。如果DBCCSHOWCONTIG命令报告表中出现大量物理碎片,而且表的响应时间很差,那么应该重建该表上的聚集索引以使索引B树结构保持最佳形态。要重建主键,需要CREATEINDEX命令的DROP_EXISTING选项。它还为任一索引的重建提供了增强性能。以下示例假定前面描述的原始saptest1表中的索引正在重建。重建聚集主键的示例(QueryAnalyzer)在查询窗口键入以下命令:createuniqueclusteredindexsapt_c1onsaptest2(col1,col2,col3)withdrop_existing按CTRL+E执行命令。重建非聚集主键的示例(QueryAnalyzer)在查询窗口键入以下命令:createuniqueindexsapt_c1onsaptest2(col1,col2,col3)withdrop_existing按CTRL+E执行命令。重建聚集索引的示例(QueryAnalyzer)在查询窗口键入以下命令:createclusteredindexckey1onsaptest2(col2)withdrop_existing按CTRL+E执行命令。会有一些插入活动频率高的R/3环境,且有必要测试对数据和索引页稍低百分率填充的使用,以便将页拆分情况控制到最少。有关在CREATEINDEX语句中使用FillFactor的语法的详细信息,请参见SQLServer联机图书。文件和文件组设计建议将SQLServer文件的大小定为每个RAID数组至少有三个大小相等的SQLServer文件,并且这些文件的大小应设置为它们预期能够增长到的最大值。使用autogrow处理调整大小的紧急情况。在确定需要更多的I/O处理能力且需要将新的RAID数组联机时,定义三个文件有助于加快数据重新分发的速度。要将数据移动至新的数组,可以使用ALTERDATABASE命令修改数据库,以便将一个文件放在新的RAID数组中。然后可以关闭SQLServer,可以迅速将该文件移至新数组,而且可以启动SQLServer备份。使用ALTERDATABASE命令的MAXSIZE选项可以防止autogrow超过RAID数组大小。在任何文件变满之前,使用ALTERDATABASE命令将新文件添加到文件组中。为使性能最佳,建议按预期达到的最大规模创建事务处理日志,而不要使用小的初始规模并使用autogrow增加日志大小。这有助于减少虚拟日志文件数。使用autogrow处理事务日志文件的紧急增长。使用ALTERDATABASE命令的MAXSIZE选项(如以下tempdb中说明的)可以限制事务处理日志文件的增长,以便它们不会超过物理磁盘的容量。建议将tempdb的大小设置为最小250MB。一般情况下,应使用autogrow,但是如果根据测试与以往经验了解到会需要大的tempdb,则建议将tempdb设置为该规模,而不是通过autogrow将tempdb从初始的250MB扩大到所需的较大规模。将tempdb的autogrowth限制为4GB(QueryAnalyzer):在查询窗口键入以下命令:Execsp_helpdbtempdb按CTRL+E执行命令。在命令所返回的的结果集第二部分的第一列中,将会有与tempdb关联的数据和日志文件的逻辑文件名。tempdb数据文件的逻辑文件名将用于ALTERDATABASE命令。在这种情况下,tempdb数据文件的逻辑文件名为tempdev。在查询窗口键入以下命令:alterdatabasetempdbmodifyfile(name=tempdev,maxsize=4000)按CTRL+E执行命令。查找详细信息MicrosoftTechNet包含的“MicrosoftSQLServer7.0性能优化指南”提供了创建SQLServer索引、优化磁盘I/O、RAID和使用SQLServer7.0性能工具的有用信息。强烈建议在工作中使用运行SQLServer的SAP安装的SAP系统管理员阅读本文档。SQLServer文档提供有关SQLServer结构和数据库优化的信息,同时提供完整的命令语法和管理文档。要定期在使用SQLServer的计算机硬盘驱动器上安装SQLServerBooksOnline,因为它是极为有用的参考。有关SQLServer的最新信息(包括其它文档),请访问SQLServerWeb站点:HYPERLINK"http://www.microsoft.com/sql/"http://www.microsoft.com/sql/。WindowsNT上的R/3安装-MicrosoftSQLServer数据库-SAP4.0B版-文档产品ID51002828-可以从SAPAG得到。数据库转换:MicrosoftSQLServer版本6.5到7.0-文档产品ID51003094-可以从SAPAG得到。本文档包含的信息代表了发布之日,MicrosoftCorporation对所讨论问题的当前看法。由于Microsoft必须顺应不断变化的市场条件,故它不应被理解为Microsoft一方的承诺,Microsoft不保证任何信息在发布之后的准确性。本文档仅供参考。在本文档中MICROSOFT不作任何明示的或默示的保证。©1998MicrosoftCorporation.版权所有。Microsoft、MSDN、Windows和WindowsNT是MicrosoftCorporation在美国和/或其它国家的注册商标或商标。此处提到的其它产品和公司名称,可能是所有者的商标。文档编号:098-82427
/
本文档为【SAP性能优化指南】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索