调整ORACLE性能性能调优篇---Oracle基于CS的性能
oracle数据库性能调优

oracle数据库性能调优⼀:注意WHERE⼦句中的连接顺序:ORACLE采⽤⾃下⽽上的顺序解析WHERE⼦句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最⼤数量记录的条件必须写在WHERE⼦句的末尾.尤其是“主键ID=?”这样的条件。
⼆: SELECT⼦句中避免使⽤ ‘ * ‘:ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个⼯作是通过查询数据字典完成的, 这意味着将耗费更多的时间。
简单地讲,语句执⾏的时间越短越好(尤其对于系统的终端⽤户来说)。
⽽对于查询语句,由于全表扫描读取的数据多,尤其是对于⼤型表不仅查询速度慢,⽽且对磁盘IO造成⼤的压⼒,通常都要避免,⽽避免的⽅式通常是使⽤索引Index。
三:使⽤索引的优势与代价。
优势:1)索引是表的⼀个概念部分,⽤来提⾼检索数据的效率,ORACLE使⽤了⼀个复杂的⾃平衡B-tree结构. 通常,通过索引查询数据⽐全表扫描要快. 当ORACLE找出执⾏查询和Update语句的最佳路径时, ORACLE优化器将使⽤索引. 同样在联结多个表时使⽤索引也可以提⾼效率. 2)另⼀个使⽤索引的好处是,它提供了主键(primary key)的唯⼀性验证.。
那些LONG或LONG RAW数据类型, 你可以索引⼏乎所有的列. 通常, 在⼤型表中使⽤索引特别有效. 当然,你也会发现, 在扫描⼩表时,使⽤索引同样能提⾼效率.代价:虽然使⽤索引能得到查询效率的提⾼,但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本⾝也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反⽽会使查询反应时间变慢.。
⽽且表越⼤,影响越严重。
使⽤索引需要注意的地⽅:1、避免在索引列上使⽤NOT , 我们要避免在索引列上使⽤NOT, NOT会产⽣在和在索引列上使⽤函数相同的影响. 当ORACLE”遇到”NOT,他就会停⽌使⽤索引转⽽执⾏全表扫描.2、避免在索引列上使⽤计算.WHERE⼦句中,如果索引列是函数的⼀部分.优化器将不使⽤索引⽽使⽤全表扫描.举例:代码如下:低效:SELECT … FROM DEPT WHERE SAL * 12 > 25000;⾼效:SELECT … FROM DEPT WHERE SAL > 25000/12;3、避免在索引列上使⽤IS NULL和IS NOT NULL避免在索引中使⽤任何可以为空的列,ORACLE性能上将⽆法使⽤该索引.对于单列索引,如果列包含空值,索引中将不存在此记录. 对于复合索引,如果每个列都为空,索引中同样不存在此记录. 如果⾄少有⼀个列不为空,则记录存在于索引中.举例: 如果唯⼀性索引建⽴在表的A列和B列上, 并且表中存在⼀条记录的A,B值为(123,null) , ORACLE将不接受下⼀条具有相同A,B值(123,null)的记录(插⼊). 然⽽如果所有的索引列都为空,ORACLE将认为整个键值为空⽽空不等于空. 因此你可以插⼊1000 条具有相同键值的记录,当然它们都是空! 因为空值不存在于索引列中,所以WHERE⼦句中对索引列进⾏空值⽐较将使ORACLE停⽤该索引.代码如下:低效:(索引失效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;⾼效:(索引有效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;4、注意通配符%的影响使⽤通配符的情况下Oracle可能会停⽤该索引。
Oracle的性能优化

千里之行,始于足下。
Oracle的性能优化Oracle数据库性能优化是提高数据库性能的关键步骤之一。
通过对数据库的优化,可以提高查询速度、降低系统负载、提升系统稳定性,从而提高用户的体验。
下面将介绍一些常见的Oracle数据库性能优化策略。
1. 索引优化:索引是提高查询效率的重要手段,可以极大地减少查询时的磁盘I/O操作。
优化索引包括以下几个方面:- 选择合适的索引类型,如B树索引、位图索引等。
根据具体业务场景选择适当的索引类型。
- 考虑创建复合索引,将多个列放在同一个索引内,可以减少索引的数量,提高查询效率。
- 避免创建过多的索引,过多的索引会增大数据插入和更新的成本。
- 定时对索引进行统计信息收集,使优化器能够更好地选择索引执行计划。
2. 查询优化:- 避免使用SELECT *查询,只查询需要的列,减少数据传输量。
- 使用合理的JOIN语句,避免嵌套循环连接或者全表扫描。
- 使用EXISTS或IN替代NOT EXISTS或NOT IN,后者在数据量大时性能较差。
- 避免使用函数或者表达式作为WHERE条件,这会导致索引失效。
- 使用分页查询时,尽量使用ROWNUM而不是OFFSET/FETCH,后者性能较差。
3. 表结构优化:- 合理设计表结构,尽量避免冗余数据和重复字段。
- 使用正确的数据类型,减少存储空间的浪费。
第1页/共3页锲而不舍,金石可镂。
- 选择合适的表空间和存储策略,避免表空间的碎片化和数据文件的扩展问题。
- 定期清理无用数据,避免数据库膨胀过快。
4. 系统参数优化:- 调整SGA参数和PGA参数的大小,根据实际情况合理分配内存。
- 调整日志参数,如redo日志大小和checkpoint间隔,减少写入磁盘的次数。
- 调整并发参数,如并行度和数据库连接数,提高系统的并发性能。
5. 存储优化:- 使用合理的存储结构,如表空间、数据文件、表和索引的分布策略。
- 使用合适的存储介质,如固态硬盘(SSD)、闪存阵列等,提高存储性能。
Oracle性能调优——基本参数调整

Oracle性能调整(一)——基本参数调整一、操作系统参数交换区是Oracle的一项基本的要求。
可以根据Oracle的发行要求来确定。
一般交换区大小的要求是该服务器内存的2倍至4倍之间,建议是内存的4倍Note2:oracle 文件设置当服务器平台已完成操作系统的安装后,就应该开始认真的考虑下面的问题:A、是否采用裸设备实际应用的生产系统基本都是采用裸设备,使用裸设备对于读写频繁的数据库应用来说,可以极大地提高数据库系统的性能。
B、安装点的考虑Oracle的安装点就是指数据文件、日志文件和控制文件的安置路径,为了使系统在以后运行性能达到优化,建议将数据文件、日志文件和控制文件的安置路径与数据库系统存放在不同的路径上。
最好将数据文件、日志文件和控制文件分别存放在不同的路径。
C、SYSTEM表空间对应数据文件在自定义安装会话中,建议你根据需要设置system表空间所对应的数据文件的大小。
一般要设置比默认值的2倍。
该数据文件的大小最好是在300MB至500MB间。
因为数据文件太小不利于系统的运行。
D、临时表空间对应的数据文件临时表空间对应的数据文件可以根据将来系统存放的应用的处理情况来定。
比如系统将来可能要经常进程排序处理,则需要设置较大的临时表空间,也可能需要再建立新的临时表空间。
这里建议临时表空间的数据文件在100MB至300MB左右。
E、回滚段表空间对应的数据文件回滚表空间都是系统管理,初始值也是根据系统事务量预估计的值,实际到运行阶段如果系统常出现ORA-01555错误的时候,可能就需要增加回滚表空间的大小。
F、日志文件的大小日志文件的大小对于Oracle系统的运行也是相当重要。
默认值是太小。
实际根据事务繁忙预估计日志大小,没有固定的具体值范围,建议重做日志切换时间不能过短也不能过长,一般在20-40分钟左右。
该参数可以在系统运行期间根据数据库系统日志切换时间重新调整,控制文件的大小。
G、数据库块的大小如果你的应用系统是OLTP的话,可以采用较小的数据库块。
Oracle中性能调整

Oracle中性能调整一、性能调整的目标1、加快响应时间。
存取尽量少的块,缓存频繁使用的块。
2、提高吞吐量和连接量。
3、减少等待和瓶颈、减少paging和swapping。
以下将影响性能:使用中间件封装、频繁的登录退出、Cursor的管理(cursor_sharing),表的join二、性能调整工具Oracle Enterprise Manager相关工具: Lock monitorPerformace OverviewTop sessions*查看用户锁Performance manager ->锁数->用户类型锁,等待锁->内存->sga概览->共享池%可用,sga命中百分比->IO平均成本(看哪个文件IO多)->加载->会话数(活动)->数据库例程->内存排序百分比->等待事件->用户事件Statspack$oracle_home/rdbms/admin/spcreate.sql$Sqlplus perfstat/口令Sql>Exec statspack.snap 手工获取快照Sql>@spauto 自动获取快照Sql>@spreport输入snap id号,即可得出报表。
Utlbstat.sql/utlestat.sql (conn as sysdba)三、性能调整步骤每一个数据库必须存储一个参考基线(baseline),以后的report与baseline比较可以看出什么地方性能下降了。
调整时一次应用一个假设,达到目标时,产生一个新的baseline。
通常步骤:1、定义问题2、收集统计数据(操作系统和Oracle的统计)3、检查并画出性能差的部分4、实施假定的数值或参数5、统计检查问题是否已经解决,重复3-5。
实际执行步骤:1、检查alert日志和用户trace文件;2、检查参数文件(查不正确或欠妥的参数)3、检查内存、I/O、CPU使用,标志不正常的进程、语句4、分析有效的CPU/总CPU使用5、确定哪个资源是瓶颈6、平衡安全性和性能的关系注意:Incomplete checkpoints四、参数Log_checkpoint_to_alertSessions :会话数mts_sessionsprocesses :进程数Sql_traceTimed_statistics、statistics_level= TYPICALExecute dbms_system.set_sql_trace_in_session(8,12,true)Db_cache_adviceLog_checkpoint_timeout:脏数据块保留的最长时间Log_checkpoint_interval:用于恢复的日志块的最大数目Fast_start_mttr_target:平均例程恢复时间Pga_aggregate_target:专用服务器进程PGA五、执行语句Sql>select username,name,value from v$statname,v$session s,v$sesstat t Where s.sid=t.sid and n.statistic#=t. statistic#and s.type=’USER’ and ername is not nulland =’Session pga memory’and t.value>3000;⏹占用3000以上PGA字节的会话Sql>select phyrds,phywrts, from v$datafile d,v$filestat fwhere d.file#=f.file# order by Performance Manager→ I/O⏹看哪个数据文件较忙(有无全表扫描?建立索引?分开存放?)Select name,value from v$sysstat where name like ‘%table scan%’;Select sid,serial#,opname,(sofar/totalwork)*100 as percent_complete from v$session_longopswhere (sofar/totalwork)*100!=100看长查询Db_file_multiblock_read_count*db_block_sizeAlter table employees allocate extent (datafile ‘xxx.dbf’ size 10m);optimizer_mode = CHOOSE⏹回滚段的当前活动事务:Sql>SELECT ername,t.xidusn,t.ubafil,t.ubablkfrom v$session s,v$transaction t WHERE s.taddr=t.addr; -- oracle7 Sql> SELECT ername,t.xidusn,t.ubafil,t.ubablk,ed_ublkFROM v$session s,v$transaction t WHERE s.saddr=t.ses_addr; --oracle9i Sql>select segment_name,max_extents,PCT_INCREASEfrom dba_rollback_segs;Sql>SELECT ,s.extents,s.rssize,s.optsize,s.hwmsize,s.xacts,s.status FROM v$rollname n,v$rollstat s WHERE n=n;六、事件:V$session_event, v$session_wait, v$system_eventBuffer busy waitsSQL>select event,total_waits from v$system_eventWhere event in (‘free buffer waits’,’buffer busy waits’)SQL> select name,value from v$sysstatwhere name=‘free buffer inspected’SQL>select * from v$waitstatwhere class in ('data block','undo header','undo block'‘segment header’)可用增加索引,自动段管理,增加freelists或用自动段管理segment header>0。
详解Oracle几种性能调优方法

Oracle是一个高性能数据库软件。
用户可以通过参数的调整,达到性能的优化。
性能优化主要分为两部分:一是数据库管理员通过对系统参数的调整达到优化的目的;二是开发人员通过对应用程序的优化达到调整的目的。
在此,仅就系统参数的调整进行探讨,而不涉及应用程序的优化。
对系统参数的调整,可以分为以下几个部分:调整内存分配系统全局区(SGA)是一个分配给Oracle 包含Oracle 数据库实例控制信息的内存段。
SGA的大小对系统性能的影响极大,其缺省参数设置只适用于配置很低的计算机,不适应收入系统现有设备的需要。
这些参数若不作调整,会对系统资源造成巨大浪费。
就收入系统的Alpha 1200而言,SGA的大小以160兆左右为宜。
初始化参数文件中的一些参数对SGA的大小有决定性的影响。
参数DB-BLOCK-BUFFERS(SGA中存储区高速缓存的缓冲区数目),参数SHARED-POOL-SIZE(分配给共享SQL区的字节数),是SGA大小的主要影响者。
DB-BLOCK-BUFFERS参数是SGA大小和数据库性能的最重要的决定因素。
该值较高,可以提高系统的命中率,减少I/O。
每个缓冲区的大小等于参数DB-BLOCK-SIZE的大小。
Oracle 数据库块以字节表示大小。
Oracle SGA区共享池部分由库高速缓存、字典高速缓存及其他一些用户和服务器会话信息组成,共享池是最大的消耗成分。
调整SGA区各个结构的大小,可以极大地提高系统的性能。
调整Library Cache库高速缓存(Library Cache)中包含私用和共享SQL区和PL/SQL区。
调整SGA的重要问题是确保库高速缓存足够大,以使Oracle能在共享池中保持分析和执行语句,提高语查询V$LIBRARYCACHE 数据字典视图句分析和执行效率,降低资源消耗。
通过比较Library Cache的命中率来决定它的大小。
(其中,pins表示高速缓存命中率,reloads表示高速缓存失败)SQL〉SELECT SUM(pins),SUM(reloads) FROM v$librarycache;如果sum(reload)/sum(pins)≈0,说明Library Cache的命中率比较合适,若大于1,则需要增加共享池(SHARED-POOL-SIZE)的大小(在初始化参数文件中)。
Oracle性能调优

千里之行,始于足下。
Oracle性能调优
Oracle性能调优是指通过对数据库系统进行各种配置和优化,以提升数据库的响应速度、并发能力和稳定性,以满足用户的需求。
以下是一些常见的Oracle性能调优技巧:
1. 硬件配置:增加服务器的内存、CPU和磁盘等硬件资源,以提高数据库的整体性能。
2. SQL优化:通过检查和优化SQL语句,去除不必要的查询、索引不匹配等问题,以提高查询性能。
3. 索引优化:根据实际查询访问模式,设计合适的索引并定期进行重建和维护,以加快查询速度。
4. 数据库参数优化:调整Oracle数据库的各项参数,如SGA、PGA、缓冲池等,以提升数据库的性能。
5. 分区表和分区索引:将大表分割为多个小表,并使用分区索引来提高查询效率和维护性能。
6. 批处理操作:对于大批量的数据操作,尽量使用批处理操作,减少物理I/O次数,提高处理效率。
7. 数据库统计信息收集:定期收集和更新表的统计信息,以便查询优化器做出更准确的查询计划。
第1页/共2页
锲而不舍,金石可镂。
8. 资源管理:合理配置Oracle数据库的资源管理策略,如设置合适的连接数、并行度等,以实现最大化的利用率。
9. 数据库分析工具:使用各种数据库性能监控和分析工具,如AWR报告、SQL Trace等,来定位和解决性能瓶颈问题。
总结来说,Oracle性能调优是一个持续优化的过程,需要不断地监测、分析、调整和测试,以实现最佳的数据库性能。
同时,在调优过程中需根据具体情况进行有针对性的优化措施,以达到最好的性能效果。
Oracle数据库性能优化分析

千里之行,始于足下。
Oracle数据库性能优化分析Oracle数据库性能优化分析是指对Oracle数据库进行综合性能分析和优化的过程。
通过分析数据库的运行状况、识别潜在的性能瓶颈、确定解决方案并实施优化措施,可以提高数据库的性能和效率。
以下是Oracle数据库性能优化分析的一般步骤:1. 收集性能数据:通过Oracle的性能监控工具,如AWR报告、统计信息收集等,收集数据库的性能数据,包括CPU利用率、I/O响应时间、锁定情况等。
2. 确定性能瓶颈:通过分析性能数据,确定数据库中存在的性能瓶颈,如高CPU使用率、高IO等待、长时间的锁等待等。
3. 优化SQL语句:分析执行频次较高的SQL语句,通过重写SQL语句、调整索引和统计信息等方式,优化SQL语句的执行计划,减少IO开销和CPU消耗。
4. 优化数据库结构:根据应用的需求和查询模式,调整表结构、分区策略、索引设计等,以提高查询性能和数据访问效率。
5. 优化数据库配置参数:调整数据库的配置参数,包括缓冲区大小、日志大小、并发连接数等,以最大限度地利用硬件资源,提高数据库的吞吐量和响应时间。
6. 确保数据完整性和一致性:通过使用合适的约束和触发器,确保数据的完整性和一致性,防止数据错误和冲突对性能造成负面影响。
第1页/共2页锲而不舍,金石可镂。
7. 监控和调优:定期监控数据库的性能指标,如响应时间、吞吐量等,及时识别和解决潜在的性能问题,保持数据库的高可用性和性能稳定性。
需要注意的是,性能优化是一个综合性的工作,需要结合具体的应用场景和需求来进行分析和优化,没有一种通用的解决方案,需要根据实际情况进行定制化的优化措施。
同时,性能优化是一个持续改进的过程,需要定期评估数据库的性能状况,并根据需求进行调整和优化。
关于针对ORACLE性能调优篇---Oracle基于CS的性能调整

HR Planning System Integration and Upgrading Research ofA Suzhou InstitutionORACLE性能调优篇---Oracle基于C/S的性能调整通过探讨和研究Oracle服务器和Client/Server的特点和原理,阐述了提高、调整Oracle应用系统性能的一些原则和方法。
关键词:Oracle;客户/服务器;系统全程区;网络I/O;回滚段Oracle Performance Tunign Based on Client/ServerZhang Dong Wang Hong Yao Yaowen(1.Dep.of Computer Sciences and Engineering.South China University of Technology,Guangzhou 510641;2.Dept.of Informatics,Guangzhou School of Finauce,Guangzhou 510521)【Abstract】In this paper discuses and studies the characteristic of Oracle service and theory about Oracle service based on Client/Server.It also gives the way to improve and ture the performance of Oracle based on Client/Server【Key words】Oracle;Cclient/Server;SGA;Network I/O;Rollback SegmentOracle 数据库广泛应用在社会的各个领域,特别是在Client/Server模式的应用,但是应用开发者往往碰到整个系统的性能随着数据量的增大显著下降的问题,为了解决这个问题,从以下几个方面:数据库服务器、网络I/O、应用程序等对整个系统加以调整,充分发挥Oracle的效能,提高整个系统的性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORACLE性能调优篇---Oracle基于C/S的性能调整通过探讨和研究Oracle服务器和Client/Server的特点和原理,阐述了提高、调整Oracle应用系统性能的一些原则和方法。
关键词:Oracle;客户/服务器;系统全程区;网络I/O;回滚段Oracle Performance Tunign Based on Client/ServerZhang Dong Wang Hong Yao Yaowen(1.Dep.of Computer Sciences and Engineering.South China University of Technology,Guangzhou 510641;2.Dept.of Informatics,Guangzhou School of Finauce,Guangzhou 510521)【Abstract】In this paper discuses and studies the characteristic of Oracle service and theory about Oracle service based on Client/Server.It also gives the way to improve and ture the performance of Oracle based on Client/Server【Key words】Oracle;Cclient/Server;SGA;Network I/O;Rollback SegmentOracle 数据库广泛应用在社会的各个领域,特别是在Client/Server模式的应用,但是应用开发者往往碰到整个系统的性能随着数据量的增大显著下降的问题,为了解决这个问题,从以下几个方面:数据库服务器、网络I/O、应用程序等对整个系统加以调整,充分发挥Oracle的效能,提高整个系统的性能。
1 调整数据库服务器的性能Oracle数据库服务器是整个系统的核心,它的性能高低直接影响整个系统的性能,为了调整Oracle数据库服务器的性能,主要从以下几个方面考虑:1.1 调整操作系统以适合Oracle数据库服务器运行Oracle数据库服务器很大程度上依赖于运行服务器的操作系统,如果操作系统不能提供最好性能,那么无论如何调整,Oracle数据库服务器也无法发挥其应有的性能。
1.1.1 为Oracle数据库服务器规划系统资源据已有计算机可用资源, 规划分配给Oracle服务器资源原则是:尽可能使Oracle服务器使用资源最大化,特别在Client/Server中尽量让服务器上所有资源都来运行Oracle服务。
1.1.2 调整计算机系统中的内存配置多数操作系统都用虚存来模拟计算机上更大的内存,它实际上是硬盘上的一定的磁盘空间。
当实际的内存空间不能满足应用软件的要求时,操作系统就将用这部分的磁盘空间对内存中的信息进行页面替换,这将引起大量的磁盘I/O操作,使整个服务器的性能下降。
为了避免过多地使用虚存,应加大计算机的内存。
1.1.3 为Oracle数据库服务器设置操作系统进程优先级不要在操作系统中调整Oracle进程的优先级,因为在Oracle数据库系统中,所有的后台和前台数据库服务器进程执行的是同等重要的工作,需要同等的优先级。
所以在安装时,让所有的数据库服务器进程都使用缺省的优先级运行。
1.2 调整内存分配Oracle数据库服务器保留3个基本的内存高速缓存,分别对应3种不同类型的数据:库高速缓存,字典高速缓存和缓冲区高速缓存。
库高速缓存和字典高速缓存一起构成共享池,共享池再加上缓冲区高速缓存便构成了系统全程区(SGA)。
SGA是对数据库数据进行快速访问的一个系统全程区,若SGA本身需要频繁地进行释放、分配,则不能达到快速访问数据的目的,因此应把SGA放在主存中,不要放在虚拟内存中。
内存的调整主要是指调整组成SGA的内存结构的大小来提高系统性能,由于Oracle数据库服务器的内存结构需求与应用密切相关,所以内存结构的调整应在磁盘I/O调整之前进行。
1.2.1 库缓冲区的调整库缓冲区中包含私用和共享SQL和PL/SQL区,通过比较库缓冲区的命中率决定它的大小。
要调整库缓冲区,必须首先了解该库缓冲区的活动情况,库缓冲区的活动统计信息保留在动态性能表v$librarycache 数据字典中,可通过查询该表来了解其活动情况,以决定如何调整。
Select sum(pins),sum(reloads) from v$librarycache;Pins列给出SQL语句,PL/SQL块及被访问对象定义的总次数;Reloads列给出SQL 和PL/SQL块的隐式分析或对象定义重装载时在库程序缓冲区中发生的错误。
如果sum(pins)/sum(reloads) ≈0,则库缓冲区的命中率合适;若sum(pins)/sum(reloads)>1, 则需调整初始化参数shared_pool_size来重新调整分配给共享池的内存量。
1.2.2 数据字典缓冲区的调整数据字典缓冲区包含了有关数据库的结构、用户、实体信息。
数据字典的命中率,对系统性能影响极大。
数据字典缓冲区的使用情况记录在动态性能表v$librarycache中,可通过查询该表来了解其活动情况,以决定如何调整。
Select sum(gets),sum(getmisses) from v$rowcache;Gets列是对相应项请求次数的统计;Getmisses 列是引起缓冲区出错的数据的请求次数。
对于频繁访问的数据字典缓冲区,sum(getmisses)/sum(gets)并发事物(n)回滚段数n2 调整Client/Server 模式下的网络I/OClient/Server环境中的应用处理是分布在客户应用程序和数据库服务程序之间的。
在Client/Server环境中Client与Server之间的网络I/O是整个系统性能提高的瓶颈,一个客户应用程序引起的网络I/O越少,应用及整个系统的性能越好。
减少网络I/O的最重要的一条原则:将应用逻辑集中在数据库服务器中。
2.1 使用Oracle数据库的完整约束性当为应用建表时,应当为一些有特殊要求的数据加上适当的完整性约束,这样就能实现由数据库本身而不是应用程序来约束数据符合一定的条件。
数据库服务器端的完整约束的执行操作是在比SQL语句级别更低的系统机制上优化,它与客户端无关,只在服务器中运行,不需在Client 端和Server端之间传递SQL 语句,有效地减轻网络I/O负担。
2.2 使用数据库触发器完整约束性只能实现一些较简单的数据约束条件,对一些较复杂的事物处理规则就无能为力,这时最好不要在应用程序中实施复杂的程序控制,而是应当采用数据库触发器来实施复杂的事物规则。
数据库触发器能实现由数据库本身,而不是应用程序,来约束数据符合复杂的事物处理规则,并且容易创建,便于管理,避免大量的网络I/O。
例如:将当前表A中成为历史的记录从A表中转储到历史表B中,表示为Lsbs。
在应用程序中实现:用数据库触发器实现:Beign Create trigger delete1Update A set lsbs='T';After update of lsbs on AInsert into B For each rowSelect * from A where lsbs='T'; Insert into BDelete A where lsbs='T';select * from A where :new.lsbs='T';End;Delete A where :new.lsbs='T';End delete1;在应用程序中实现时,所有的SQL命令请求传送的数据都要通过网络在Client端和Server端进行交换,而不像数据库触发器一样,SQL本身在Server端,不需要通过网络传输数据。
当进行操作的数据量相当大时,并且多个用户同时操作时,通过在应用程序中实现复杂的控制,必将增大网络I/O的负荷,使整个系统的性能降低,而用数据库触发器能完全避免这种情况发生。
2.3 使用存储过程、存储函数和包Oracle的存储过程和存储函数是命名的能完成一定功能并且存储在Server端的PL/SQL的集合。
包是一种把有关的过程和函数组织封装成一个数据库程序单元的方法。
它们相对于应用程序的过程、函数而言,把SQL命令存储在Server端。
使用存储过程和存储函数,应用程序不必再包含多个网络操作的SQL语句去执行数据库服务器操作,而是简单调用存储过程和存储函数,在网络上传输的只是调用过程的名字和输出结果,这样就可减少大量的网络I/O。
例如:基表A、B的定义:name char(20);detail char(10);A表100万记录,应用程序将从基表A 中检索detail列符合给出条件的记录,并将之插入基表B。
DeclareCursor cursor1 is select*from A;poin cursor1%type;con1 number(2);res1 char(4)='abcd';Begin Insert into B values(,poin.detail);end if;For poin in cursor1 loop End loop;End loop;For con1 in 1..7 loop Commit;If substr(poin.detail ,con1,4)=res1 then End;如果在Developer/2000 From中按钮触发器直接用PL/SQL实现和把它改写为一个Oracle存储过程,然后在From中调用此过程实现比较,后者性能显著提高。
在考虑使用上述3种方法时:首先考虑使用完整约束性。
对于数据库触发器和存储过程,如果需要所有访问数据库的程序自动实施一定规则或检查,那么使用数据库触发器;如果只需对少数的程序实施一定的规则或检查,则可创建一个过程,让有关程序调用这个过程。
3 应用程序的调整3.1 SQL语句的优化SQL语句的执行速度,可以受很多因素的影响而变化。
但主要的影响因素是:驱动表、执行操作的先后顺序和索引的运用。
可以由很多不同的方法间接地改变这些因素,以达到最优的执行速度。
这里主要探讨当对多个表进行连接查询时应遵循的优化原则:(1) 用于连接的子句的列应被索引、在Where子句中应尽量利用索引,而不是避开索引。
(2) 连接操作应从返回较少行上驱动。
(3) 如果所连接的表A和B,A表长度远远大于B表,建议从较大的A表上驱动。