




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、优化前提应用系统方案制定准确,对应用系统运行环境分析合理、正确,在数据库服务器性能、存储空间、网络带宽等方面的配置能够达到系统运行要求. 2、优化目标l 响应时间与吞吐量平衡l 临界资源2.1 响应时间与吞吐量平衡根据应用类型的不同,性能优化的目标不同:在线事务处理系统OLTP)把吞吐量定义为性能指标;决策支持系统(DSS)把响应时间定义为性能指标。响应时间响应时间=服务时间+等待时间系统吞吐量系统吞吐量指在给定的时间内所完成的工作量。有以下两种技术:l 以相同的资源来完成更多的工作(减少服务时间);l 通过减少整个响应时间来更快完成工作。等待时间当竞争增强的时候,某个任务的服务时间也许保持不变,但它的等待时间将增长。我们开发的系统一般为OLTP和DSS的复合系统,侧重于OLTP,在硬件允许的情况下最好能够将运行数据库、分析数据库分离。2.2 临界资源诸如 CPU、内存、I/O容量、网络带宽等资源,都是减少时间的关键因素。性能好坏取决于以下因素:l 可用资源的数量l 需要该资源的客户方的数目l 客户方等待资源所消耗的时间l 客户保持资源的时间长短随着请求单元的增加,服务时间也增加。为了处理这种情形,用户可以选择:l 通过限制请求的速率,从而维护可接受响应时间l 还可通过增加资源数目,如CPU和硬盘(增加资源的前提是应用系统设计良好,并且已经做了充分的优化)3、优化阶段从实际做的项目过程来看,除了系统安装优化外,系统优化往往都是在系统实施、运行时才考虑,其实到这阶段做系统优化的局限性比较大,因为系统架构设计都成型、固化,大幅度调整设计的代价非常昂贵,一般只能在局部领域做优化,只能通过重新分配内存或优化I/O来或多或少地提高性能,实际上优化应该贯穿系统设计、开发、安装、测试、运行整个过程。3.1 设计阶段为了达到最佳的效果,优化工作应当从设计阶段进行,而不是在系统实施后进行。在数据库设计阶段,个人认为需要注意如下几个方面:l 业务对象不能建立在系统表空间;l 索引表空间和业务表空间分开;l 将LOB类型的字段与其它的类型分开;l 根据应用系统功能确定是否要采用冗余字段;l 正确的主键字段的选择,建议采用数字,不推荐使用复合主键;3.2 开发、测试阶段在开发实现阶段,个人认为需要注意如下几个方面:l 执行sql使用变量绑定的方式,尽可能的保留在共享内存中,提高sql命中率;l 多表关联查询时采用有效的连接顺序;l 尽可能的降低客户端和服务器的网络数据交互,某个业务功能点需要频繁和数据库交互的,建议采用存储过程、临时表实现;l 根据查询条件建立必要的索引,查询条件中使用oracle函数建立相对应的函数索引,数据值范围较小的采用位图索引l 多张表关联查询时,有时可采用先查询符合条件对应的表中关键字,然后通过关键字再查询对应表中相关信息;l 频繁访问,较少更新的数据量较小的表信息可采用缓存的方式;l 在实现批量更新、插入时,要采用jdbc批量执行方法,并且调整对应的fetchsize参数。在测试阶段,应该模拟实际运行环境,测试出相关性能较差的功能点。因为在设计、开发阶段往往因为并发用户少、数据量小,很多性能问题显现不出来,如果软件测试充分,很多性能问题都可以显现出来,现在有很多优秀的软件测试工具,如LoadRunner、Robert在做压力测试方面都比较方便、优秀。尽量将系统因程序设计、编码不当导致的性能问题暴露在测试阶段。3.3 安装阶段一般在安装生产数据库时,我们根据系统最早的规划,集合软、硬件环境,需要调整操作系统以及数据库参数,3.3.1操作系统交换区交换区是Oracle的一项基本的要求。可以根据Oracle的发行要求来确定。一般交换区大小的要求是该服务器内存的2倍至4倍之间,建议是内存的4倍3.3.2操作系统内核参数shmmax 共享内存段,建议设大点, 达到最大SGAshmmin 最小的共享内存段.shmmni 共享内存标志符的数量.shmseg 一个进程可分配的最大内存段数.shmall 最大可允许的内存数,比SGA还要大.semmns信号量,跟ORACLE的PROCESS数有关.semmsl 一个信号量中最大的信号量数.3.3.3 oracle 文件设置当服务器平台已完成操作系统的安装后,就应该开始认真的考虑下面的问题:l 是否采用裸设备实际应用的生产系统基本都是采用裸设备,使用裸设备对于读写频繁的数据库应用来说,可以极大地提高数据库系统的性能。l 安装点的考虑Oracle的安装点就是指数据文件、日志文件和控制文件的安置路径,为了使系统在以后运行性能达到优化,建议将数据文件、日志文件和控制文件的安置路径与数据库系统存放在不同的路径上。最好将数据文件、日志文件和控制文件分别存放在不同的路径。l SYSTEM表空间对应数据文件在自定义安装会话中,建议你根据需要设置system表空间所对应的数据文件的大小。一般要设置比默认值的2倍。该数据文件的大小最好是在300MB至500MB间。因为数据文件太小不利于系统的运行。l 临时表空间对应的数据文件临时表空间对应的数据文件可以根据将来系统存放的应用的处理情况来定。比如系统将来可能要经常进程排序处理,则需要设置较大的临时表空间,也可能需要再建立新的临时表空间。这里建议临时表空间的数据文件在100MB至300MB左右。l 回滚段表空间对应的数据文件9i回滚表空间都是系统管理,初始值也是根据系统事务量预估计的值,实际到运行阶段如果系统常出现ora-01555错误的时候,可能就需要增加回滚表空间的大小。l 日志文件的大小日志文件的大小对于Oracle系统的运行也是相当重要。默认值是太小。实际根据事务繁忙预估计日志大小,没有固定的具体值范围,建议重做日志切换时间不能过短也不能过长,一般在2040分钟左右。该参数可以在系统运行期间根据数据库系统日志切换时间重新调整,控制文件的大小。l 数据库块的大小如果你的应用系统是OLTP的话,可以采用较小的数据库块。如果是DSS类型的应用系统,则可以设置较大的数据库块,目前Oracle产品所允许的数据库块可以是2KB至64KB之间。无论你选择较大的块或较小的块,它的值都必须是2的整数倍,比如2048,4096,8192等。但需要注意的是,如果操作系统为64位,则可选择较大的块。l 字符集的选择字符集是Oracle系统专门支持的一项技术。详细请参考另外的章节。一般不要与另外的已经存放的Oracle系统的字符集产生冲突即可。但如果你的环境是一个新的平台,不需要与其它平台进行数据交换的话,建议选择默认的字符集。这样可以利于将来的修改。3.3.4数据库启动参数sga_max_size例程存活期间所占用的系统全局区的最大大小,一般为物理内存的1/2-1/3shared_pool_size指定共享池的大小,共享池包含:共享游标、存储的过程、控制结构和并行执行消息缓冲区等对象,较大的值用于改善多用户系统的性能,该参数调整不能过大,会增加管理负担和latch 的开销,一般是在200M-500M左右db_cache_size该参数指定数据缓冲区的大小,原则上时越大越好,取代了8i中的db_block_size * db_block_bufferslog_buffer重做日志缓冲区大小,该参数设置大没有意义,Oracle推荐log_buffer最大为cpu_count乘以128KB或512KB中最大值processes系统用户进程的最大数量,该参数设置为系统最繁忙时估计并发用户数large_pool_size 如果不设置MTS,通常在 RMAN 、OPQ 会使用到,但是在10M -50M应该差不多了。可以考虑为 session * (sort_area_size + 2M)。Java_pool_size 它用于存放java代码,若不使用java,建议设置为30Mpga_aggregate_target程序全局区大小,1.对于OLTP系统PGA_AGGREGATE_TARGET = ( * 80%) * 20% 2.对于DSS系统PGA_AGGREGATE_TARGET = ( * 80%) * 50%timed_statistics建议将timed_statistics 设置为true,否则无法查看到准确的统计信息(9i版本后的设置为true对系统性能影响较小,千分之一)上述参数基本是初始估计值,在运行阶段可能会根据实际运行情况再调整。3.4 运行阶段这也是实际优化工作最多的阶段,个人认为运行阶段优化的真正工作是解决因为实际运行数据库参数设置不当、表、索引统计信息不准确,执行路径不当等导致的性能问题。优化工作应该作为日常工作的一部分,而不是等到用户反映系统慢,系统宕机时才去优化,那时已经是亡羊补牢,为时有点晚,从实际项目来看,往往都是应用程序编写的sql、表、索引统计信息不准确,执行路径不当而导致的性能问题,个人认为一般的sql调优还是有章可循的,基本三步: 查找、分析、优化。3.4.1查找3.4.1.1 非实时查找查找工具常用的就是statspack,该工具的安装、使用比较简便。脚本路径$oracle_home/rdbms/admin目录下,常用脚本如下:spdrop.sql 删除脚本,丢弃统计分析的相关包、视图、表、同义词等对象(首次创建无须执行)spcreate.sql创建脚本,生成统计分析的相关包、视图、表、同义词等对象(首次执行前建议创建一个统计用的表空间)spreport.sql 生成报告记录sql ,生成的报告文件在系统当前路径下,文件名默认为:sp_开始快照号_结束快照号.lst sprepsql.sql 分析相关快照中的sql执行计划。sppurge.sql 删除在两个快照号之间包括本身的所有统计分析数据。sptrunc.sql 截取statspack统计分析的相关数据 在统计分析的对应用户perfstat下执行执行时间:统计时生成两次快照,一般在30-40分钟左右执行方法:用sys登陆sqlplus后间隔对应时间执行两次 exec statspack.snap;统计结果视图:stats$snapshot快照相关信息; select snap_id,snap_time from stats$snapshot;stats$sqltext快照统计sql信息,查询统计sql(statspack报告中sql过长会被截掉)select sql_text from stats$sqltext where hash_value=查询值 and last_snap_id=begin_snap_id order by piece;3.4.1.2 实时查找如果需要实时的查找性能隐患的相关sql,通过v$session_wait,v$session,v$sqltext_with_newlines三张动态视图就可以基本查找到相关的sql,脚本如下:select sql_text ,sw.event from v$sqltext_with_newlines st,v$session se,v$session_wait sw where st.address=se.sql_address and st.hash_value=se.sql_hash_valueand se.sid =sw.sid and (sw.event = buffer busy waits orsw.event = enqueue orsw.event = free buffer waits orsw.event = global cache freelist wait orsw.event = latch free orsw.event = log buffer space orsw.event = parallel query qref latch orsw.event = pipe put orsw.event = write complete waits orsw.event like library cache% orsw.event like log file switch% ) order by st.hash_value,st.piece; 3.4.2分析分析报告个人一般主要关注top 5 event以及相关的读逻辑块、物理块、执行次数较多的sql,实际上更多的侧重在sql分析上一般常见的top 5 事件如下:db file sequential read等待事件,一般问题出现在读索引上,建议将业务表空间和索引表空间分开存储在不同的物理卷下,以提高磁盘的I/O性能。db file scattered read建议程序中尽量避免使用全表扫描的语句,或者可以增大db_file_multiblock_read_count的值,提高全表扫描一次读取数据块的速度,减少磁盘I/O。db file parallel write说明DBWR进程正等待把缓冲区的内容并行写入数据文件中去,等待将一直持续到所有的I/O全部完成。建议增大初始化参数中的db_writer_processes的值。log file sync说明任何时候一个事物提交时,它将通知LGWR将LOG_BUFFER写入日志文件,如果此部分占用时间较长,应减少COMMIT的次数,建议将重做日志放到较快的磁盘上进行存储。log file parallel write等待事件,和上面一样建议将重做日志放到较快的磁盘上进行存储。提取出sql以后就可以进行分析,主要采用分析执行计划的方式。个人一般喜欢如下的方式进行分析:l 生成计划表(初次)以sys用户执行脚本$oracle_home/rdbms/admin/utlxplan.sql,l 创建公用同义词,方便在每个用户下生成执行计划(初次)Create public synonym plan_table for plan_table;Grant all on plan_table to public;l 每次分析时设置sqlplus环境变量Set timing onSet autotrace traceonlyl 查看相关sql执行计划其他客户端软件pl/sql developer,toad 分析执行计划都比较方便。l 执行计划路径解释Full Table Scans全表扫描、无可用索引Index Unique Scans索引唯一扫描IndexRange Scans索引范围扫描IndexRange Scans Descending索引降序范围扫描Index Skip Scans索引跳跃扫描Full Scans全索引扫描Fast Full Index Scans快速全索引扫描Index Joins索引连接Bitmap Joins位图连接常见连接解释:Nested Loops会循环外表(驱动表),逐个比对和内表的连接是否符合条件。基于Cost的Oracle优化器(CBO)会自动选择较小的表做外表。优点:在驱动表比较小,内表比较大,而且内外表的连接列有索引的时候比较好,嵌套循环连接比其他连接方法有优势,它可以快速地从结果集中提取第一批记录,而不用等待整个结果集完全确定下来。缺点:如果内部行源表(读取的第二张表(内表)已连接的列上不包含索引,或者索引不是高度可选时, 嵌套循环连接效率是很低的。SORT- merge JOIN将两表的连接列各自排序然后合并,只能用于连接列相等的情况,适合两表大小相若的情况 优点:在缺乏数据的选择性或者可用的索引时,或者两个源表都过于庞大(超过记录数的5%)时,排序合并连接将比嵌套循环连更加高效。局限性:排列合并连接只能用于等价连接排列合并连接需要临时的内存块,以用于排序( 如果SORT_AREA_SIZE设置得太小的话)。这将导致在临时表空间占用更多的内存和磁盘I/OHASH JOIN在其中一表的连接列上作散列,因此只有另外一个表做排序合并,只有基于代价的优化器才可以使用哈希连接。当缺少有用的索引时,哈希连接比嵌套循环连接更加有效。哈希连接可能比排序合并连接更快,哈希连接使用内存资源,并且当用于排序内存不足时,会增加临时表空间的I/O(这将使这种连接方法速度变得极慢3.4.3优化 Oracle运行阶段优化的更多是对sql的优化,个人理解工作主要是: 分析性能较差sql;调整性能较差的sql的实现方式,协助程序员更改相关程序;对相关的查询条件建立合理的索引;根据需要合理的更新表、索引的程序信息;3.4.3.1 oracle 优化器l 优化器优化方式Oracle的优化器共有两种的优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。A、RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。B、CBO方式:依词义可知,它是看语句的代价(Cost)了,这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是你在做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些我们应及时更新这些信息。在Oracle8及以后的版本,Oracle推荐用CBO的方式。 l 优化器的优化模式(Optermizer Mode)Rule:走基于规则的方式。Choose:默认的情况下Oracle用的是这种方式,不建议修改该参数。指的是当一个表或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式。3.4.3.2 常见优化问题l 明明有索引,表的数据量也非常大,执行路径不走索引 对应表、索引的统计信息有误,可以通过dba_tables,dba_indexes视图中的num_rows查看对应表、索引的统计信息,如果有误,重新统计。 Analyze table table_name compute statistics For table /*统计表*/ For all indexed columns /*统计有索引的表列*/l 统计后性能反而变差 虽然oracle推荐采用CBO方式,但有时对应的执行路径并不是最佳,所 以我们在统计信息时只有针对性的统计相关表、索引信息。 一般有两种处理方法 a. 删除对应的统计信息 Analyze table table_name delete statistics Analyze index index_name delete statistics 对应的系统包dbms_stats也可实现生成、删除表、索引的统计信息 b. 使用hints 明确指定对应的执行路径3.4.3.3 hints常用的几种hints如下:Hint SyntaxDescription优化方式/*+ ALL_ROWS */ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化/*+ CHOOSE */ 表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;/*+ FIRST_ROWS */ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化,在做分页查询时有时可以改善性能/*+ RULE */ 表明对语句块选择基于规则的优化方法处理方法/*+ AND_EQUAL(table index) */ 提示明确进行执行规划的选择,将几个单列索引的扫描合起来.SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO=SCOTT AND DPT_NO=TDC306/*+ CLUSTER(table) */ Explicitly chooses a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理咨询师考试中跨专业合作的必要性试题及答案
- 税务风险防范的实践案例分析试题及答案
- 药剂学模型与计算考试题及答案
- 兴化市学高三级第一学期期中调研测试(政治)
- 药剂药物信息咨询技巧题及答案
- 母猪疫病传播途径考试题及答案
- 目标设定与达成的心理学方法试题及答案
- 卫生管理考试内容分析及客观题型的应对技巧试题及答案
- 知道针灸考试试题及答案
- 激光光学元件试题及答案简析
- 北京市朝阳区2025届高三下学期一模试题 数学 含答案
- 2025届江苏省扬州市中考一模语文试题(含答案)
- 2025年河北省唐山市中考一模道德与法治试题(含答案)
- 2025年一级注册计量师考试题库大全及答案
- 放疗皮肤反应分级护理
- 2025年03月内蒙古鄂尔多斯市东胜区事业单位引进高层次人才和紧缺专业人才50人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 卫生院全国预防接种日宣传活动总结(8篇)
- 小学消防知识教育
- 2024国家电投集团中国电力招聘(22人)笔试参考题库附带答案详解
- 安徽2025年03月合肥高新技术产业开发区管理委员会公开招考60名工作人员笔试历年参考题库考点剖析附解题思路及答案详解
- 2025年第三届天扬杯建筑业财税知识竞赛题库附答案(601-700题)
评论
0/150
提交评论