版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大型ORACL数据库优化设计方案本文主要从大型数据库 ORACLE境四个不同级别的调 整分析入手,分析ORACL的系统结构和工作机理,从 九个不同方面较全面地总结了 ORACL数据库的优化调 整方案。关键词ORACL瞰据库 环境调整 优化设计 方案对于ORACL数据库的数据存取,主要有四个不同的调整级别,第一级调整是操作系统级包括硬件平台,第二级调整是ORACLE RDB阙勺调整,第三级是数据库设计级的调整,最后一个调整级是SQLao通常依此四级调整级别对数据库进行调整、优化,数据库的整体性能会得到很大的改善。下面从九个不同方面介绍ORACL数据库优化设计方案。一、数据库优化自由结构 OFA(
2、Optimal flexible Architecture)数据库的逻辑配置对数据库性能有很大的影响,为此,ORACL虫司对表空间设计提出了一种优化结构OFA使用这种结构进行设计会大大简化物理设计中的数据管理。优化自由结构 OFA,简单地讲就是在数据库中可以高效自由地分布逻辑数据对象,因此首先要对数据库中的逻辑对象根据他们的使用方式和物理结构对数据库的影响来进行分类,这种分类包括将系统数据和用户数据分开、一般数据和索引数据分开、低活动表和高活动表分开等等。数据库逻辑设计的结果应当符合下面的准则:(1)把 以同样方式使用的段类型存储在一起;(2)按照标准使用来设计系统;(3)存在用于例外的分离区
3、域; (4)最小化表空间冲突;(5)将数据字典分离。二、充分禾1J用系统全局区域 SGA(SYSTEM GLOBAL AREA)SGA oracle数据库的心脏。用户的进程对这个内存 区发送事务,并且以这里作为高速缓存读取命中的数 据,以实现加速的目的。正确的 SG秋小对数据库的性能至关重要。SG鲍括以下几个部分:1、数据块缓冲区(data block buffer cache )是 SGA 中的一块高速缓存,占整个数据库大小的1%-2%用来存储数据库重读取的数据块(表、索引、簇等), 因此采用least recently used (LRU, 最近最少使用) 的方法进行空间管理。2、字典缓冲
4、区。该缓冲区内的信息包括用户账号数据、数据文件名、段名、盘区位置、表说明和权限, 它也采用LRU方式管理。3、重做日志缓冲区。该缓冲区保存为数据库恢复过程 中用于前滚操作。4、SQL共享池。保存执行计划和运行数据库的 SQL语 句的语法分析树。也采用LRU算法管理。如果设置过 小,语句将被连续不断地再装入到库缓存,影响系统性能。另外,SGAa包括大池、JAVA池、多缓冲池。但是主 要是由上面4种缓冲区构成。对这些内存缓冲区的合 理设置,可以大大加快数据查询速度,一个足够大的 内存区可以把绝大多数数据存储在内存中,只有那些 不怎么频繁使用的数据,才从磁盘读取,这样就可以大大提高内存区的命中率。三
5、、规范与反规范设计数据库1、规范化范式是符合某一级别的关系模式的集合,根据约束条 件的不同,一般有1NR 2NR 3NF三种范式。规范化 理论是围绕这些范式而建立的。规范化的基本思想是 逐步消除数据依赖中不合适的部分,使模式中的各关 系模式达到某种程度的“分离”,即采用“一事一地”的模式设计原则,因此,所谓规范化实质上就是 概念的单一化。数据库中数据规范化的优点是减少了 数据冗余,节约了存储空间,相应逻辑和物理的I/O次数减少,同时加快了增、删、改的速度。但是一个 完全规范化的设计并不总能生成最优的性能,因为对 数据库查询通常需要更多的连接操作,从而影响到查 询的速度。故有时为了提高某些查询或
6、应用的性能而 有意破坏规范规则,即反规范化。2、反规范化反规范的必要性是否规范化的程度越高越好呢?答案是否定的,应根 据实际需要来决定,因为“分离”越深,产生的关系 越多,结构越复杂。关系越多,连接操作越频繁,而 连接操作是最费时间的,在数据库设计中特别对以查 询为主的数据库设计来说,频繁的连接会严重影响查 询速度。所以,在数据库的设计过程中有时故意保留 非规范化约束,或者规范化以后又反规范,这样做通 常是为了改进数据库的查询性能,加快数据库系统的 响应速度。反规范技术在进行反规范设计之前,要充分考虑数据的存取需 求,常用表的大小、特殊的计算、数据的物理存储 等。常用的反规范技术有合理增加冗余
7、列、派生列, 或重新组表几种。反规范化的好处是降低连接操作的 需求、降低外码和索引数目,减少表的个数,从而提 高查询速度,这对于性能要求相对较高的数据库系统 来说,能有效地改善系统的性能,但相应的问题是可 能影响数据的完整性,加快查询速度的同时降低修改 速度。3、数据库设计中的优化策略数据应当按两种类别进行组织:频繁访问的数据和频 繁修改的数据。对于频繁访问但是不频繁修改的数据,内部设计应当物理不规范化。对于频繁修改但并 不频繁访问的数据,内部设计应当物理规范化。比较 复杂的方法是将规范化的表作为逻辑数据库设计的基 础,然后再根据整个应用系统的需要,物理地非规范 化数据。规范与反规范都是建立在
8、实际的操作基础之 上的约束,脱离了实际两者都没有意义。只有把两者 合理地结合在一起,才能相互补充,发挥各自的优点。四、合理设计和管理表1、利用表分区分区将数据在物理上分隔开,不同分区的数据可以制 定保存在处于不同磁盘上的数据文件里。这样,当对 这个表进行查询时,只需要在表分区中进行扫描,而 不必进行FTS(Full Table Scan ,全表扫描),明显缩短了查询时间,另外处于不同磁盘的分区也将对这个 表的数据传输分散在不同的磁盘I/O , 一个精心设置的分区可以将数据传输对磁盘I/O竞争均匀地分散开。2、避免出现行连接和行迁移在建立表时,由于参数 pctfree 和pctused不正确的
9、设置,数据块中的数据会出现行链接和行迁移,也就 是同一行的数据不保存在同一的数据块中。如果在进 行数据查询时遇到了这些数据,那么为了读出这些数 据,磁头必须重新定位,这样势必会大大降低数据库 执行的速度。因此,在创建表时,就应该充分估计到 将来可能出现的数据变化,正确地设置这两个参数,尽量减少数据库中出现行链接和行迁移。3、控制碎片碎片(fragmentation) 是对一组非邻接的数据库对象的 描述。碎片意味着在执行数据库的功能时要耗费额外 的资源(磁盘I/O ,磁盘驱动的循环延迟,动态扩展, 链接的块等),并浪费大量磁盘空间。当两个或多个 数据对象在相同的表空间中,会发生区间交叉。在动 态
10、增长中,对象的区间之间不再相互邻接。为了消除 区间交叉将静态的或只有小增长的表放置在一个表空问中,而把动态增长的对象分别放在各自的表空问中。在 create table 、create index 、createtablespace、create cluster 时,在 storage 子句中的参数的合理设置,可以减少碎片的产生。4、别名的使用别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。5、回滚段的交替使用由于数据库配置对应用表具有相对静止的数据字典和 极高的事务率特点。而且数据库的系统索引段、数据 段也具有相对静止,并发现在应用中最高的
11、负荷是回 滚段表空间。把回滚段定义为交替引用,这样就达到 了循环分配事务对应的回滚段,可以使磁盘负荷很均 匀地分布。五、索引Index的优化设计1、管理组织索引索引可以大大加快数据库的查询速度,索引把表中的 逻辑值映射到安全的RowIR因此索引能进行快速定位数据的物理地址。但是有些 DBAt现,对一个大型表 建立的索引,并不能改善数据查询速度,反而会影响 整个数据库的性能。这主要是和 SGA勺数据管理方式 有关。ORACL在进行数据块高速缓存管理时,索引数 据比普通数据具有更高的驻留权限,在进行空间竞争 时,ORACL会先移出普通数据。对一个建有索引的大 型表的查询时,索引数据可能会用完所有的
12、数据块缓 存空间,ORACL不得不频繁地进行磁盘读写来获取数 据,因此在对一个大型表进行分区之后,可以根据相 应的分区建立分区索引。如果对这样大型表的数据查询比较频繁,或者干脆不建索引。另外,DBAJ建索引时,应尽量保证该索引最可能地被用于 where子句中,如果对查询只简单地制定一个索引,并不一定会 加快速度,因为索引必须指定一个适合所需的访问路 径。2、聚簇的使用Oracle提供了另一种方法来提高查询速度,就是聚簇 (Cluster ) o所谓聚簇,简单地说就是把几个表放在 一起,按一定公共属性混合存放。聚簇根据共同码值 将多个表的数据存储在同一个 Oracle块中,这时检索 一组Orac
13、le块就同时得到两个表的数据,这样就可以 减少需要存储的Oracle块,从而提高应用程序的性 能。3、优化设置的索引,就必须充分利用才能加快数据库 访问速度。ORACL酸使用一个索引,有一些最基本的 条件:1)、where子名中的这个字段,必须是复合索 引的第一个字段;2)、where子名中的这个字段,不 应该参与任何形式的计算。六、多 CPUffi并行查询 PQO(Parallel Query Option) 方式的利用1、尽量利用多个CP3理器来执行事务处理和查询CPUB快速发展使得ORACL越来越重视对多CPU的并行技术的应用,一个数据库的访问工作可以用多个CPU相互配合来完成,加上分布
14、式计算已经相当普遍,只 要可能,应该将数据库服务器和应用程序的CPUW求分开,或将CPU青求从一个岁务器移到另一个服务 器。对于多CPU系统尽量采用Parallel QueryOption(PQO,并行查询选项)方式进行数据库操作。2、使用 Parallel Query Option(PQO,并行查询选择)方式进行数据查询使用PQQT式不仅可以在多个 CPU诃分配SQL语句的 请求处理,当所查询的数据处于不同的磁盘时,一个个独立的进程可以同时进行数据读取。3、使用SQL*Loader Direct Path 选项进行大量数据 装载使用该方法进行数据装载时,程序创建格式化数据块 直接写入数据文件
15、中,不要求数据库内核的其他I/O。七、实施系统资源管理分配计划ORACL提供了 Database Resource Manager (DRM,t 据库资源管理器)来控制用户的资源分配,DBAM以用它分配用户类和作业类的系统资源百分比。在一个OLD陈统也 可给联机用户分配 75%勺CPUK源,乘U 下的25麻给批用户。另外,还可以进行 CPU勺多级分 配。除了进行CPUIT源分配外,DR皿可以对资源用户 组执行并行操作的限制。八、使用最优的数据库连接和 SQL优化方案 1、使用直接的OLE D吸据库连接方式。通过AD3以使用两种方式连接数据库,一种是传统 的ODBg式,一种是 OLE DB方式。
16、ADO建立在 OLE DB技术上的,为了支持ODBC必须建立相应的OLE DB 到ODBC勺调用转换,而使用直接的 OLE DB方式则不 需转换,从而提高处理速度。2、使用 Connection Pool 机制在数据库处理中,资源花销最大的是建立数据库连 接,而且用户还会有一个较长的连接等待时间。解决 的办法就是复用现有的 Connection ,也就是使用Connection Pool 对象机制。Connection Pool的原理是:IIS+ASP体系中维持了一 个连接缓冲池,这样,当下一个用户访问时,直接在 连接缓冲池中取得一个数据库连接,而不需重新连接数据库,因此可以大大地提高系统的响
17、应速度。3、高效地进行SQL语句设计通常情况下,可以采用下面的方法优化 SQLM数据操 作的表现:(1)减少对数据库的查询次数,即减少对系统资源的 请求,使用快照和显形图等分布式数据库对象可以减 少对数据库的查询次数。(2)尽量使用相同的或非常类似的 SQL语句进行查询,这样不仅充分利用SQL共享池中的已经分析的语 法树,要查询的数据在SGA中命中的可能性也会大大 增加。(3)限制动态SQL的使用,虽然动态SQL很好用,但是即使在SQL共享池中有一个完全相同的查询值,动 态SQLtil会重新进行语法分析。(4)避免不带任何条件的SQ时句的执行。没有任何 条件的SQL吾旬在执行时,通常要进行 F
18、TS,数据库先 定位一个数据块,然后按顺序依次查找其它数据,对 于大型表这将是一个漫长的过程。(5)如果对有些表中的数据有约束,最好在建表的SQL语句用描述完整性来实现,而不是用 SQL程序中实 现。(6)可以通过取消自动提交模式,将 SQL语句汇集一 组执行后集中提交,程序还可以通过显式地用COMMIT和ROLLBAC进行提交和回滚该事务。(7)检索大量数据时费时很长,设置行预取数则能改 善系统的工作表现,设置一个最大值,当 SQL语句返 回行超过该值,数值库暂时停止执行,除非用户发出新的指令,开始组织并显示数据,而不是让用户继续 等待。九、充分利用数据的后台处理方案减少网络流量1、合理创建
19、临时表或视图所谓创建临时表或视图,就是根据需要在数据库基础 上创建新表或视图,对于多表关联后再查询信息的可 建新表,对于单表查询的可创建视图,这样可充分利 用数据库的容量大、可扩充性强等特点,所有条件的 判断、数值计算统计均可在数据库服务器后台统一处 理后追加到临时表中,形成数据结果的过程可用数据 库的过程或函数来实现。2、数据库打包技术的充分利用利用数据库描述语言编写数据库的过程或函数,然后 把过程或函数打成包在数据库后台统一运行包即可。3、数据复制、快照、视图,远程过程调用技术的运用 数据复制,即将数据一次复制到本地,这样以后的查 询就使用本地数据,但是只适合那些变化不大的数据。使用快照也
20、可以在分布式数据库之间动态复制数 据,定义快照的自动刷新时间或手工刷新,以保证数 据的引用参照完整性。调用远程过程也会大大减少因 频繁的SQL吾句调用而带来的网络拥挤。总之,对所有的性能问题,没有一个统一的解决方法,但ORACL提供了富的选择环境,可以从 ORACLE 数据库的体系结构、软件结构、模式对象以及具体的 业务和技术实现出发,进行统筹考虑。提高系统性能需要一种系统的整体的方法,在对数据库进行优化时,应对应用程序、I/O子系统和操作系统(OS进行相应的优化。优化是有目的地更改系统的一个或多个组件,使其满足一个或多个目标的过程。对 Oracle来 说,优化是进行有目的的调整组件级以改善性
21、能,即 增加吞吐量,减少响应时间。如果DBA能从上述九个方面综合考虑优化方案)相信多数ORACL应用可以做到按最优的方式来存取数据。我们要做到不但会写SQL还要做到写出性能优良的SQL以下为笔者学习、摘 录、并汇总部分资料与大家分享!选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACL的解析器按照从右到左的顺序处理 FROMf句中的表名,FROMF旬中 写在最后的表(基础表driving table) 将被最先处理,在FROMf旬中包含多个表 的情况下,你必须选择记录条数最少的表作为基础表。如果有 3个以上的表连接查 询,那就需要选择交叉表(intersection table)
22、作为基础表,交叉表是指那个被其 他表所引用的表.WHER&句中的连接顺序.:ORACL采用自下而上的顺序解析 WHERE旬,根据这个原理,表之间的连接必 须写在其他 WHERE件之前,那些可以过滤掉最大数量记录的条件必须写在 WHERE 子旬的末尾.SELECT子句中避免使用 *ORACLEE解析的过程中,会将*依次转换成所有的列名,这个工作是通过 查询数据字典完成的,这意味着将耗费更多的时间(4)减少访问数据库的次数:ORACL在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变 量,读数据块等;在 SQL*Plus , SQL*Forms 和 Pro*C 中重新设置 ARRAYS
23、IZE参数,可以增加每次数据库访问的检索数据量,建议值为200使用DECOD函数来减少处理时间:使用DECODE数可以避免重复扫描相同记录或重复连接相同的表.decode (expression, search,result_1)decode (expression, search,result_1, search_2, result_2)decode (expression, search,result_1, search_2, result_2, .,search_n, result_n)decode (expression, search_1, result_1, default)dec
24、ode (expression, search,result_1, search_2, result_2, default)decode (expression, search,result_1, search_2, result_2, .,search n, result n, default) decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回 default值;如果未定义default值,则返回空值。以下是一个简单测试,用于说明Decode函数的用法:SQL create table t as select username,default_tablespace,l
25、ock_date from dba_users;Table created.SQL select * from t;USERNAME DEFAULT_TABLESPACE LOCK_DATESYS SYSTEMSYSTEM SYSTEMOUTLN SYSTEMCSMIG SYSTEMSCOTT SYSTEMEYGLE USERSDBSNMP SYSTEMWMSYS SYSTEM 20-OCT-048 rows selected.SQL select username,decode(lock_date,null,unlocked,locked) status from t;USERNAME ST
26、ATUSSYS unlockedSYSTEM unlockedOUTLN unlockedCSMIG unlockedSCOTT unlockedEYGLE unlockedDBSNMP unlockedWMSYS locked8 rows selected.SQL select username,decode(lock_date,null,unlocked) status from t; USERNAME STATUSSYS unlockedSYSTEM unlockedOUTLN unlockedCSMIG unlockedSCOTT unlockedEYGLE unlockedDBSNM
27、P unlockedWMSYS8 rows selected.整合简单,无关联的数据库访问:如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使 它们之间没有关系)删除重复记录:最高效的删除重复记录方法(因为使用了 ROWID)J子:DELETE FROM EMP E WHERE E.ROWID (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO);用 TRUNCATE代 DELETE当删除表中的记录时,在通常情况下,回滚段(rollback segments ) 用来存 放可以被恢复的信息.如果你没有COMMI事
28、务,ORACL会将数据恢复到删除之前 的状态(准确地说是恢复到执行删除命令之前的状况)而当运用TRUNCATE,回滚 段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源 被调用,执行时间也会很短.(译者按:TRUNCATED在删除全表适用,TRUNCATEI DDL不是 DML)尽量多使用 COMMIT只要有可能,在程序中尽量多使用COMMIT,这样程序的性能得到提高,需求也 会因为COMMI所释放的资源而减少:COMMI所释放的资源:a,回滚段上用于恢复数据的信息.b.被程序语句获得的锁redo log buffer 中的空间ORACLE为管理上述3种资源中的内部花费
29、用 Where子句替换HAVING?旬:避免使用HAVINGF旬,HAVING只会在检索出所有记录之后才对结果集进行 过滤,这个处理需要排序,总计等操作,如果能通过WHERE句限制记录的数目,那 就能减少这方面的开销,(非oracle中)on、where、having这三个都可以加条件 的子句中,on是最先执行,where次之,having最后,因为on是先把不符合条件 的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度 是最快的,where也应该比having快点的,因为它过滤数据后才进行 sum,在两个 表联接时才用on的,所以在一个表的时候,就剩下 where跟having比较了。在这 单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果 是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者 要慢如果要涉及到计算的字段,就表示在没计算之前,这个字段
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 前台的辞职报告模板合集七篇
- 迎新年晚会意义策划
- 2023一年级数学上册 八 认识钟表(小明的一天)教学实录 北师大版
- 2024-2025学年新教材高中化学 第五章 化工生产中的重要非金属元素 1.3 硫酸根离子检验、硫和含硫化合物的相互转化教学实录 新人教版必修2
- 2024秋八年级道德与法治上册 第一单元 成长的空间 第一课 相亲相爱一家人(他们这样做的原因)教学思路 人民版
- 2024年某城市地铁线路建设及运营管理长期租赁合同
- 实际正常和标准成本法ActualNormalandStandardCosting
- 广州市来穗人员服务管理局来穗人员积分制服务管理信息系统
- 2022天宫课堂第三课观后感10篇范文
- 2023二年级数学下册 7 万以内数的认识第8课时 近似数教学实录 新人教版
- 农产品加工与贮藏原理复习资料
- (正式版)JBT 5300-2024 工业用阀门材料 选用指南
- 工艺工程师的成长计划书
- 幼儿园大班音乐教案《爆米花》教学反思
- 家政运营方案
- 会展英语教学大纲
- 行政单位固定资产盘点报告
- 机电系统综合调试方案
- 光学焦度计的原理与应用
- 分包商质量和安全和进度管理
- 我不是药神电影赏析
评论
0/150
提交评论