您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Sybase数据性能调优
Sybase数据库性能调优广铁集团电算信息中心王奇成,张南飞引言铁路客票系统经过多次的技术改进,版本已经升级到4.0,现已能够比较全面充分地满足和适应客票发售和预订的需求,是铁路运输管理信息系统中的重点。客票系统结构上分成铁道部、地区中心和车站三级,技术上采用Sybase数据库,Unix操作系统,前台应用采用PB和BO等开发,是典型的Client-Server应用,但又采用了自行开发的中间件作连接交易处理和数据库通信,具有较强的复杂性。对于遍及全路大小车站,统管全路客票发售的这样一个庞大生产系统,影响举足轻重。尤其是节假日铁路售票高峰期里,大到地区中心,小到车站,只要客票主机一有故障,造成停机,便会直接影响售票,极大地减少铁路运输收入。在多年的客票系统建设和维护中,深深体会到客票系统对Sybase数据库资源的方方面面的要求,Sybase数据库性能对客票系统至关重要的影响。现在,全路的客票系统出现一种数据集中的趋势,大站带小站,多站合并,票额集中到地区中心,这样,数据库的规模便越来越大,可用性要求越来越强。如何深入调整Sybase数据库的性能,保证数据库的高可用性,来满足日益增长的客票网络的需求,尤其在过年过节等客运高峰期之需要,是每一个地区中心和每一个车站的数据库管理员的重要课题。本文结合客票系统,对如何调整优化Sybase数据库的性能做个较深入的论述。1概述1.1性能指标数据库性能一般用两个方面的指标来衡量:响应时间和吞吐量。响应越快,吞吐量越大,数据库性能越好。响应时间和吞吐量有些情况下不能一起得到改善。1.2调优级别对Sybase数据库性能调优,可以从四个方面进行:一)操作系统级:对网络性能、操作系统参数、硬件性能等作改进。二)SQLServer级:调整存取方法,改善内存管理和锁管理等。三)数据库设计级:采用降范式设计,合理设计索引,分布存放数据等。四)应用程序级:采用高效SQL语句,合理安排事务,应用游标,处理锁。本文对第一方面的内容不做讨论,第二方面提到的概念只适用于Sybase数据库,但第三、第四方面讨论的问题同样适用于Sybase外的其他数据库。以上各个方面的措施是相互牵连的,具体到解决一个性能问题,有时候要综合应用。1.3调优工具在分析Sybase数据库的性能时,要用到一些数据库系统本身提供的性能调优工具,包括几个系统存储过程:名称功能简要介绍sp_sysmon企业级系统性能报告工具sp_lock查看锁的情况sp_who查看线程的活动情况sp_procqmode存储过程的查询处理模式sp_configure配置SQLServer系统级参数sp_estspace估计创建一个表需要的空间和时间sp_spaceused估计表的总行数及表和索引占用的空间sp_monitor监视CPU、I/O的统计活动情况在利用isql等一些工具时,还可以设置查询会话中的几个选项,来显示SQL语句执行时的各种统计分析结果:指令On的含义setnoexecon/off分析SQL语句后,还要执行setstatisticsioon/off统计SQL执行所需I/Osetstatisticstimeon/off统计SQL语句执行耗时setshowplanon/off显示查询计划1.4sp_sysmon的使用企业级性能报告工具、系统存储过程sp_sysmon的使用方法:在isql下,首先输入sp_sysmon'begin_sample'启动一个报告采样过一段时间后,再输入sp_sysmon'end_sample'结束上次报告采样或者紧跟一参数sp_sysmon'end_sample',dcache结束上次报告采样,但只显示数据缓冲(DataCacheManagement)这一部分的情况。能替换dcache的可选参数如下表所示:参数参数全称,内容范围解释DcacheDataCacheManagement,数据缓冲KernelKernelUtilization,有关引擎、网络和I/O等情况WpmWorkerProcessManagementParallelParallelQueryManagementTaskmgmtTaskManagementAppmgmtApplicationManagementEspESPManagementHousekeeperHousekeeperTaskActivityMonaccessMonitorAccesstoExecutingSQLXactsumTransactionProfileXactmgmtTransactionManagementIndexmgmtIndexManagement,索引管理MdcacheMetadataCacheManagementLocksLockManagement,锁管理PcacheProcedureCacheManagementMemoryMemoryManagementRecoveryRecoveryManagementDiskioDiskI/OManagement,磁盘I/O管理NetioNetworkI/OManagement1.5用sp_sysmon可以得到数据库系统的性能基准报告,但要在比较稳定的状态下产生,方可作为参考和对照的依据。1.6理解存储方法只有清楚数据库存储数据的底层细节,如数据页、索引页的物理结构,每一行的大小计算,不同类型列占用的宽度等等问题,才能对各种调优措施有个深入领会。关于这个问题,比较复杂和细致,请自行参阅有关书籍。一般地,对于更改数据的操作,要尽量促进数据库进行直接更新(DirectUpdates),所以要遵守以下几条原则:1)除非必要,避免使用允许null值的列和可变长度的列。2)如果varchar和varbinary列填充得比较满,毫不犹豫转成char和binary列。对于建表时指定的页填充率(pagefillfactor)参数,要权衡确定数值大小。一般:小值,适合于有许多随机插入的表,该表的数据经常被删除,又经常被增加;大值,适合于大多数的数据被增加到表末尾,如客票系统的售票存根和退票存根表。2SQLServer级的调优2.1管理共享内存数据库性能优化的首要方面是最优管理内存。数据库占用的共享内存分成数据缓冲(datacache)、存储过程缓冲(Procedurecache)等几块。在isql下使用sp_configure'cache'可以看到存储过程缓冲所占百分比(procedurecachepercent),整个数据缓冲大小(totaldatacachesize)等参数。2.1.1存储过程缓冲(Procedurecache)存储过程缓冲保持以下对象的查询计划:Procedures:存储过程Triggers:触发器Views:视图Rules:规则Defaults:缺省Cursors:游标存储过程不可重入,意即每个并发用户调用都会在内存中产生一个拷贝。Procedure,triggers,andviews当它们被装载到procedurecache中时,被查询优化器优化,建立查询计划。如果存储过程在缓冲中,被调用时就不需要重新编译。如果procedurecache太小,存储过程就会经常被其他调入内存的存储过程冲洗掉,当再次被调用时,存储过程又被调入内存,再重新编译,用户请求因此不得不等待。最严重的情况,如果procedurecache不够,存储过程甚至都不能运行。所以在内存足够的情况下,procedurecachepercent参数尽可能大一些。2.1.2数据缓冲(DataCache)数据缓冲用来缓存数据页和索引页,是除去存储过程缓冲,系统其他占用的缓冲外的剩余内存空间。通过给服务器增加物理内存扩大数据缓冲,是最有效的方法。当然,如果不能加内存,就只能通过减少存储过程缓冲的比例等方法来扩大数据缓冲了。通过sp_configureextentI/Obuffers,20(可调)命令,在DataCache中保留一些页专用于创建索引时使用,可以显著提高创建索引的性能。但要注意每开辟一个缓冲占用16K字节的系统内存。2.1.3命名缓冲通过如下的命令:1sp_helpcache2go查看某客票数据库中命名缓冲,得到的结果如下:CacheNameConfigSizeRunSizeOverhead---------------------------------------------------------DS30_Tran_Log20.00Mb20.00Mb2.05MbSystemtable20.00Mb20.00Mb2.05Mbdefaultdatacache0.00Mb4462.86Mb464.97Mbleft_base_center16.00Mb16.00Mb1.57Mbprice_cache8.00Mb8.00Mb0.85Mb可以看出有4个命名缓冲,分别绑定客票系统的应用日志表、一些重要且常用的系统表、余票表、票价系列表,另外1个是缺省数据缓冲。这种配置还不是最合理,应该进一步把Systemtable这个命名缓冲细分成很多个,每一个单独存放一张系统表。2.1.4缓冲策略缓冲策略是指把数据提前读入内存的机制,分预取策略(PrefetchStrategy,即大I/O策略)和取后马上丢弃策略(Fetch-and-Discard)、提示策略(Hints)等几种。可以在三个级别上设置表数据的预取策略(PrefetchStrategy,即大I/O策略)于:对象级,会话级,查询级。如果三个级别上都有设置,它们发生作用的优先顺序是:对象级会话级查询级。对于如何在查询级利用指定的缓冲池,可以查看下面例子(使用4K缓冲池):selectau_fname,au_lnamefromauthers(prefetch4)whereau_idin(A372020631,...,A1887081515)goDSS应用往往得益于大的I/O,应该放开largeI/Ostrategy预取策略。如果一个应用倾向于OLTP特征,用户能在会话级关掉Prefetch来提高性能。对于OLTP应用,关闭largeI/Ostrategy预取策略。对于所取到的页不会有重用的情况,放开fetch-and-discard策略。客票系统对存根数据进行统计的应用,如财收日结账,营销分析数据整理模块和综合查询等,都可以利用这一结论。查看几个操作频繁且较大的表上的缓冲策略,用如下命令:sp_cachestrategycenter,seat_areasp_cachestrategycenter,sale_record05052.2管理锁2.2.1页锁升级阀限优化锁的重要考虑是设置页级锁升级升级成表级锁的阀限。要尽量避免页锁很快升级成表级锁。在某客票数据库中,用sp_configure‘lock’可以看到如下结果:deadlockcheckingperiod500010001000numberoflocks500046875200000200000pagelockpromotionHWM20001000010000pagelockpromotionLWM2000200200pagelockpromotionPCT10009090可以看到页锁升级的阀限有三个:HWM(最高点)为10000,LWM(最低点)为200,PCT为90。Sybase数据库内部根据PCT值按公式PCT*TAB_SZ/100得出计算阀限,如果计算阀限LWM,锁升级发生在LWM值;如果计算阀限HWM,锁升级发生在HWM值。如果LWM计算阀限HWM,锁升级发生在PCT*TAB_SZ/100值。锁升级阀限设置分对象级和服务器级两种。针对对象级设置(数据库上的表或表上的索引),配置命令是:sp_setpglockpromote{database|table},objname,new_lwm,new_hwm,new_pct针对服务器级设置,配置命令是:sp_setpglockpromoteserver,NULL,new_lwm,
本文标题:Sybase数据性能调优
链接地址:https://www.777doc.com/doc-3220472 .html