金蝶金蝶K/3K/3产品性能稳定性优化指导手册产品性能稳定性优化指导手册((辅助工具辅助工具))((V3.0V3.0)) 金蝶软件(中国)有限公司研发中心K/3产品事业部.设计部解释目的本手册在于指导技术支持人员、分支机构实施服务人员和客户处理K/3系统应用过程中产生的性能问题、中间层服务器问题等;同时也指导我们的实施服务人员和客户在实施中如何避免将来可能发生的性能问题和中间层问题。让研发人员、技术支持人员和分支机构实施人员一起共同提高工作能力,快速反应快速解决客户的问题。适合对象本手册的主要阅读对象是K/3系统研发人员、技术支持人员、实施人员、客户服务人员和公司授权的有一定技术能力的客户系统管理员。反馈本手册是对研发在处理客户性能和稳定性问题的收集和总结,所以涉及到的面有可能还不够。完善本手册,提供一个更加完整的客户问题解决指导方案,离不开大家的支持,所以大家在碰到相关的问题时,请反馈K/3设计部,我们将及时对手册更新。导读本手册包括数据库、中间层、客户端和辅助分析工具介绍四大篇,分别介绍K/3客户性能和稳定性问题的处理方法、案例以及辅助工具,请您根据您的需要选择相应的章节阅读。注意由于此手册可能牵涉一些K/3在技术方面的细节,为了防止有些人用意不良,断章取义来攻击K/3和公司,请注意保密。-1-金蝶K/3产品性能稳定性优化指导手册(辅助工具)目录辅助分析工具介绍..31.1WINDOWS任务管理器..31.2SQLServer的事件探查器(SQL-PROFILE)..41.3数据库阻塞监测工具.121.4K/3性能监控工具..131.5组件服务..151.6SQLDiag.exe.181.7性能监视器(PerformanceMonitor)..201.8VBCheckW2k.231.9ADPlus..241.10COM+SPY.261.11ProcessExplorer.271.12DebugDiag..291.13WinDBG.321.14收集计算机信息工具.321.15检查网络工具.321.15.1Ping..321.15.2Netstat..341.15.3ARP(地址转换协议)..341.15.4Tracert..351.15.5IPConfig.361.15.6Route..361.15.7nbtstat.371.15.8使用pathping测试路由器..371.15.9网络诊断实例:..39附录1:应用/测试环境..41附录2:DTC一些资料..41附录3中间层COM+问题分类和处理..42-2-金蝶K/3产品性能稳定性优化指导手册(辅助工具)辅助分析工具介绍如果系统出现问题,由于产生问题的原因很多,可能是COM+组件出现了问题,或者是SQLServer数据库的出现了问题,或者操作系统本身就存在问题,或者是网络存在问题。所以我们需要综合多个可能的因素,使用一些辅助工具对系统进行跟踪检测,然后分析跟踪的结果,最终找到问题所在。下面就常见的一些辅助工具作一个简单的介绍:1.1WINDOWS任务管理器如果K/3系统很慢,是不是系统没有可用的CPU和内存等资源了?Windows任务管理器可以帮助我们发现系统资源的使用情况。一)使用方法要打开“任务管理器”,请用右键单击任务栏上的空白处,然后单击“任务管理器”,或者把“Ctrl+Alt+Delete”三个键同时按下,选择“任务管理器”。*选择“性能”选项卡,如下图:可以发现系统CPU和内存的使用情况。在系统出现性能问题时,监测一段时间系统资源的使用情况。*选择“进程”选项卡,如下图:如果在上图中发现CPU或者内存的使用率比较高,通过该图,可以发现资源究竟被哪些进程所消耗。是否还有别的系统(除K/3)消耗了宝贵的CPU和内存资源。下图中可以看出SQLServer消耗了系统91%的CPU,K/3消耗了8%的CPU。-3-金蝶K/3产品性能稳定性优化指导手册(辅助工具)二)数据库服务器CPU曲线的一些典型结论由于数据库是K/3系统的瓶颈,我们主要观察数据库服务器的性能,通过观察数据库服务器CPU的运行曲线,可以得出一些典型结论。特别说明要观察一段时间的CPU运行状态,而不是看一瞬间的状态。1)CPU持续100%一段时间如果发现数据库CPU在某一段时间持续达到100%,成一条直线状,这可以判断是某项功能耗用了全部的CPU资源,这项功能如果是很少使用的计算功能或者是大数据量查询,建议适当安排,不要在业务高峰期运行,如果是日常功能绝对需要优化。如果能够直接判断是某项具体的功能最好,如果在并发下无法判断到底是何功能。可以通过SQL-PROFILE跟踪执行时间较长的SQL。2)CPU大多数时间保持在40%以上如果数据库服务器CPU长期保持在40%以上,系统的运行速度时快时慢,这表示CPU的负荷已经很重。如果不能优化软件本身,升级硬件,增加CPU的个数可能是需要的。在这儿要说明一点,不能认为CPU达到100%才是CPU资源不足。3)良好的CPU状态良好的CPU状态是CPU能够经常跌落到40%以下,并且可以跌落到0。三)判断数据库内存是否够用的一种简单方法在任务管理器中选择查看-显示内核时间,会显示一条红线,可以理解为磁盘读写的时间,如果红线很高证明大量的磁盘读写操作,说明内存可能不够,需要大量的内存切换。1.2SQLServer的事件探查器(SQL-PROFILE)主要用来跟踪数据库的SQL执行情况,发现耗时较长的SQL,从而发现影响性能的原因,分支机构可以使用此工具得到跟踪文件,把跟踪文件返回到研发,用来分析和定位问题。这-4-金蝶K/3产品性能稳定性优化指导手册(辅助工具)是最有效的定位分析问题的手段。一.使用方法K/3出现性能问题,很多都是与SQLSever数据相关。是否是一次查询了太多的数据造成数据库负载过大,出现性能问题?使用该工具可以使我们发现是哪些SQL语句消耗了SQLServer数据库的资源,对于发现性能问题会很有帮助,特别是给研发的软件工程师们。SQL事件探查器用于以下活动:逐步分析有问题的查询以找到问题的原因。查找并诊断运行慢的查询。捕获导致某个问题的一系列SQL语句。然后用所保存的跟踪在某台测试服务器上复制此问题,接着在该测试服务器上诊断问题。监视SQLServer的性能以精细地调整工作负荷。1)启动事件探查器工具在“开始”菜单,依次指向“程序”、“MicrosoftSQLServer”,然后单击“事件探查器”。2)打开该程序后选择“文件”菜单的“新建”的子菜单“跟踪”,打开如下的界面:选择SQLServer服务器名称(或者输入IP地址,如果是本机器可以输入“.”英文句号),然后输入SQLServer的身份验证登陆名和密码,可以和数据库管理员联系。3)选择“事件”选项卡在该图中设置需要跟踪的SQLServer事件类。主要用来跟踪SQL语句和存储过程的事件,通常情况下只要设置TSQL事件类的SQL:BatchCompleted,SQL:StmtCompleted事件和存储过程事件类RPC:Completed、SP:Completed,SP:stmtCompleted事件即可。-5-金蝶K/3产品性能稳定性优化指导手册(辅助工具)4)选择“数据列”选项卡,如下图:在该图中选择要捕获的数据列。建议把左边的数据列全部添加到选定的数据列表中,捕获完整,充分的信息。-6-金蝶K/3产品性能稳定性优化指导手册(辅助工具)设置完上面的信息后,点击“运行”按钮。对选定的数据库服务器进行一定事件的跟踪,然后另存为跟踪文件,如下图:可以对数据列:CPU(事件所使用的CPU事件,毫秒为单位),Reads(服务器代表事件执行的逻辑磁盘读取数),Writes(服务器代表事件执行的物理磁盘写入数),Duration(事件所花费的事件总计,毫秒为单位)进行查看,查找读取或写入物理磁盘次数多的操作,耗时比较多的操作。为查找性能问题提供有力的证据,对性能优化也具有参考的价值。-7-金蝶K/3产品性能稳定性优化指导手册(辅助工具)各个数据列的具体含义列举如下表,以供参考查阅。数据列列号描述ApplicationName110创建与SQLServer实例的连接的客户端应用程序名。该列由应用程序传递的值填充,而不是由所显示的程序名填充。BinaryData2与在跟踪中捕获的事件类相关的二进制值。ClientProcessID19由主机计算机分配给进程的ID,在该进程中客户应用程序正在运行。如果客户端提供客户端进程ID,则填充此数据列。ColumnPermissions44表明是否已设置了列权限。分析语句文本,以确定将哪些权限应用到了哪些列。CPU18事件所使用的CPU时间总计(以毫秒为单位)。DatabaseID13USEdatabase语句所指定的数据库ID,如果没有对给定实例发出过USEdatabase语句,则是默认数据库。如果在跟踪内捕获ServerName数据列且服务器可用,则SQL事件探查器将显示数据库名。通过使用DB_ID函数确定数据库的值。DatabaseName35正在运行用户语句的数据库的名称。DBUserName140客户端的SQLServer用户名。Duration13事件所花费的时间总计(以毫秒为单位)。EndTime15事件结束时的时间。启动事件的事件类(如SQL:BatchStarting或SP:Starting)的该列不填充。Error31给定事件的错误号。通常是存储在sysmessages中的错误号。EventClass127捕获的事件类类型。-8-金蝶K/3产品性能稳定性优化指导手册(辅助工具)EventSubClass121事件子类的类型,提供有关每个事件类的进一步信息。例如,ExecutionWarning事件类的事件子类值代表执行警告的类型:1=查询等待。查询必须等待资源(如内存)才能执行。2=查询超时。查询在等待执行所需的资源时超时。所有事件类的该数据列均不填充。FileName36所修改的文件的逻辑名称。Handle33ODBC、OLEDB或DB-Library所用的整数,用以协调服务器的执行。HostName18正运行客户端的计算机名。如果客户端提供主机名,则填充此数据列。若要确定主机名,请使用HOST_NAME函数。IndexID24受事件影响的对象上的索引ID。若要确定对象的索引ID,请使用sysindexes系统表的indid列。IntegerData25与在跟踪中捕获的事件类相关的整型值。LoginName11用户的登录名(SQLServer安全登录或MicrosoftWindows®登录凭据,格式为DOMAIN\Username)。LoginSid141登录用户的安全标识号(SID)。可以在master数据库的sysxlogins表中找到该信息。对于服务器中的每个登录,SID是唯一的。Mode32不同事件所用的整数,用于描述事件已接收或要请求的状态。NestLevel29表示@@NESTLEVEL所返回的数据的整数。NTDomainName17用户所属的MicrosoftWindowsNT®4.0或Windows2000域。NTUserName16WindowsNT4.0或Windows2000用户名。ObjectID22系统分配的对象ID。ObjectName34引用的对象名。ObjectType28表示事件中涉及的对象类型的值。该值对应于sysobjects中的type列。OwnerName37对象所有者的数据库用户名称。Permissions19表示所检查的权限类型的整型值。取值为:1=SELECTALL2=UPDATEALL4=REFERENCESALL8=INSERT16=DELETE32=EXECUTE(仅限于过程)4096=SELECTANY(至少一列)8192=UPDATEANY16384=REFERENCESANYReads16服务器代表事件执行的逻辑磁盘读取数。RoleName38要启用的应用程序角色名。-9-金蝶K/3产品性能稳定性优化指导手册(辅助工具)ServerName126跟踪的SQLServer实例名。Severity20异常错误的严重级别。SPID112SQLServer指派的与客户端相关的服务器进程ID。StartTime114启动事件的时间(可用时)。State30等同于错误状态代码。Success23表示事件是否成功。取值包括:1=成功。0=失败例如,1表示权限检查成功,0表示该检查失败。TargetLoginName42对于以登录为目标的操作(例如,添加新登录),是目标登录的名称。TargetLoginSid43对于以目标为登录的操作(例如,添加新登录),是目标登录的SID。TargetUserName39对于以数据库用户为目标的操作(例如授予用户权限),是该用户的名称。TextData1与跟踪内捕获的事件类相关的文本值。但是,如果正在跟踪参数化查询,则不以TextData列中的数据值显示变量。TransactionID4系统分配的事务ID。Writes17服务器代表事件执行的物理磁盘写入数。二.一些使用技巧在选择要跟踪的事件时不要使用默认设置,一定要按照上面使用方法中的描述选择部分事件,否则会跟踪到很多无用的连接或回话信息。选择SQL:BatchCompleted,SQL:StmtCompleted事件和存储过程事件类RPC:Completed、SP:Completed,SP:stmtCompleted即可。如果发现某一段时间有规律的发生性能问题,需要事先跟踪,跟踪一段时间,而不是问题已经发生了再去跟踪。跟踪一段时间后,约1-2小时保存一次,否则跟踪文件太大,耗用太多的内存会影响服务器的内存。在保存时要选择保存为跟踪文件(默认是这样),保存为其他格式会丢失分析性能的数据,以前有分支机构的人员就是保存为SQL脚本发给研发,这对分析问题毫无价值。跟踪文件可能会很大,但是压缩比例很高,压缩后作为《K/3性能问题诊断模版》的一部分反馈给研发。为了不使跟踪文件过大,在筛选条件上选择Duration>=200的事件,因为执行周期很短的SQL不是我们在性能分析中关注的重点对象,同时全部SQL都跟踪会很多,设置如下。-10-金蝶K/3产品性能稳定性优化指导手册(辅助工具)附件是一个跟踪文件的模版,SQLServer本身也带有很多的模版,在[SQLServer安装目录]\80\Tools\Templates\SQLProfiler路径下,如果有兴趣也可以学习使用。如何跟踪触发器在跟踪SQL的时候,可能会发现即使单条的Insert、Deleted、Update语句都会很慢。这种情况下,有可能是请求的资源被锁定或者CPU等硬件资源不足等。除此之外,还可以检查是否是触发器造成的。有些触发器工作不良好:如使用游标来处理数据,或者由于触发器的位置不对,使得本来可以批量处理的情况,只能单条处理。如:Master-Detail表数据结构中,Detail表中的触发器只能处理一条Detail中的数据。而一般情况下,可以成批处理Detail中的数据。通常开发人员也很少留意触发器嵌套调用关系,因而对嵌套造成的后果,也很少考虑。种种原因,提醒我们值得去留意触发器对SQLServer的影响。使用SQLServerProfiler是可以跟踪到触发器的执行情况的,选择事件中的存储过程SP:StmtCompleted事件即可以跟踪触发器的运行情况;选中NestLevel数据列则可以很好的了解到触发器嵌套运行情况。-11-金蝶K/3产品性能稳定性优化指导手册(辅助工具)附件中是一个跟踪触发器的模版。三.主要跟踪数据的解释我们主要通过跟踪数据中Duration(执行周期)列的数据来发现那些耗用数据库服务器CPU特别严重的SQL,然后去优化他们的实现。如果你比较了解SQL,可以试着把SQL拷贝到查询分析器,通过分析查询计划,建立合适的索引来优化性能。或者可以把Duration较长的SQL反馈到研发来分析。我们还需要关注Reads数据列,它代表磁盘的逻辑读次数,如果很多SQL语句的Reads次数都很高(达到几十万几百万甚至几千万次),这有可能是两方面的原因。一方面有可能是内存不足,SQLServer频繁切换内存数据。另一个可能的原因就是表和索引的存储碎片太多,这可以通过在账套管理中账套优化操作来解决,这个功能可以理解为磁盘整理。关注CPU和Duration两列的数据对比情况,可以判断CPU资源是否足够,如果大多数SQL语句的CPU列数据明显低于Duration,如果CPU曲线又很高,没有发生严重的阻塞,我们可以认为CPU的处理队列太长,需要增加CPU资源。1.3数据库阻塞监测工具有时候数据库服务器的CPU耗用很低,但是系统的整体性能很差,有可能是数据库发生阻塞,在这儿有一个监测工具可以得到阻塞情况。在查询分析器上打开工具->选项,修改结果的设置选项把每列最多字符数修改为8000。把查询结果改为文本显示。-12-金蝶K/3产品性能稳定性优化指导手册(辅助工具)在发生性能问题时在查询分析中有问题的账套上执行如下SQL。把执行结果保存为文件反馈到研发,研发人员会根据此结果得出一定的结论。1.4K/3性能监控工具工具路径:\ProgramFiles\Kingdee\K/3ERP\KDMainDbg.exe(或KDLogMonitor.exe)K/3性能检测工具包括三个部分:1、客户端诊断工具2、客户端代码及跟踪3、COM+跟踪工具.已在K/3V10.2中广泛应用并与K/3集成,帮助分析解决了一些性能问题,大大提高了开发效率。目前组件级跟踪和COM+跟踪,适用于K/3所有版本,甚至包括其他任何使用VB开发程序的产品,包括U8。1、客户端诊断工具用于跟踪后期绑定组件的接口对象创建、方法调用、运行时间、执行结果信息等情况。以下是明细功能介绍:可以跟踪对象创建的时间。VB本身对于对象创建出错,一般用对象创建失败或者Automation错误提示。无法确定知道具体哪个组件出现问题,该工具可以明确标识出创-13-金蝶K/3产品性能稳定性优化指导手册(辅助工具)建失败的组建名称。K/3V10.2安装包调整过程中,遇到大量组件创建失败情况,通过该工具迅速定位到创建失败的组件,极大提高了解决安装包问题的速度。提供了查找功能。方便了开发人员对于自己关心组件的查找,定位。增强了过滤功能,能将调用时间比较长的事件用蓝色字体突出显示,同时过滤掉调用时间很小的事件。将对象创建事件和方法调用事件分别用不同颜色显示,便于识别;同时将没有嵌套的方法调用使用一行来显示2、客户端代码级监测工具用于关键函数的运行信息的输出,方便在客户环境下定位程序问题、并提供性能数据收集。-14-金蝶K/3产品性能稳定性优化指导手册(辅助工具)3、COM+跟踪工具利用COM+本身的事件发布模型,监控COM+组件的方法调用,运行结果信息。主要用于COM+服务器端的信息跟踪,查看哪个中间层组件调用时间长或内存消耗打,以确定性能问题或其他问题所在。(1)选择要跟踪的COM+应用程序包(2)确定进行跟踪1.5组件服务主要用来分析中间层的性能表现一)使用方法使用组件服务管理工具可以配置和管理COM组件及COM+应用程序,在K/3中间层服务器监视组件的使用情况。-15-金蝶K/3产品性能稳定性优化指导手册(辅助工具)1)启动组件服务管理工具在“开始”菜单,依次指向“程序”、“管理工具”,然后单击“组件服务”。2)检查K/3中间层组件是否在运行如下图,选择“Com+应用程序”可以发现哪些组件正在运行;选择工具条上的“状态查询”能够更加直观的查找哪些组件在运行中。如果客户端用户比较多或者网络速度比较慢的情况下,中间层服务器有可能出现服务,从而引起性能问题。可以通过组件服务的事件列表检查是否有比较多的事件在排队等待。界面如下图:-16-金蝶K/3产品性能稳定性优化指导手册(辅助工具)二)如何找到正在执行的资源耗用多的组件有时候如果中间层的CPU或内存耗用很严重,由于在多个客户的并发下有时候客户很难发现是那一项操作引发了问题,这时候可以找一下那一个组件包中的哪一个组件耗用资源比较严重,配合其他的观察:如在此阶段用户都在做那些操作,有助于发现引发问题的功能。首先在任务管理器的进程选页签上寻找耗用资源较多的DLLHOST进程,在这儿说明一下,每一个中间层组件包在运行时有一个DLLHOST进程,每一个包包含很多组件。找到耗用资源较多的DLLHOST,找对应的PID(进程标示号),根据PID在组件管理中可以找到对应的组件包,然后在对组件包下面寻找调用时间长的组件,把此组件的信息和其他用户操作信息反馈到研发,可以定位到具体的功能。三)如何判断中间层的阻塞对于中间层服务器,有可能发生阻塞,这时候主要看上面所描述的组件服务器中事务列表中的组件排队情况,如果有较长的排队情况,就代表出现阻塞,可以考虑把组塞较多的组件分离出来重新放到一个新建的包中,因为每一个COM+组件包有一个进程。四)关于STA模式COM+组件线程数限制问题对于VB编写的COM+组件,由于不能编译为MTA线程模型,每个组件包进程的线程数默认为10个,也就是说同一个组件包中所有组件功能只能最多有十个同时运行。对此问题,微软提供了一个修改线程数量限制的方法,那就是修改注册表选项,可以让线程数达到100。此项改进在V10.0已经在安装包做了修改,如果是以前版本的客户可以直接修改中间层服务器注册表选项。可以直接把以下注册表文件导入。修改默认设置后,会提高中间层的并发性能。-17-金蝶K/3产品性能稳定性优化指导手册(辅助工具)1.6SQLDiag.exeSQLDiag.exe工具程序默认的文件路径位于<系统磁盘驱动器>:\ProgramFiles\MicrosoftSQLServer\MSSQL\Binn目录之下,产生出来的日志文件默认放在<系统磁盘驱动器>:\ProgramFiles\MicrosoftSQLServer\MSSQL\LOG目录之下,文件名为SQLDiag.txt。它可以在同一时间、一次帮你收集相当多的信息。在相同的时间区段内,收集各种方面的信息非常重要。例如你观察到SQLServer对某个查询的响应迟缓,可能需要同时观察系统硬件各项资源的使用,SQLServer当时的锁状况,是否有错误发生等等,必须要互相参照,才容易找出祸首。SQLDiag.exe就可以在同一时间搜集到相当多的信息,它必须在SQLServer服务器本身执行,而不能在客户端工作站执行。输出的相关数据列述如下: 获取记录文件,若是SQLServer2000的版本,这些记录文件默认是位于“<系统磁盘驱动器>\ProgramFiles\MicrosoftSQLServer\MSSQL\LOG”目录下,名称为ERRORLOG及扩展名是数字的先前版本,如Errorlog.1、Errorlog.2一直到Errorlog.6等等,若版本是SQLServer7.0,则这些记录文件路径默认是<系统磁盘驱动器>\MSSQL7\log\。这些日志文件是文本类型,虽然名称是ErrorLog,但放的不尽然是错误,SQLServer会将一些信息,如启动时所完成的动作,放在这个文件中。当然,若有错误,也会存放在这个文件中,SQLDiag默认会将这些ErrorLog文件一并放到输出结果的文件内。 获取相关的注册(registry)信息。 获取相关链接库(dlllibrary)的版本信息。 通过sp_configure系统存储过程获取SQLServer执行实例的各项配置。 通过sp_who系统存储过程获取当前登录SQLServer执行实例的用户各项细节。 通过sp_lock系统存储过程获取锁的相关信息。 通过sp_helpdb系统存储过程获取SQLServer执行实例内各数据库的相关信息。 通过xp_msver扩展存储过程获取软硬件平台的简要信息。 通过sp_helpextendedproc系统存储过程获取扩展存储过程(extendedstoredprocedures)的相关信息。由于扩展存储过程是以DLL的形式与SQLServer的核心执行在同一个程序中,若有任何闪失,轻则造成内存泄露,重则导致服务程序当掉。通过这个系统存储过程会表列出所有的扩展存储过程,你可以将它的输出与一般安装的SQLServer做个比较,看看是否有用户自行安装的扩展存储过程,造成系统的不稳定。 从master.dbo.Sysprocesses系统数据表获取程序(process)的相关信息。当系统忙碌时,你可以通过它观察到底有哪些程序在服务器内执行,各用了多少资源等等。搭配其他的系统存储过程,如sp_who、sp_who2、sp_lock等等,可以获得整体的状况。例如通过waittime字段知道有哪些程序已经等待很久,从cpu、physical_io以及memusage字段可以看出哪些程序在耗CPU、磁盘输出入或内存资源。以及打开了事务,但执行状况却是sleeping的不当事务管理。 通过DBCCINPUTBUFFER(spid)获取各进程正在执行的命令。 获取锁链接的起始者(headblocker)。 通过MSInfo32.exe获取系统的细节数据,这需要耗掉一些时间。 最后100个查询和异常状况(Exception)。SQLDiag.exe获取系统信息是靠MSInfo32.exe工具程序取得系统的相关信息,你可以直接执行该工具程序以查看更丰富的信息,如下图:-18-金蝶K/3产品性能稳定性优化指导手册(辅助工具)点击MSInfo32.exe主菜单的[文件]-[导出]选项,可以将系统当前的各项信息导出成文本文件,供你日后参考。由于导出属性包含软硬件的各项细节信息,所以按下[导出]后可能要稍等一下。SQLDiag.exe是一个相当容易执行的工具程序,若要参照它的使用方式,可以进入“命令提示符”程序,转到SQLDiag.exe所在的目录下执行SQLDiag/?(SQLDiag.exe默认目录是<系统磁盘驱动器>:\ProgramFiles\MicrosoftSQLServer\MSSQL\Binn),以显示各项参数,或是在SQLServer所附的“联机文档”利用SQLDiag关键字找寻使用的细节,URL是:mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\coprompt.chm::/cp_sqldiag_96k9.htm以下简述它各项参数的使用方式:-?:显示使用说明。-I<SQLServer执行实例名称>:指定要连接的本机SQLServer执行实例(Instance)。若不指定–I选项,则连接至本机默认的执行实例。-U<账号>:指定登录SQLServer的账号。-P<密码>:上述账号对应的密码。若指定-P选项但不赋予值,则SQLDiag认定密码为空。密码有区分大小写。-E:使用信任连接,也就是以当前登录操作系统的账号来连接SQLServer。-O<导出文件名称>:将SQLDiag的导出重新导向到指定的文件。若未指定-O选项,则默认输出文件名称为SQLDiag.txt。此时,跟踪文件名称仍维持原先的blackbox.trc和blackbox_01.trc。若指定-O选项,则SQLDiag根据你配置的名称,重新命名跟踪文件blackbox.trc和blackbox_01.trc(例如,若output_file指定为MyDiagnostics.txt,跟踪文件将分别重新命名为MyDiagnostics.trc和MyDiagnostics_01.trc)。-X:排除错误日志文件。-M:执行DBCC堆栈打印(stackdump)。-C:抽取聚集信息。-19-金蝶K/3产品性能稳定性优化指导手册(辅助工具)执行范例如下:SQLDiag-E-Odiag.log通过–E参数,会以登录操作系统的账号登录SQLServer,而–Odiag.log参数则会产生名称为diag.log的输出。1.7性能监视器(PerformanceMonitor)WindowsNT之后所附的性能监视器是显示各种性能数据非常详尽的工具。你可以用它来观测服务器当前的运行,记录整个系统多台机器上的各种性能计数器,以找出整个系统的瓶颈。我们在性能调校的过程中会一再地用它。WindowsNT之后,就直接提供性能监视器(PerformanceMonitor),一般是用来查看、跟踪在整个系统中,是否有哪个部分显示资源不足的状态,或是系统的使用状况、演变的趋势等等。而性能计数器代表的是一种指针,它本身不是问题,某些背后隐含的问题导致该指针的变化。因此不要看到单一性能计数器的值就下定论,一定要建立推论:是什么原因导致该性能计数器有当前的值,若该原因是真的,那同时哪些性能计数器应该显示什么现象?而你当然应该再进一步分析与推论相关的计数器。性能监视器让你获得证据以完成: 支持自己的假设,或是推翻结论另寻原因。 获取计算机全盘的状态,让你可以发现计算机发生了什么状况(WHAT),而不是为何(WHY)或如何(HOW)发生这种状况。 抽取计算机变化的状态,有基线以供比较是非常重要的,它让你可以知道什么是正常,而什么不是。如果无法获取基线,则寻找记录中的变化,查看计数器相对的值而非绝对的值,并与先前的使用经验做一个比较。除了一般的硬件,如内存、硬盘、中央处理器乃至于网络等系统提供的性能计数器外,大部分微软提供的服务器软件在安装完毕后,也会注册它自身的性能计数器,而SQLServer会增加相当多类的性能计数器供你查核使用状况,而这些性能对象皆以“SQLServer:”开头。在要抽取性能的记录之前,尽量将不相关的、当前不需要的服务先停掉,如IIS,系统扫毒等等。如果需要调校的计算机可能会当机,则要采用远程记录,避免数据未记录到就挂了。相反地,若网络有问题,当然需要在本机完成记录。而一旦采用远程监控,要先同步两台机器的时间才好比对结果。你可以在命令提示窗口中,通过以下的命令同步系统之间的时间:NETTIME\\RemoteMachine/SET就SQLServer的使用特性来说,依其重要程度,观察硬件资源不足的顺序依序是:内存、硬盘、中央处理器乃至于网络。SQLServer是非常耗用内存的软件,因为它凡用过的数据必先留在内存中,除非资源不足,否则不轻易从缓冲区清掉,让数据库的运行尽量少使用硬盘。当内存不足时,会连带地影响硬盘和中央处理器。例如有新的数据要放到属性已满的缓冲区,则SQLServer内部负责将缓冲区属性更新到硬盘的LazyWriter程序就需要持续地执行,好更新缓冲区的数据,并释放较没有使用到的内存区块,这会同时让CPU与硬盘忙碌起来。也就是说,当CPU和硬盘性能不足时,有可能源头是内存不足造成的。磁盘子系统的性能不佳,也一定会让SQLServer性能好不起来,毕竟它需要大量读写存在硬盘上数据库内的数据。若你没钱购置RAID,最好也多买几颗硬盘,让Log文件、数据库文件以及Windows操作系统用做虚拟内存的交换文件分在不同的硬盘上,因为这三种文件的设计目的不同,存取的习性与频率也不同,当三者在同一颗硬盘上时,有可能因为多个-20-金蝶K/3产品性能稳定性优化指导手册(辅助工具)人存取数据库,有的做更新,有的查询,这些运行让操作系统要配置虚拟内存,因此硬盘要同时存取三种文件,这会导致磁头忙碌地移动,让硬盘的存取大多是随机读取,无法做循序读取,导致硬盘性能降低。因此建议将三种文件分别放在不同的硬盘上。硬盘的性能迟缓,必定导致数据库的查询与数据异动延迟(这两种动作分别是存取数据库文件与Log文件),这又造成事务要花较长的时间才能结束,进而让锁的资源无法释放,多人存取的系统彼此等待资源,进入大家都被延迟的惨况。CPU性能的重要性不用强调了吧,它慢,外围设备再快都没有用。但要注意的是,我们当前计算机的设计往往是中央处理器极快,但外围运行缓慢,导致CPU无法有效发挥它的能力。因此当考虑加强中央处理器时,要看看是否是周边设备的不足,导致CPU忙碌。一般来说,启动性能监视器后,只要记录信息而不需要做图。以较稳定的方式抽取计算机完整的状态,由于在事前你很难预料判断瓶颈时,会需要哪些数据,所以尽量记录所有的计数器5。如图3.5所示,除了通过默认的窗口观察系统当前的情况外,最好还要通过添加记录的方式,对系统作较长时间的监控。执行性能监视器时间要长到足以抓取到问题,一般粗略的配置纲要如下: 记录2小时–每4秒记录一次。 记录1天–每30秒记录一次。 记录1天–每180秒记录一次。活动中的图形只能显示瞬间的系统状况,长时间记录的数据才能看出趋势时间间隔不要小于4秒,以免记录这个动作本身就伤害计算机的性能,除非是要抽取磁盘I/O的性能,最高频率也勿超过每2秒记录一次。另外,为减轻对计算机长期的影响,若没有特殊需求,只要记录2小时就好。如果需要的话,执行'diskperf–y'以抽取磁盘的性能信息。初次记录时,在不伤及性能的前提下,仅可能地抽取所有的对象,供你对整个系统有一个全面性的概观。缩略表列一般要记录的对象如下(如果不可能取得全部对象):-21-金蝶K/3产品性能稳定性优化指导手册(辅助工具) Cache,memory,objects,pagingfile,physicaldisk,logicaldisk,process,thread,processor,server,system。 所有的SQLServer对象。 如果有网络相关的问题,所有与网络相关的对象(Protoc.