性能优化.docx
- 文档编号:5145882
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:7
- 大小:22.65KB
性能优化.docx
《性能优化.docx》由会员分享,可在线阅读,更多相关《性能优化.docx(7页珍藏版)》请在冰豆网上搜索。
性能优化
∮1.1.1性能设计
性能优化的范围,主要从操作使用层、业务层、架构层、数据存储、操作系统等几个方面进行分析。
操作使用方面,主要考虑操作的简便性、减少系统请求、合理控制分配各个功能点的使用等方面。
业务层主要考虑业务体系的优化,如对一些流程复杂的业务如何进行流程统一;应用系统功能如何进行拆分以达到功能配置最优化。
架构层从系统架构和应用架构两个角度考虑,包括事务控制、代码缓存、权限管理体系、远程调用、工作流引擎等内容。
其优化手段主要有优化缓存管理、支持多数据源、应用服务部署优化等方面。
数据库层的优化范围包括数据库的库表结构设计、数据存储、数据库操作等方面考虑,主要优化手段包括表结构设计的规范化、分区存储、查询优化、索引的使用等策略。
操作系统层的内容考虑系统的并发用户数、吞吐量,系统可靠性等方面,优化手段包括多任务处理、负载均衡等手段。
∮1.1.1.1应用系统优化
∮1.1.1.1.1架构体系
系统应用框架主要包括:
业务逻辑层模式,事务控制,数据源获取,代码缓存,客户端对核心应用的调用方式,持久层,web框架,用户权限,工作流,GUI,EAI,任务队列等模块,实现了客户端的独立、分布式的、可扩展的、基于组件的架构、通过EAI集成内部和外部的其他系统。
(1)缓存的使用:
对系统经常使用的代码表、SQL语句和配置信息等内容进行缓存,提高系统的运行效率。
(2)资源池:
资源池技术使用的是一套准备好的资源,与在请求和资源之间维持1:
1的关系的不同,这些资源可被所有请求所共享。
资源池的使用是有条件的,需要衡量下面两种方式的代价:
A,维持一套可被所有请求共享资源的代价B,为每个请求都重新创建一个资源的代价。
当前者小于后者时,使用资源池才是有效率的。
∮1.1.1.1.2应用程序编码
编码有关的优化手段,主要是考虑架构的编码,性能优化方面主要有以下几个手段:
1、把常用但是变化不大的代码(主要是代码表和参数表)放在缓存中,以加快系统的访问速度。
2、对查询结果的条数进行限制,否则一旦一个客户进行了大数据操作,服务器就会死机,建议现在采用web的路由方式解决。
3、灵活支持多数据源的存取,满足省局集中后市局个性化数据的处理,即各个地市不同的数据库存取。
∮1.1.1.1.3核心业务优化
省集中模式下,从规范化业务流程,优化业务内容的角度,业务层优化考虑以下方面的内容:
1.应用部署的分离:
如个人所得税全员申报进行部署分离,通过单独部署应用、独立存储、开发个税客户端软件等手段,分离个人所得税有关的业务和数据;
2.业务功能拆分:
由于省集中情况下用户范围和数量发生了变化,从性能角度出发,需要对原有的业务进行规划,把大的重量级业务进行分解,减轻业务操作的压力。
如在开业登记环节,为了减轻登记录入的工作量,建议增加一个受理环节,进行简易数据审核,录入必要的输入项,满足打证的需要,详细的数据在事后进行补录。
3.前后台业务分离,根据前台业务量特点,保证性能的角度出发,将一些业务进行前后台内容分离,确保前台办税服务事项等性能保障。
∮1.1.1.2平台及数据库优化
∮1.1.1.2.1应用服务器
选择硬件平台需要考虑许多因素,至少包括:
价格,硬件部署,厂商的表现,性能,等等。
应用开发完毕、服务器选定之后,还要考虑操作系统和Java虚拟机的配置选项,适当地配置这些选项无疑也能够提高性能。
(1)任务并行处理:
一个任务分解为更为简单的子任务,并能够同时在不同的线程中执行。
(2)异步处理:
异步处理是通过缩短那些在将控制返回给用户之前必须处理的时间来提高性能。
虽然都做同样多的事情,但是用户不必等到整个过程完成就可以继续发出请求了。
但这种方式降低了服务器的处理压力,使服务器可以接收更多用户的申报请求。
负载均衡:
负载均衡的思想是将原本在一台服务器上的压力按照人为设定的规则分流到功能类似的一类服务器上。
这一思想的具体表现是通过路由的方式使不同区域或不同业务的请求分流到不同的服务器上。
这将减少应用服务器的压力,使服务器的性能得到优化。
∮1.1.1.2.2前端优化
1、减少HTTP请求:
通过将多个前端资源合并成一个实现减少HTTP请求提高性能。
2、设置响应头字段是部分及时性要求不高的静态资源在缓存在前端浏览器中。
3、启用传输压缩。
例如gzip。
4、合理的布局前端代码结构,css,html,js代码的顺寻由上至下。
5、对于一些可公开访问的资源,可以通过设置其他的域名的方式减少传输过程中的cookie。
6、使用CDN分发,将静态资源部署在各大网络运营商的机房中,这样子用户就可以非常快的就近获得资源。
7、使用反向代理将热门内容,静态资源或者一些可被缓存的计算结果缓存在代理服务器中。
通过配置代理服务器可以实现代理服务器直接转发被缓存的资源。
∮1.1.1.2.3后端优化
1、使应用服务器实现无状态,将会话信息存储在缓存服务器集群中,这样每台应用服务器之间就可以被相同的对待。
就可以通过增加服务器数量的方法水平扩展整个系统的吞吐量。
2、选择合理的缓存策略,只缓存对于业务而言及时性要求不高,且访问量大的数据,选取合适的缓存命中算法,减少增加服务器或者服务器宕机对于应用的影响。
3、缓存防御策略,将可预见的但是并不存在的数据缓存下来,防止恶意攻击连续对缓存发起该资源的请求导致最终请求压在数据库上面。
4、使用消息队列实现网站的异步处理。
对于某些接口调用需要花费很长的时间,可以通过一个消息队列来实现生产者消费者模式,每一个模块既可以是消费者也可以是生产者。
但是消息队列也有一定的确定,需要增加额外的机制来保证事务性,例如通过一张表来记录消息的消费记录和消费结果来实现事务最终的一致。
5、对各种资源费复用来减少创建资源时的时间和性能开销,例如使用数据库连接池和线程池。
6、提高代码逻辑和代码中数据的数据结构的合理性以及优化算法提高应用程序的处理时间。
7、硬件上采用更加优秀(快)的硬件。
∮1.1.1.2.4数据存储优化
1.借助ORACLE的分区技术,将历史数据进行分离。
大集中的税务管理信息系统,在数据量上达到T级,对业务应用系统有了更高的要求。
要适应大集中,那就必须对地市级数据保有量超过50万的数据表(如鉴定数据、发票资格认定数据等)。
对数据的月增量超过50万的数据表不光要进行按地市按时间进行分区,还要对长期历史性数据和短期活动性数据分离,在生产数据库中只保留两年的数据,提供必要的业务数据支撑,保障生产库以更高的效率为征管业务服务,对两年以上数据的查询在数据库仓库和ODS数据库中提供数据服务。
2.在分区技术的基础上,进一步根据时间、机关、税款类型等条件对数据表级进行物理分离。
在应用系统集中以后,我们还要对分区后的数据,根据业务和需要进一步的分离,如根据时间、机关、税款类型等条件进一步进行分表、分库、分设备存储。
保证数据的存储满足查询等操作的实时性需要。
∮1.1.1.2.5数据库查询性能优化
从应用层对查询的需要,针对不同管理用户的实际需求进行分析分类定制,确保依据管理视图不同,使用尽量少的数据来满足尽量多的需求,避免大量数据直接操作。
对于实时查询和实时统计的业务需求,原则上采用物化视图等手段,首先统计后台系统已迁移、已加工的明细或汇总数据,再加上当天发生的实时明细数据,进行累加后计算出实时结果的方式。
避免直接访问生产库。
结合数据库部署和数据存储的有关设计,通过对查询的条件进行优化,使之有效利用分区和索引技术,提高查询效率。
∮1.1.1.3优化总结
性能与应用系统的代码、应用服务器都都有着密切的关系。
应用的代码写得再好,如果应用服务器的配置不当,性能也不会好;同样地,应用服务器调整得再好,也难以掩盖应用代码中存在的缺陷。
因此,首先要保证应用有一个稳固可靠的体系结构,有最优质高效的代码,在此基础上再来集中精力调整应用服务器,这样才能达到应用系统性能优化的理想效果。
∮1.1.1.4数据库优化
∮1.1.1.4.1数据库逻辑设计
数据库性能包括存储空间需求量的大小和查询响应时间的长短两个方面。
为了优化数据库性能,需要对数据库中的表进行规范化。
一般来说,逻辑数据库设计满足第三范式的表结构容易维护且基本满足实际应用的要求。
所以,实际应用中一般都按照第三范式的标准进行规范化,从而保证了数据库的一致性和完整性,设计人员往往会设计过多的表间关联,以尽可能地降低数据冗余。
但在实际应用中这种做法有时不利于系统运行性能的优化:
如过程从多表获取数据时引发大量的连接操作,在需要部分数据时要扫描整个表等,这都消耗了磁盘的I/O和CPU时间。
为解决这一问题,在设计表时应同时考虑对某些表进行反规范化,我们常用的方法保留冗余列。
当两个或多个表在查询中经常需要连接时,可以在其中一个表上增加若干冗余的列,以避免表之间的连接过于频繁,一般在冗余列的数据不经常变动的情况下使用。
∮1.1.1.4.2索引
创建索引是提高检索效率最有效的方法之一,索引把表中的逻辑值映射到安全的RowID,能快速定位数据的物理地址,可以大大加快数据库的查询速度,一个建有合理索引的数据库应用系统可能比一个没有建立索引的数据库应用系统效率高几十倍,但并不是索引越多越好,在那些经常需要修改的数据列上建立索引,将导致索引B*树的不断重组,造成系统性能的下降和存储空间的浪费。
对于一个大型表建立的索引,有时并不能改善数据查询速度,反而会影响整个数据库的性能。
这主要是和SGA的数据管理方式有关,Oracle在进行数据块高速缓存管理时,索引数据比普通数据具有更高的驻留权限,在进行空间竞争时,Oracle会先移出普通数据,对建有索引的大型表进行数据查询时,索引数据可能会用完所有的数据块缓存空间,Oracle不得不频繁地进行磁盘读写来获取数据,所以,在对一个大型表进行分区之后,可以根据相应的分区建立分区索引。
Oracle提供了另一种方法来提高查询速度,就是聚簇(Cluster)。
所谓聚簇,简单地说就是把几个表放在一起,按一定公共属性混合存放。
聚簇根据共同码值将多个表的数据存储在同一个Oracle块中,这时检索一组Oracle块就同时得到两个表的数据,这样就可以减少需要存储的Oracle块,从而提高应用程序的性能。
对于逻辑结构的优化,还应将表数据和索引数据分开表空间存储,分别使用独立的表空间。
因为如果将表数据和索引数据放在一起,表数据的I/O操作和索引的I/O操作将产生影响系统性能的I/O竞争,降低系统的响应效率。
将表数据和索引数据存放在不同的表空间中,并在物理层面将这两个表空间的数据文件放在不同的物理磁盘上,就可以避免这种竞争了。
∮1.1.1.4.3SQL优化
∮1.1.1.4.3.1采用两种访问表中记录
访问Table的方式Oracle采用两种访问表中记录的方式:
a.全表扫描
全表扫描就是顺序地访问表中每条记录。
ORACLE采用一次读入多个数据块(databaseblock)的方式优化全表扫描。
b.通过ROWID访问表
可以采用基于ROWID的访问方式情况,提高访问表的效率,ROWID包含了表中记录的物理位置信息……ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。
通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。
∮1.1.1.4.3.2共享SQL语句
为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在内存中。
这块位于系统全局区域SGA(systemglobalarea)的共享池(sharedbufferpool)中的内存可以被所有的数据库用户共享。
因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路径。
ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用。
∮1.1.1.5应用设计优化
性能调整不仅是数据库管理员的事,更需要应用设计开发人员的紧密配合。
∮1.1.1.5.1使用存储过程
为了提高处理性能,应尽可能采用存储过程而不采用嵌入SQL。
存储过程主要有以下优点:
(1)同发出单一的SQL语句或发送整块的SQL文本到服务器相比,信息只需发送一次,减少了交互,通过网络传送的信息量较少。
(2)存储过程经创建、分析、认证、编译等处理后,存放在数据库管理系统(DBMS)服务器,SQL语句是静态的,可以即时调用,执行时不需要再编译。
如果存储过程已经在共享内存中,就不需要从磁盘中读取,可以立即执行。
(3)减少对内存的需求。
多个用户执行时,只需将过程的单个拷贝即可,多用户共享同样的代码。
(4)连续的执行以较小的开销实现,从而改善性能。
动态SQL每次运行都需要较大的预处理开销。
与表和索引一样,系统可以收集存储过程的统计信息,优化器可以创建最合适的访问计划。
有数据表明,实现同一个功能,采用存储过程只需采用嵌入SQL的20%的时间。
使用存储过程还比较安全,存储过程的执行需要有该存储过程定义者或所有者的权力,这样就限制了用户能够执行的数据库操作。
同时,使用存储过程还能提高软件开发的生产率,可以把存储过程看成面向对象设计中的经过封装的类,其他存储过程或应用程序为完成某个功能,可以继承该存储过程而不需要重写SQL语句。
如果需要修改该存储过程功能,也不必对所有继承该存储过程的应用进行修改,可使修改的工作量降到最小,保证了应用程序的完整性与一致性。
另外,存储过程也是可重用的单元,对提高可靠性也有所帮助。
∮1.1.1.5.2建立索引
建索引是提高数据访问效率的重要途径,但建索引有时并不一定能起到作用,索引不能满足未知需求,有时会适得其反,降低系统性能。
关于索引,可归纳出以下几点:
(1)索引数尽量少。
当要在一个合理的时间内结束查询时,应避免添加索引。
过多的索引会降低更新操作的速度并消耗额外的空间,使磁盘有效使用率降低,增加系统的复杂性和管理成本。
低速查询不一定表示数据库或索引有问题,很可能是程序有问题。
(2)基数较大的列很适合用来做索引。
如果索引的惟一值有限(如<10),则不宜使用索引。
(3)最好不选择大的列作索引。
(4)考虑到管理上的开销,应避免在索引中使用多于5个的列,避免覆盖多个查询的大型索引。
(5)对于多列索引,将查询中引用最多的列放在定义的前面。
(6)添加与已有索引相似的索引会给优化器带来更多的工作,降低更新操作的速度。
如果需要,可以修改已有的索引,使其包含附加的列。
(7)在经常进行连接,但没有指定为外键的列上建立索引。
(8)在频繁进行排序或分组的列上建立索引。
(9)在需要时建群集索引。
群集索引允许对数据页采用更线性的访问模式,允许更有效的预取,并且有助于避免排序。
这样查询操作会更快,但插入操作会慢。
适合插入更新频率不高的表。
(10)确保最优的索引使用。
∮1.1.1.5.3优化查询
优化查询的出发点是如何减少查询的资源利用:
减少I/O,减少运算量。
可以用Quest等各种工具来分析查询语句的效率。
(1)把频繁使用的小表放在内存或高速缓存中,可以明显减少I/O。
(2)减少所读的行数和所读或更新的列。
如,仅读取满足条件的第一条记录,仅读取或更新必须的列。
(3)用临时表缩小查询范围。
(4)尽量避免子查询和明确关联的子查询。
(5)避免复杂规则表达式。
(6)尽量使用数据库引擎提供的函数,如:
sum,avg,min,max。
(7)尽量使用连接而不用嵌套循环,避免连接长字符串。
(8)尽量用where缩小连接范围。
(9)避免不必要的大表的全表搜索。
∮1.1.1.6操作系统优化
检查系统的空载负荷。
空载负荷指仅安装操作系统的情况下,通过一些工具查看系统的负载。
这样做的目的是通过检查系统的运行情况,减少和屏蔽不必要的服务,最大限度的为应用系统提供更多的资源建议是通过编写脚本记录系统运行时的性能情况。
比如按占用CPU对进程排序,如果是非核心进程,则可以根据情况停止这些进程的启动。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 性能 优化