最新Sybase数据库性能调优
- 格式:doc
- 大小:79.50 KB
- 文档页数:22
sybase数据库慢的请留意数据库系统在当今的信息技术领域中发挥着重要作用,为各种应用程序的数据存储和管理提供支持。
然而,有时候我们可能会遇到Sybase数据库运行缓慢的问题。
本文将讨论一些可能导致Sybase数据库变慢的原因,并提供一些解决方案和优化策略。
一、索引设计不合理索引在数据库中起到加速查询操作的作用。
然而,当索引设计不合理时,可能会导致数据库查询变慢。
比如,过多的索引会增加数据库维护的负担,而过少的索引则会导致查询性能下降。
解决方案:对数据库进行分析,评估每个表的查询模式和频率,并根据这些信息,合理地设计索引。
避免创建过多冗余的索引,以免影响数据库性能。
二、存储空间不足Sybase数据库的存储空间管理对数据库的性能和稳定运行至关重要。
当存储空间不足时,数据库的读写操作会变慢。
此外,如果没有进行定期的空间清理,数据库中存储的日志文件会不断增长,进一步导致数据库性能下降。
解决方案:定期监控数据库的存储空间使用情况,合理规划并扩展存储空间。
同时,设置定期的空间清理任务,删除过期的日志文件等。
三、查询语句不优化编写高效的查询语句是提高数据库性能的关键。
当查询语句没有经过充分优化时,可能会导致数据库响应变慢。
解决方案:对于复杂的查询语句,使用Sybase提供的查询优化工具(如Explain Plan)进行分析,找出影响查询性能的因素,并进行优化。
避免使用不必要的子查询或者多次嵌套的查询操作。
四、硬件性能问题数据库的性能受到硬件的限制。
如果数据库运行在低配置的硬件环境下,可能会导致数据库响应变慢。
解决方案:评估数据库运行所在的硬件环境,确保硬件配置满足数据库的需要。
如果硬件配置有限,可以考虑升级硬件或者将数据库迁移到更高配置的服务器上。
五、数据库统计信息不准确数据库需要根据统计信息来优化查询执行计划。
如果数据库的统计信息不准确或者过期,会导致数据库查询慢。
解决方案:定期更新数据库的统计信息,以提高查询的准确性和效率。
SYBASE系统参数调整1. max memory:此参数用于指定SYBASE数据库服务器在计算机中使用的最大内存量。
通过将此参数设置为较大的值,可以提高该数据库服务器的性能。
如果可用的内存较少,则应适当减小此值。
2. number of engines:此参数用于指定SYBASE数据库服务器使用的引擎数量。
增加此参数的值可以提高并发访问性能。
然而,将该值设置得太高可能会浪费资源。
一般来说,使用与服务器CPU数量相同的值是安全的做法。
3. max scan parallel degree:此参数用于指定SYBASE数据库服务器执行并行扫描时使用的最大并行度。
通过将此参数设置为较大的值,可以提高并行扫描的性能。
4. sys statistics:此参数用于指定数据库服务器在自动生成查询计划时使用的统计信息的有效期限。
适当设置此参数的值可以提高查询性能。
默认情况下,此参数的值设置为30天。
5. max degree of parallelism:此参数用于指定SYBASE数据库服务器在执行并行查询时使用的最大并行度。
增加此参数的值可以提高查询性能。
然而,将该值设置得太高可能会增加系统负载。
6. max worker processes:此参数用于指定SYBASE数据库服务器使用的最大工作进程数量。
适当增加此参数的值可以提高并发性能。
默认情况下,此参数的值设置为255,但在大型服务器上,可能需要适当增加此值。
7. tempdb设备数:tempdb是SYBASE数据库服务器用于处理临时数据的数据库。
将tempdb数据库分配到多个设备上可以提高临时数据处理的性能。
8. prefetch parallel degree:此参数用于指定SYBASE数据库服务器在执行预取操作时使用的并行度。
适当增加此参数的值可以提高查询性能。
9. max rows per stack:此参数用于指定SYBASE数据库服务器在语句执行期间允许的最大行数。
Sybase数据库性能优化研究摘要:文章从Sybase数据库性能优化的重要性出发,进而论述了Sybase数据库优化的方针,最终对Sybase数据库性能优化进行了重点的探究。
关键词:Sybase数据库;性能优化;研究1.前言由于企业的不断发展,对数据的管理由开始的文档管理到现在的专门的数据库管理软件,我们对数据的要求越来越高,不但要确保数据的安全,还要访问数据访问的速度,数据库中数据的性能直接影响到系统的性能,所以了解数据的性能对访问数据的访问速度及数据的检查是有利的。
2.Sybase数据库性能优化的重要性由于科学技术的不断发展,计算机技术已广泛运用于我们生活的方方面面。
计算机系统在中国各行各业中发挥着重要作用,大大提升了大家的管理效率和水平,是中国经济基础建设和发展的强大动力。
为了确保业务的正常发展,降低系统的硬件投入,管理人员需求不断的对系统进行改善,并对数据库系统进行优化。
Sybase数据库是一种根据客户/服务器系统结构的数据库,布置和运转于操作系统中,用于大型数据库的构建和管理。
根据运用条件和实践需求,我们需求对Sybase数据库系统的各个层面进行优化,使其各个性能指标得到访问。
3.Sybase数据库优化的方针3.1访问数据吞吐量吞吐量的计算方法是数据库系统处理的业务量除以时间。
为了实现访问吞吐量的方针,一般选用两种方法,一种是在同样的资源条件下处理完成更多的业务,一种是增加资源,从而使系统完成一样业务工作量时所用的时间缩短。
在数据库优化范畴,联机业务处理对吞吐量的重视度较高,联机业务处理要实时地对很多的数据进行处理,高吞吐量有助于访问系统的处理能力。
3.2缩短系统呼应时间系统的呼应时间是指用户宣布操作套去,到系统将呼应套去的成果展示给用户之间的时间距离。
某些数据库系统能够完成高吞吐量,但这一性能只标明系统的业务处理能力,而系统的呼应时间是影响到用户运用体会的重要因素。
3.3访问多用户访问能力Sybase数据库管理系统一般要在同一时间为多个用户供给数据管理服务,而用户的规划由于实践运用的不一样而各异。
sybase 性能优化经验谈使用sybase数据库多年,有些经验,在数据库部署配置得当,平时监控维护做到位情况下,除此之外数据库的性能问题80%将会是由sql语句引起。
在编写sql语句时候,个人经验,以下几个问题中有大部分跟编写sql有关,必须引起重视。
经验一、where 条件左边最好不要使用函数,比如:select ... where datediff(day,date_column,getdate())>0这样即使在date_column列上建立了索引,也可能不会使用索引,而使用全表扫描。
这样的语句要重新规划设计,保证不使用函数也能够实现。
通过修改,一个系统过程的运行效率提高大约几十倍甚至上百倍!此外不要使用诸如like '%ab',不能充分利用索引,而要在%前加字符。
经验二、两个比较字段最好使用相同数据类型,而不是兼容数据类型。
比如int 与numeric(感觉一般不是太明显)。
经验三、复合索引的非前导列做条件时,基本没有起到索引的作用。
比如create index idx_tablename_ab on tablename(a,b)update tablename set c = XX where b>= XXX and ...在这个语句中,只用了索引列b而没用索引列a做查询条件,基本上索引没有发挥作用。
导致表扫描引起blocking 甚至运行十几分钟后报告失败。
一定要认真检查改正措施:在接口中附加条件update tablename set c = XX where a = XXX and b>= XXX或者建立索引类似于create index idx_tablename_ba on tablename(b,a)经验四、多个大表的关联查询,如果性能不好,并且其中一个大表中取的数据比较少,可以考虑将查询分两步执行。
先将一个大表中的少部分数据select * into #tmp from large_tablewhere ...然后再用#tmp 去做关联,效果可能会好不少。
Sybase数据库性能优化的具体过程用一个实例讲解了Sybase数据库性能优化的具体过程,具体内容请参考下文:共享锁sp_getapplock 锁定应用程序资源sp_releaseapplock 为应用程序资源解锁SET LOCK_TIMEOUT 1800 锁超时期限设置sp_configure 'deadlock checking period',5000 设置锁检测周期sp_configure 'lock wait period',5000 设置锁的等待时间sp_setrowlockpromote 设置基本个表的最大行锁升级数(锁数)sp_setrowlockpromote 'TABLE',TREECODE,500,500,100sp_setrowlockpromote 'TABLE',LCD05,500,500,100[Lock Manager]number of locks = 50000 #锁数deadlock checking period = DEFAULTfreelock transfer block size = DEFAULTmax engine freelocks = DEFAULTlock spinlock ratio = DEFAULTlock hashtable size = DEFAULTlock scheme = DEFAULTlock wait period = DEFAULTread committed with lock = DEFAULT当很多事务同时访问同一个数据库时,会加剧锁资源争夺,严重时事务之间会发生死锁。
可用sp_object_stats查明死锁位置。
该过程报告资源争夺最激烈的10张表、一个数据库中资源争夺的表和单个表的争夺情况。
语法为sp_object_stats interval [, top_n [, dbname [, objname [, rpt_option ]]]],查看锁争夺情况只需设置interval为“hh:mm:ss”。
Sybase数据库优化建议书修改记录主要针对sybase12.0和sybase sybase12.5一、操作系统核心参数Sybase12.0下面以使用操作系统管理员root用户身份,运行sam管理工具调整共享内存参数及共享内存段选择Kernel Configuration → Configurable Parameters→使用File菜单下的Search功能搜寻shmmax 参数,调整参数值为1024×1024×1400=1468006400(约1.4G),shmseg 参数使用默认值120 →退出返回sam上一级界面,在弹出的提示框中选择Defer Kernel Creation Until Later调整操作系统异步IO参数Kernel Configuration → Configurable Parameters→将swapmem_on参数设置为0 Kernel Configuration →选择Drivers项目→找到asyndsk →选择菜单上Action项目下的Add Driver(s) to Kernel,这是能够看到asyndsk 驱动程序Pending Status由out 变成了in。
重新启动HP主机,并在启动完毕后确认所配置参数已经生效。
设置操作系统异步IO使用root用户发出如下命令:/etc/mknod /dev/async c 101 4chmod 0660 /dev/asyncchown sybase:sybase /dev/async在操作系统/sbin/rc3.d目录下建立名为S700dsync脚本文件,或者在双机切换脚本的start.sh(/etc/cmcluster/pkg1/start.sh、/etc/cmcluster/pkg2/start.sh)中加入,内容如下/etc/setprivgrp sybase RTPRIO MLOCK CHOWN这个命令使操作系统重新启动后sybase用户仍然能够正常拥有async文件使用权限,确保数据库设备能够使用异步IO。
目录1性能监控 (2)1.1操作系统性能监控 (2)1.2数据库性能监控例程 (2)1.3使用Sybase Cenral性能监控器监控 (2)2数据库参数调优 (3)2.1SybaseIq 12.7 建议设置选项 (3)2.2SybaseIq服务参数说明 (3)2.3文件存放 (4)3数据加载调优 (5)3.1推荐办法 (5)3.2装载数据时提示虚拟内存不足 (5)3.3使用union all 视图以便更快装载 (5)3.4单行处理 (5)4其它调优 (5)4.1选择合适的数据类型 (5)4.2无符号数据类型 (6)4.3性能优化选项 (6)1性能监控1.1操作系统性能监控使用如下命令对操作系统进行性能监控●vmstat●sar●topas●ps1.2数据库性能监控例程●sp_iqconnection 显示连接用户和版本●sp_iqcontext 显示运行参数●sp_iqspaceinfo 输出数据库对象使用空间情况●sp_iqstatus 数据库各种信息展现●sp_iqtablesize 输出制定表的大小●sp_iqgroupsize 输出指定成员如何获得Sybase IQ系统存储过程呢,我们使用select * from sysobjects where name like 'sp_iq%';返回结果中“name”列中显示为系统存储过程,我们可以研究其它的存储过程的含义1.3使用Sybase Cenral性能监控器监控可以按照如下所示使用Sybase Central监控服务器的统计信息。
●选择服务器●在“Statisticcs”选项卡上,右键单击名称并选择“Add to Performance Monitor“●单击“Performance Monitor“选项卡。
Sybase Central 仅跟踪从一个快照到下一个快照的差异,因此,在性能监视器中某些所选统计信息可能显示为无活动。
Sybase数据库优化技术和方法Sybase数据库优化技术和方法Sybase数据库是一种高性能、高可靠性的关系型数据库管理系统,广泛应用于各种数据密集型应用程序中。
然而,随着应用程序的日益复杂和数据量的不断增加,Sybase数据库的性能问题也逐渐突显,影响了应用程序的稳定性和响应速度。
因此,对Sybase数据库进行优化是非常必要的。
本文就Sybase数据库的优化技术和方法进行了介绍。
1.查询优化技术查询优化是Sybase数据库优化的重要方面。
对于大量的查询语句,使用正确的优化技术可以大大提高查询性能。
(1)使用索引索引是数据库优化中最常用的技术之一。
通过在表上建立索引,可以加快查询操作的速度,减少数据库服务器的 I/O 操作。
Sybase数据库支持 B-tree、Hash 和 Bitmap 等多种索引类型。
对于不同的查询需求,选择最合适的索引类型可以提高查询性能。
(2)尽量减少复杂查询语句Sybase数据库支持各种查询语句,但是复杂查询语句会使查询时间大大延长,降低数据库性能。
在设计查询语句时,尽量简化语句结构,减少嵌套子查询,避免过多的计算和连接操作。
(3)优化关联查询关联查询是数据库操作中常见的操作,但是不正确的关联查询操作会导致数据库性能下降。
在进行关联查询时,应根据具体情况选择合适的关联方式,如左联接、右联接、全联接等。
2.数据存储优化技术数据存储也是Sybase数据库优化的重要方面。
对于大量的数据存储需求,使用正确的优化技术可以大大提高存储性能。
(1)选择正确的存储引擎不同的存储引擎有不同的优劣点,应根据具体情况选择合适的存储引擎。
Sybase数据库支持多种存储引擎,如 MyISAM 和InnoDB 等。
(2)使用分区表分区表是Sybase数据库中的一种高效存储技术,可以将数据按照一定规则分散到不同的存储区域中,从而提高数据库的性能和可用性。
在设计表结构时,应尽量使用分区表。
(3)定期清理过期数据过多的历史数据占用了数据库的存储空间,降低了数据库的性能。
S y b a s e数据库性能调优Sybase数据库性能调优1.5用sp_sysmon可以得到数据库系统的性能基准报告,但要在比较稳定的状态下产生,方可作为参考和对照的依据。
1.6 理解存储方法只有清楚数据库存储数据的底层细节,如数据页、索引页的物理结构,每一行的大小计算,不同类型列占用的宽度等等问题,才能对各种调优措施有个深入领会。
关于这个问题,比较复杂和细致,请自行参阅有关书籍。
一般地,对于更改数据的操作,要尽量促进数据库进行直接更新( Direct Updates ),所以要遵守以下几条原则:1)除非必要,避免使用允许null值的列和可变长度的列。
2)如果varchar 和varbinary 列填充得比较满,毫不犹豫转成 char 和binary 列。
对于建表时指定的页填充率(page fillfactor)参数,要权衡确定数值大小。
一般:小值,适合于有许多随机插入的表,该表的数据经常被删除,又经常被增加;大值,适合于大多数的数据被增加到表末尾,如客票系统的售票存根和退票存根表。
2 SQL Server级的调优2.1 管理共享内存数据库性能优化的首要方面是最优管理内存。
数据库占用的共享内存分成数据缓冲(data cache)、存储过程缓冲(Procedure cache)等几块。
在isql 下使用 sp_configure 'cache' 可以看到存储过程缓冲所占百分比(procedure cache percent),整个数据缓冲大小(total datacache size)等参数。
2.1.1 存储过程缓冲(Procedure cache)存储过程缓冲保持以下对象的查询计划:Procedures :存储过程Triggers :触发器Views :视图Rules :规则Defaults :缺省Cursors :游标存储过程不可重入,意即每个并发用户调用都会在内存中产生一个拷贝。
Procedure, triggers, and views 当它们被装载到procedure cache中时,被查询优化器优化,建立查询计划。
如果存储过程在缓冲中,被调用时就不需要重新编译。
如果procedure cache太小,存储过程就会经常被其他调入内存的存储过程冲洗掉,当再次被调用时,存储过程又被调入内存,再重新编译,用户请求因此不得不等待。
最严重的情况,如果procedure cache不够,存储过程甚至都不能运行。
所以在内存足够的情况下,procedurecache percent 参数尽可能大一些。
2.1.2 数据缓冲(Data Cache)数据缓冲用来缓存数据页和索引页,是除去存储过程缓冲,系统其他占用的缓冲外的剩余内存空间。
通过给服务器增加物理内存扩大数据缓冲,是最有效的方法。
当然,如果不能加内存,就只能通过减少存储过程缓冲的比例等方法来扩大数据缓冲了。
通过 sp_configure "extent I/O buffers", 20(可调)命令,在Data Cache中保留一些页专用于创建索引时使用,可以显著提高创建索引的性能。
但要注意每开辟一个缓冲占用16K 字节的系统内存。
2.1.3 命名缓冲通过如下的命令:1> sp_helpcache2> go查看某客票数据库中命名缓冲,得到的结果如下:Cache Name Config Size Run Size Overhead------------------------------------- ---------- ----------DS30_Tran_Log 20.00 Mb 20.00 Mb 2.05 MbSystemtable 20.00 Mb 20.00 Mb 2.05 Mbdefault datacache 0.00 Mb 4462.86 Mb 464.97 Mbleft_base_center 16.00 Mb 16.00 Mb 1.57 Mbprice_cache 8.00 Mb 8.00 Mb 0.85 Mb可以看出有4个命名缓冲,分别绑定客票系统的应用日志表、一些重要且常用的系统表、余票表、票价系列表,另外1个是缺省数据缓冲。
这种配置还不是最合理,应该进一步把Systemtable这个命名缓冲细分成很多个,每一个单独存放一张系统表。
2.1.4 缓冲策略缓冲策略是指把数据提前读入内存的机制,分预取策略(Prefetch Strategy,即大I/O策略)和取后马上丢弃策略(Fetch-and-Discard)、提示策略(Hints)等几种。
可以在三个级别上设置表数据的预取策略(Prefetch Strategy,即大I/O策略)于:对象级,会话级,查询级。
如果三个级别上都有设置,它们发生作用的优先顺序是:对象级> 会话级 > 查询级。
对于如何在查询级利用指定的缓冲池,可以查看下面例子(使用4K缓冲池):select au_fname,au_lnamefrom authers(prefetch 4)where au_id in (A372020631, ..., A1887081515 )goDSS应用往往得益于大的I/O,应该放开large I/O strategy预取策略。
如果一个应用倾向于OLTP特征,用户能在会话级关掉Prefetch来提高性能。
对于OLTP应用,关闭large I/O strategy预取策略。
对于所取到的页不会有重用的情况,放开fetch-and-discard策略。
客票系统对存根数据进行统计的应用,如财收日结账,营销分析数据整理模块和综合查询等,都可以利用这一结论。
查看几个操作频繁且较大的表上的缓冲策略,用如下命令:sp_cachestrategycenter,seat_areasp_cachestrategycenter,sale_record05052.2 管理锁2.2.1 页锁升级阀限优化锁的重要考虑是设置页级锁升级升级成表级锁的阀限。
要尽量避免页锁很快升级成表级锁。
在某客票数据库中,用sp_configure ‘lock’可以看到如下结果:deadlock checking period 500 0 1000 1000number of locks 5000 46875 200000 200000page lock promotion HWM 200 0 10000 10000page lock promotion LWM 200 0 200 200page lock promotion PCT 100 0 90 90可以看到页锁升级的阀限有三个: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, new_hwm, new_pct。
如果要删除掉对象级上的页锁升级阀限,用:sp_dropglockpromote{"database" | "table"}, objname2.2.2 减少锁争夺的方法:1)降范式设计数据库,创建冗余表。
2)把堆表(没有聚族索引的表)分区。
3)对于小表,使用fillfactor和max_rows_per_page来减少行密度,从而使各行数据分布到许多页(此方法适用于SQLServer 11版,对于11.9.2版以后的Sybase数据,有了行级锁,此方法必要性不大)。
2.3 管理临时库(tempdb)管理临时库一个重要原则是要避免临时表跨多个设备,可以把tempdb从master设备中分离出来,放到一个单独的设备上去。
这样可以减少存取系统表时对I/O资源的争夺。
用sp_dropsegment 存储过程从master设备中移除tempdb的default段和system段。
为了进一步提高tempdb的I/O速度,可以考虑把tempdb整个放在RAM 驱动器或固态存储设备上,存取速度是一般磁盘的1000倍。
一般情况下,tempdb会非常频繁地争夺和占用缺省数据缓冲,因为查询会话中有许多临时表要创建、计算和删除。
所以推荐把tempdb绑定到它自己的命名缓冲,这样可以防止临时对象在内存中的活动冲洗掉缺省数据缓冲中的其他对象,利于在多个缓冲间展开I/O。
在使用临时表的时候,还有一个原则:尽量缩小表规模和行的宽度,每一行只包括必要的列。
例如在用select * into生成临时表时,如果只需要几个列的数值,就不要用这样的语句,而直接选取需要的列。
2.4 使用多引擎(MultipleNetwork Engines)如果操作系统使用了多个CPU,那么用sp_configure 配置数据库的参数:在线引擎数(max online engines),可以扩展系统的网络I/O容量,分布网络I/O 到各个引擎,从而提高性能,允许更多的用户连接。
在用户登录数据库时,总是先登录到引擎0,由引擎0在可用引擎队列中选择一个挂最少连接的引擎来传递socket描述符,从而重定向连接到那个引擎,由该引擎去处理跟此用户连接相关的所有网络活动。
对于多引擎SMP结构,SQL Server引入了自旋锁(spinlock)的一种数据结构,在多个引擎间共享。
对于不同类型的任务,在哈希表上分配不同的自旋锁,有页锁自旋锁、表锁自旋锁和地址自旋锁。
自旋锁的配置:sp_configure"page lock spinlock ratio", newvalsp_configure"table lock spinlock ratio", newvalsp_configure"address lock spinlock ratio", newval增大数值,可以减少碰撞,提高并发操作度。
但是每一个自旋锁结构要占用256字节的内存。