系统性能调优

名词解释

1.    性能是用来度量应用效率的指标:

2.    性能的度量方法:

1)  响应时间 :单个应用程序的执行时间

2)  吞吐量 :单位时间内所处理的事务个数

 

一、            网络级调优

1.               使用存储过程以减少总体通信量

2.               数据应进行过滤,以避免大批量的传送

应用程序应只请求需要的行和列,应在服务器端过滤掉尽可能多的数据以减少需要发送的包的数目。在许多情况下,这还可减少磁盘I/O负载。

3.               可以根据应用的需要配置适合网络包大小。OLTP:小包, OLAPDSS:大包

4.               通过对网络的流量、瓶颈和速度的分析,对网络参数的优化:

5.               对负载大的网络进行隔离,即:把网络使用多的用户和网络使用少的用户分开

6.               在应用中限制大的网络负载请求

二、            在操作系统级的优化

1.               是否有足够的系统I/O

1)单个硬盘速度

2)总带宽是否大于并行硬盘带宽总和

2.               是否有足够的物理内存

1)是否有大量页交换(swapping)

2)考虑是否有SYBSAE数据库服务器所需的足够内存

三、            对数据库服务器参数配置策略优化

1)  内存管理

数据库占用的共享内存分成存储过程缓冲区(Procedure Cache)、数据缓冲区(Data Cache)、命名缓存等几部分

(1)    存储过程缓冲区(Procedure Cache

l        存储过程缓冲区保存有以下对象的查询计划:存储过程、触发器、视图、规则、缺省、游标等。存储过程不可重入,即每个并发用户调用都会在内存中产生一个拷贝。

l        当存储过程、触发器、视图被装载到存储过程缓冲区时,被查询优化器优化,建立查询计划。如果存储过程在缓冲区中,被调用就不需要重新编译。如果存储过程缓冲区太小,存储过程就会经常被其他调入内存的存储过程覆盖掉,当再次被调用时,存储过程又被调入内存,再重新编译,用户请求因此不得不等待。最严重的情况,如果存储过程缓冲区不够,存储过程甚至都不能运行。所以在内存足够的情况下,存储过程缓冲参数应尽可能大一些。

(2)    数据缓冲区(Data Cache

l        数据缓冲区用来缓存数据页和索引页,给服务器增加物理内存以扩大数据缓冲区,是提高数据库性能最有效的方法。当然,如果不能增加内存,就只能通过减少存储过程缓冲区的比例等方法来扩大数据缓冲区了。

(3)    命名缓存是为特定对象分配给一定的内存空间,使得该对象能够始终享用这部分内存资源而不受其他对象对资源竞争的影响

2)  锁策略

(1)              ASE是为了保证在多用户环境下数据一致性,但它又降低了并发性,所以说锁对系统性能是有影响的,最严重的情况是死锁。

(2)              锁优化最重要的工作是设置页级锁升级成表级锁的阀限。要尽量避免页锁很快升级成表级锁,同时减少锁的争夺。

(3)              不要在无意义ID上加聚簇索引,以避免在同一页的锁竞争

(4)              在满足应用需求的情况下,尽量降低锁级别

3)  数据库存储设备的存储策略的优化

(1)    为了改善数据库的性能,设备的优化也必不可少。把最常插入的表分区放在多个设备上,这样可以创建多个页链,从而改善多个并发插入时的性能,因为每一个插入都要找到页链,页链有多个,就允许多个插入同时进行。

(2)    物理I/O的代价远大于逻辑I/O,所以要尽量减少磁盘进行物理I/O的次数,尽量多进行内存中的逻辑I/O可以配置使用大的I/O来减少物理I/O的次数,

(3)    设备上的存储数据策略,就是把对象以合适的方式分配到设备上,以减少磁盘竞争和利用并行I/O,如:

l        表和索引分开到不同的磁盘。

l        数据设备和日志设备分开

(4)    增加tempdb的空间

四、            数据库优化策略

1)  数据库表结构设计模式的权衡

(1)    应用的类型分为OLTPOLAP两类,而支撑这两类应用的数据的特点是不同的,前者为操作型数据,后者为分析型数据,这两类数据是需要不同的存储策略进行存储的

(2)    对于OLTP的应用,在数据库的基础理论中,倡导使用规范化的数据库设计方法,简称范式设计。

l        用范式来设计数据库,可以减少数据冗余度,减少插入、更新和删除异常,也可以提高性能。

l        但是有时为了提高某些特定的性能,有意打破范式设计,这样可以达到最好的效果。但这种情况下,一定要注意数据完整性维护的问题。

l        降范式设计这种方式一般可以提高检索速度,但会略微降低数据修改性能。对于应用开发来说,有些情况下,降范式设计还能简化应用程序的编码。

l        具体而言,降范式设计一般能带来如下好处:减少表连接的需要,减少外部键和索引,减少表的数量,聚合列可以预先计算等。

(3)    规范设计:3NF

l        优点:小表,数据一致性维护容易

l        缺点:表连接操作多,程序复杂性高

(4)    非规范化:增加冗余列、派生列、分表、合表、重复表

l        优点:性能高、编程复杂性降低

l        缺点:数据一致性维护困难、会浪费磁盘空间

(5)    有如下方法可以实现降范式设计:

l        增加冗余列。

l        增加导出列,从一个或多个表的几个列中导出另外一个列。

l         收拢表,几个表合成一个表。

l        复制表,即制作表的副本。

l        将表分开, 分为垂直和水平两种。

水平分开可以考虑把表中不太活跃的数据放置在一个表中,而把经常变动的数据放在另外一个表中。垂直分开则是把多个列分成几组,每一组列成一个表。

(6)    是否要采用降范式设计,必须根据具体应用综合考虑。这种设计理念往往紧密结合具体应用,和应用的相关度很高,所以要求数据库分析员兼具业务分析员的角色。

2)  将数据划分为当前数据和历史数据,有助于当前系统操作的性能

3)  采用阈值机制能控制空间的膨胀或起一定的预警作用

4)  索引

(1)    查询条件和索引的配合使用,对SQL语句的性能至关重要。下面是两种常见的情况:

l        如果查询条件中包括索引的第一个列,而且结果列都在索引列中,系统使用匹配索引定位,会定位到索引的页级,这时可从索引页中直接提取结果,不需要使用数据页。

l        如果查询条件中不包括索引的第一个列,而且结果列都在索引列中,系统使用非匹配索引扫描,不扫描数据页,从索引页中直接提取结果。这种情况也不使用数据页。

(2)    尽量使SQL语句在执行中用到索引,才能实现高效率的查询

l        每个表一般都需要索引,除非数据量特别少的表

l        索引设计应在数据库总体设计中统一集中考虑

l        可以充分利用索引的where 条件书写格式为 “column operator expression”, 这里的operator 一般是:=, >, <, >=, <=, is null 。而如果operator !=!> ,便不能充分利用索引。如果要充分利用索引,在 column 中就不要包括函数和其他操作。

l        Where子句中,expression 必须是常量或可以转化成常量。查询优化器认为,between 相当于“ >= ”“ <=”“like 'Ger%' ”相当于“ >= 'Ger' and < 'Ges'”。但是“ like '%ber' ”因为没有给出首字母,就不能转化成这种结果。

l        最好将 > 变为 >=< 变为 <= not exists 变为exists not in变为in

l        如果被查询列都包括在索引列中,这种查询叫索引覆盖查询。这种查询效率比较高,应尽量使用这种查询。

l        在做表连接查询时,在外表的连接列上建立索引,可以大大加快速度。

l        程序中尽量避免修改索引键值

l        群集索引通常用于主键标,因为主键标一般是一张表的主访问路径。不过,在下列情况下也可采用群集索引。

a)        范围查找,含有大量重复值的字段;

b)          ORDER BY中常引用的字段;

c)        连接子句中引用的不是主键标的字段;

d)        非常频繁地被访问的字段。

l        非群集索引一般用于以下情况:

a)        单行查找;

b)        连接运算以及在选择性很高的字段上的查询。

c)        带有小范围检索的查询。

l        虽然采用索引可以提高数据库的查询性能,但过多的索引会适得其反,这是因为在修改、插入或删除数据时为了保持最新的索引,必须引发系统I/O开销。因此当索引列中的大量数据被增加、改变或删除时,应使用命令UP_DATE STATISTICS保持索引的最新状况。

l         

五、            应用级的优化

应用级的调优主要是减少公用资源争用和磁盘I/O,调优专家的80%调优结果都来源于减少磁盘I/O

1)决定处理是在服务器上进行还是在客户端进行

2)为了更有效的进行优化,有些应用需要进行重新改写和优化程序的实现逻辑

3)事务的设计降低了系统的并发性,尤其是长事务会使其他用户不能及时访问数据。由长事务变为短事务也是性能优化的一个课题

4)使用存储过程减少编译及网络传输的时间

六、            服务器端应用的优化

1)查询语句在执行时要尽可能用上索引

2)判断数据存在性时用exists而不用count(*)

3)表连接操作中的or语句,若能变为union操作,ASE可优化

4)min()max()函数

(1)    若这两个函数所使用的列为索引的第一列,ASE可优化,只需索引页。

(2)    不要在两函数中用表达式,如:max(numeric_col*2),而把它变为max(numeric_col)*2

5)尽量避免使用cursor

6)尽可能使用存贮过程,并适时对存贮过程进行从新编译(sp_recompile)

七、            客户端应用的优化

1)继承结构级优化。

l        剔出冗余的继承层,减少继承的层数,有些层的处理很少可以直接移植到相近的子或父层

2)事件级优化。

l        调用频率很高的事件脚本优化,比如datawindowrowfocuschanged之类的事件在继承的各个层次中都有脚本;

l        容易嵌套脚本的优化,pb中很多事件是嵌套触发的,优化能使嵌套沿着最佳路线进行触发

3)变量级优化。

l        尤其是实例变量,经常在程序中有多次赋值,容易出错,对变量的初始化最好在一起处理这样不容易重复赋值或赋值不完整

4)耦合处理。

l        对于多次类似的处理提升为一个函数,减少脚本的冗余

5)业务逻辑辅助工具。

l        对于很重要而且经常使用的业务处理单元开发对应的业务逻辑校验工具,可以轻松找出数据的问题或批量优化数据

八、            性能设计和调优过程中通常是多种因素的平衡

1)一致性与并发性的平衡

2)查询速度与更新速度

3)时间与空间索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值