Oracle的性能优化.ppt

上传人:少林足球 文档编号:4541969 上传时间:2019-11-15 格式:PPT 页数:71 大小:606KB
返回 下载 相关 举报
Oracle的性能优化.ppt_第1页
第1页 / 共71页
Oracle的性能优化.ppt_第2页
第2页 / 共71页
Oracle的性能优化.ppt_第3页
第3页 / 共71页
Oracle的性能优化.ppt_第4页
第4页 / 共71页
Oracle的性能优化.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《Oracle的性能优化.ppt》由会员分享,可在线阅读,更多相关《Oracle的性能优化.ppt(71页珍藏版)》请在三一文库上搜索。

1、Oracle的性能优化,本章学习目标 本章将介绍优化和调整Oracle数据库系统的一些相关命令和方法。,第九章 Oracle的性能优化,本章内容安排,9.1 数据库性能优化概述,9.2 SQL语句的优化,9.3 Oracle运行环境的优化,9.4 并发事件处理,9.5 数据完整性,9.7 常见问题处理,9.1 数据库性能优化概述,9.1.1 数据库性能优化的内容,9.1.2 不同类型系统的优化,(1)调整数据结构的设计。 (2)调整应用程序结构设计。 (3)调整数据库SQL语句。 (4)调整服务器内存分配。 (5)调整硬盘I/O,这一步是在信息系统开发之前完成的。 (6)调整操作系统参数。,9

2、.1.1 数据库性能优化的内容,1在线事务处理信息系统(OLTP) 这种类型的信息系统一般需要有大量的Insert、Update操作。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的Oracle数据库需要主要考虑下述因素或参数: (1)数据库回滚段是否足够? (2)是否需要建立Oracle数据库索引、聚集、散列? (3)系统全局区(SGA)大小是否足够? (4)SQL语句是否高效?,9.1.2 不同类型系统的优化,2数据仓库系统(Data Warehousing) 这种信息系统的主要任务是从Oracle的海量数据中进行查询,得到数据之间的某些规律。数据库管理员需要为这

3、种类型的Oracle数据库着重考虑下述因素或参数: (1)是否采用B*-索引或者bitmap索引? (2)是否采用并行SQL查询以提高查询效率? (3)是否采用PL/SQL函数编写存储过程? (4)是否有必要建立并行数据库,来提高数据库的查询效率。,9.2.2 SQL语句优化的具体方法,9.2.1 SQL语句的优化规则,9.2 SQL语句的优化,9.2.1 SQL语句的优化规则,(1)去掉不必要的大表、全表扫描。不必要的大表、全表扫描会造成不必要的输入输出,而且还会拖垮整个数据库; (2)检查优化索引的使用 这对于提高查询速度来说非常重要; (3)检查子查询,考虑SQL子查询是否可以用简单连接

4、的方式进行重新书写; (4)调整PCTFREE和PCTUSED等存储参数优化插入、更新或者删除等操作; (5)考虑数据库的优化器; (6)考虑数据表的全表扫描和在多个CPU的情况下考虑并行查询。,1索引的使用,2.SQL语句排序优化,3. 选择联合查询的联合次序,9.2.2 SQL语句优化的具体方法,4.SQL子查询的调整,1、索引的使用 (1)尽量使用索引 是全表扫描还是索引范围扫描主要考虑SQL的查询速度问题。试比较下面两条SQL语句: 语句A: SELECT dname,deptno FROM dept WHERE deptno NOT IN(SELECT deptno FROM emp

5、); 语句B: SELECT dname,deptno FROM dept WHERE NOT EXISTS(SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);,(2)索引不起作用的情况 存在数据类型隐形转换 列上有数学运算 使用不等于()运算 使用substr字符串函数 %通配符在第一个字符 字符串连接(|),(3)函数的索引 例如,日期类型是经常用到的,而且在SQL语句中会使用to_char函数以查询具体的的范围日期。如: select * from staff_member where TO_CHAR(birth_day,YYY

6、Y)=2003; 可以建立基于函数的索引如: CREATE INDEX Ind_emp_birth ON staff_member (to_char(birth_day,YYYY);,2.SQL语句排序优化 排序发生的情况如下: SQL中包含group by 子句 SQL 中包含order by 子句 SQL 中包含 distinct 子句 SQL 中包含 minus 或 union操作,3选择联合查询的联合次序 联合查询中如涉及到多个表的字段关联及查询,其SQL查询语句联合次序的不同写法,会导致语句对各表具体操作的步骤有不同的次序,所以虽然执行结果相同,但执行效率却不同。,SQL子查询的调整

7、 (1)关联子查询和非关联子查询 非关联查询的开销非关联查询时子查询只会执行一次,而且结果是排序好的,并保存在一个Oracle的临时段中,其中的每一个记录在返回时都会被父查询所引用。在子查询返回大量的记录的情况下,将这些结果集排序,以及将临时数据段进行排序会增加大量的系统开销。 关联查询的开销对返回到父查询的记录来说,子查询会每行执行一次。因此,必须保证任何可能的时候子查询用到索引。,(2)在子查询中慎重使用IN或者NOT IN语句 在子查询中慎重使用IN或者NOT IN语句,使用where (NOT)exists的效果要好的多。 带IN的关联子查询是多余的,因为IN子句和子查询中相关的操作的

8、功能是一样的。 为非关联子查询指定EXISTS子句是不适当的,因为这样会产生笛卡尔乘积。 尽量不要使用NOT IN子句。,(3)慎重使用视图的联合查询 慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。 可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。,9.3.2 物理I/O的调整,9.3.3 CPU的优化调整,9.3.4 网络配置的优化,9.3.1 内存结构的调整,9.3 Oracle运行环境的优化,9.3

9、.5 Oracle碎片整理,9.3.6 Oracle系统参数的调整,内存参数的调整主要是指Oracle数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 1共享池 共享池由两部分构成:共享SQL区和数据字典缓冲区。共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。,9.3.1 内存结构的调整,(1)数据库管理员通过执行下述语句,来查看共享SQL区的使用率。 select (sum(pins-reloads)/sum(pins) “Lib Cache“ from v$librarycache; 共享SQL区的使用率应该在90

10、以上,否则需要增加共享池的大小。 (2)数据库管理员可以执行下述语句,查看数据字典缓冲区的使用率。 select (sum(-getmisses-usage-fixed)/sum(gets) “Row Cache“ from v$rowcache; 数据字典缓冲区的使用率也应该在90以上,否则需要增加共享池的大小。,2数据缓冲区 数据库管理员可以通过下述语句,来查看数据库数据缓冲区的使用情况。 SELECT name, FROM v$sysstat WHERE name IN (db block gets,consistent gets,physical reads); 根据查询出来的结果可以

11、计算出数据缓冲区的使用命中率: 数据缓冲区的使用命中率1 ( physical reads/(db block gets + consistent gets) 这个命中率应该在90以上,否则需要增加数据缓冲区的大小。,3日志缓冲区 数据库管理员可以通过执行下述语句,查看日志缓冲区的使用情况。 select name,value from v$sysstat where name in (redo entries,redo log space requests); 根据查询出的结果可以计算出日志缓冲区的申请失败率: 申请失败率requests/entries 申请失败率应该接近于0,否则说明日志

12、缓冲区开设太小,需要增加Oracle数据库的日志缓冲区。,(1)在磁盘上建立数据文件前首先运行磁盘碎片整理程序 为了安全地整理磁盘碎片,需关闭打开数据文件的实例,并且停止服务。如果有足够的连续磁盘空间建立数据文件,那么就很容易避免数据文件产生碎片。 (2)不要使用磁盘压缩 Oracle数据文件不支持磁盘压缩。 (3)不要使用磁盘加密 加密象磁盘压缩一样增加了一个处理层,降低磁盘读写速度。如果担心自己的数据可能泄密,可以使用dbms_obfuscation包和label security选择性地加密数据的敏感部分。,9.3.2 物理I/O的调整,(5)使用RAID RAID的使用应注意: 选择硬

13、件RAID超过软件RAID; 日志文件不要放在RAID 5卷上,因为RAID 5读性能高而写性能差; 把日志文件和归档日志放在与控制文件和数据文件分离的磁盘控制系统上。 (6)分离页面交换文件到多个磁盘物理卷 跨越至少两个磁盘建立两个页面文件。可以建立四个页面文件并在性能上受益,确保所有页面文件的大小之和至少是物理内存的两倍。,1查看CPU的使用情况 使用操作命令可以看到CPU的使用情况,一般UNIX操作系统的服务器,可以使用sar u命令查看CPU的使用率;NT操作系统的服务器,可以使用NT的性能管理器来查看CPU的使用率。 出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQ

14、L语句、锁冲突都会引起CPU资源不足。,9.3.3 CPU的优化调整,2查看SQL语句的解析情况 (1)数据库管理员可以执行下述语句来查看SQL语句的解析情况: SELECT * FROM V$SYSSTAT WHERE NAME IN (parse_time_cpu,parse_time_elapsed,parse_count_ hard); 这里: parse_time_cpu:是系统服务时间。 parse_time_elapsed:是响应时间。 而用户等待时间为: waite_time = parse_time_elapsed parse_time_cpu 由此可以得到用户SQL语句平均

15、解析等待时间: 用户SQL语句平均解析等待时间waite_time/parse_count,(2)数据库管理员还可以通过下述语句,查看低效率的SQL语句: SELECT BUFFER_GETS,EXECUTIONS,SQL_TEXT FROM V$SQLAREA; 优化这些低效率的SQL语句也有助于提高CPU的利用率。,3查看Oracle数据库的冲突情况 数据库管理员可以通过v$system_event数据字典中的“latch free”统计项查看Oracle数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。如果冲突太大的话,数据库管理员可以降低spin_count参数

16、值,来消除高的CPU使用率。,4CPU的优化调整方法 一些优化CPU使用和配置的具体方法有: (1)取消屏幕保护。 (2)把系统配置为应用服务器。 (3)监视系统中消耗中断的硬件。 (4)保持最小的安全审计记录。 (5)在专用服务器上运行Oracle。 (6)禁止非必须的服务。,网络配置是性能调整的一项很重要的内容,而且很容易隐藏性能瓶颈。 (1)配置网卡使用最快速度和有效模式 (2)删除不需要的网络协议 (3)优化网络协议绑定顺序 (4)为Oracle禁止或优化文件共享,9.3.4 网络配置的优化,1碎片是如何产生的 2碎片对系统的影响 (1)导致系统性能减弱 (2)浪费大量的表空间,9.3

17、.5 Oracle碎片整理,3自由范围的碎片计算 用fsfifree space fragmentation index(自由空间碎片索引)值来直观体现: fsfi=100*sqrt(max(extent)/sum(extents)*1/sqrt(sqrt(count(extents),4自由范围的碎片整理 可以将表空间的缺省存储参数pctincrease改为非0。一般将其设为1,如: alter tablespace temp default storage(pctincrease 1); 这样smon便会将自由范围自动合并,达到碎片整理的目的。 也可以采用如下语句,通过手工合并自由范围来达

18、到碎片整理的目的。 alter tablespace temp coalesce;,5段的碎片整理 段由范围组成,在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典DBA_segments,范围的信息可查看数据字典DBA_extents。如果段的碎片过多, 将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用import/export(输入/输出)工具来完成。 export()命令有一个(压缩)标志,这个标志在读表时会引发export确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化

19、存储参数,等于全部所分配空间。若这个表关闭, 则使用import()工具重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如: exp user/password file=exp.dmp compress=y grants=y indexes=y tables=(table1,table2); 若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表: imp user/password file=exp.dmp commit=y buffer=64000 full=y; 这种方法可用于整个数据库。 另外,应该定期shutdown database,从而清理momery碎片。,

20、9.3.6 Oracle系统参数的调整,1Shared Pool and Library Cache Performance Tuning(共享池和Library Cache) 共享池调整的技巧主要有: (1)刷共享池 刷( Flush)共享池可以使小块的内存合并为大块的内存。当共享池的碎片过多时,能够暂时恢复性能。刷共享池可以使用语句: alter system flush shared_pool; (2)绑定变量,2Buffer Cache Performance Tuning(数据库缓存调整) 从缓存调整的角度看,应力求避免以下的问题: (1)“缓存的最近最少使用(LRN)链”(cach

21、e buffers LRU chain)的加锁竞争; (2)“平均写队列”(Average Write Queue)长度过大; (3)过多时间花在等待“写完毕等待上”(write complete waits); (4)过多时间花在等待“缓冲释放等待”上(free buffer waits)。,3Latch Contention(加锁或插销竞争) 插销加锁是SGA中保护共享数据结构的低层的串行化机制。插销latch是一类可以非常快的获得和释放的锁。插销锁的实现是依赖于操作系统的,尤其在关于一个进程是否会等待一个锁,和等多久方面。 有如下的锁(插销)需要调整: (1)Redo Copy/Allo

22、cation Latch:重写日志的复制/分配插销 (2)Shared Pool Latch:共享池的插销 (3)Library Cache Latch:Library Cache插销,4Redo Log Buffer Performance Tuning(重写日志缓冲的调整) LGWR 将重写日志缓冲中的重写项写到重写日志文件中。一旦LGWR将这些项复制到重写日志文件中,用户进程就可以重写这些项。统计项目“redo log space requests”反映了用户进程等待重写日志缓冲中空间的时间的数字。 (1)设置重写日志大小的提示: “redo log space requests”的值应

23、该接近0。 (2)设定合适的重写日志的大小,建议每15-30分钟进行一次重写日志的切换。,5Query Performance Tuning(查询效率的调整) 如果查询运行得很慢,请考虑以下这些方面: (1)希望这个查询运行的有多快以及有理由这样要求吗? (2)优化模式OPTIMIZER_MODE 设为何值? (3)查询涉及的索引都是有效的吗? (4)在数据库中有没有其他的长时间运行的查询(大查询)。 (5)表和索引上有统计信息吗? (6)统计信息是被计算出来的还是被估计出来的? 对于查询的性能调整有两个主要的调试工具:TKPROF和AUTOTRACE。,6Temporary Tablespa

24、ce Performance Tuning(临时表空间的调整) 临时表空间的调整的技巧如下: 如果即使在稳定的状态下也存在很多的排序扩展锁(Sort Extent Pool latch)的竞争,应该通过修改临时表空间的DEFAULT STORAGE 子句的NEXT值来增大扩展块的大小。如果存在很多的排序扩展锁(Sort Extent Pool latch)的竞争并且这种等待是由于过多的并发的排序造成的,应该增大SORT_AREA_SIZE参数的大小,以使更多的排序能保存在内存中。 建议让扩展块的大小和SORT_AREA_SIZE参数相同。,9.4.2 锁,9.4.1 并发事件的产生,9.4 并

25、发事件处理,数据库是一个共享资源,可为多个应用程序所共享。这些程序可串行运行,但在许多情况下,可能多个程序或一个程序的多个进程并行地运行,这就是数据库的并行操作。在多用户数据库环境中,多个用户程序可并行地存取数据库,如果不对并发操作进行控制,会存取不正确的数据,或破坏数据库数据的一致性。,9.4.1 并发事件的产生,(1)当一个用户正在修改表中数据的同时,另一个用户正试图删除该表。 (2)用户A正试图读取用户B的某个事务中的一些数据,在用户A的事务开始后,该事务由用户B修改和提交。用户A读取用户B提交的数据。这意味着在同一个事务中读取的数据在某个时刻不一致。 (3)某个用户对数据进行修改,另一

26、个用户在第一个用户提交事务以前对同一行进行修改;因此,第一个用户所做的改变丢失了。 (4)一个用户从另一个用户尚未提交的数据中读取数据;也就是说,在用户B的改变提交以前,用户A读取用户B正在修改的行。,9.4.2 锁,1锁的功能,2锁的类型,3锁的模式,4查看相关信息,1锁的功能 (1)数据一致性 (2)数据并行性 (3)数据完整性,Oracle在两个不同级上提供读一致性:语句级读一致性和事务级一致性。 (1)语句级读取一致性 (2)事务级读取一致性,2锁的类型 Oracle锁具体分为以下几类: (1)自动锁与显示锁 按用户与系统划分,可以分为自动锁与显示锁。 自动锁:当进行一项数据库操作时,

27、缺省情况下,系统自动为此数据库操作获得所有有必要的锁。 显示锁:某些情况下,需要用户显示的锁定数据库操作要用到的数据,才能使数据库操作执行得更好,显示锁是用户为数据库对象设定的。,(2)共享锁与排它锁 按锁级别划分,可分为共享锁与排它锁。 共享锁:共享锁允许相关资源可以共享,几个用户可同时读同一数据,几个事务可在同一资源上获取共享封锁。共享锁比排它锁具有更高的数据并行性。但拙劣的事务设计+共享锁容易造成死锁或数据更新丢失。 排它锁:事务设置排它锁后,该事务单独获得此资源,另一事务不能在此事务提交之前获得相同对象的共享锁或排它锁。排它锁禁止相关资源的共享,如果一事务以排它方式封锁一资源,仅仅该事

28、务可更改该资源,直至释放排它封锁。,(3)DML锁和DDL锁 按操作划分,可分为DML锁、DDL锁。 DML锁又可以分为:行锁、表锁、死锁。 行锁:当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行的排它锁。 表锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),以防止其它事务进行DDL语句影响记录行的更新。事务也可以在进行过程中获得共享锁或排它锁,只有当事务显示使用LOCK TABLE语句显示的定义一个排它锁时,事务才会获得表上的排它锁,也可使用LOCK TABLE显示的定义。 死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就出现死锁。,DDL锁又

29、可以分为:排它DDL锁、共享DDL锁、分析锁。 排它DDL锁:创建、修改、删除一个数据库对象的DDL语句获得操作对象的排它锁。如使用alter table语句时,为了维护数据的完成性、一致性、合法性,该事务获得一排它DDL锁。 共享DDL锁:需在数据库对象之间建立相互依赖关系的DDL语句通常需共享获得DDL锁。如创建一个包,该包中的过程与函数引用了不同的数据库表,当编译此包时,该事务就获得了引用表的共享DDL锁。 分析锁:Oracle使用共享池存储分析与优化过的SQL语句及PL/SQL程序,使运行相同语句的应用速度更快。一个在共享池中缓存的对象获得它所引用数据库对象的分析锁。分析锁是一种独特的

30、DDL锁类型,Oracle使用它追踪共享池对象及它所引用数据库对象之间的依赖关系。当一个事务修改或删除了共享池持有分析锁的数据库对象时,Oracle使共享池中的对象作废,下次在引用这条SQL/PLSQL语句时,Oracle重新分析编译此语句。,(4)内部闩锁 内部闩锁是Oracle中的一种特殊锁,用于顺序访问内部系统结构。当事务需向缓冲区写入信息时,为了使用此块内存区域,Oracle首先必须取得这块内存区域的闩锁,才能向此块内存写入信息。,3锁的模式 (1)模式0:none。 (2)模式1:null 空。1级锁有:Select,有时会在v$locked_object出现。 (3)模式2:Row

31、-S 行共享(RS):共享表锁,sub share。2级锁有:Select for update、Lock For Update、Lock Row Share。 select for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update操作。,(4)模式3:Row-X 行独占(RX):用于行的修改,sub exclusive。3级锁有:Insert、Update、Delete、Lock Row Exclusive。 没有commi

32、t之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁,必须释放掉上一个才能继续工作。 (5)模式4:Share 共享锁(S):阻止其他DML操作,share。4级锁有:Create Index、Lock Share。 locked_mode为2、3、4不影响DML(insert、delete、update、select等)操作, 但DDL(alter、drop等)操作会提示错误。,(6)模式5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive。5级锁有:Lock Share Row Exclusive。 具体来讲有主外键约束

33、时update/delete . ; 可能会产生4,5的锁。 (7)模式6:exclusive 独占(X):独立访问使用,exclusive。6级锁有:Alter table、Drop table、Drop Index、Truncate table、Lock Exlusive。 数字越大锁级别越高, 影响的操作越多。,4查看相关信息 Oracle在动态状态表V$lock中存储与数据库中的锁有关的所有信息。当资源被锁定时, 可以检查V$lock表,查看数据库中的各种情况。,9.5 数据完整性,数据完整性是指数据的正确性和相容性。数据的完整性是为了防止数据库存在不符合原义的数据,防止错误信息输入和

34、输出,即数据要遵守由DBA或应用开发者所决定的一组预定义的规则。,1数据完整性的类型 Oracle应用于关系数据库的表的数据完整性有下列类型: (1)在插入或修改表的行时允许不允许包含有空值的列,称为空与非空规则。 (2)唯一列值规则,允许插入或修改的表行在该列上的值唯一。 (3)引用完整性规则,同关系模型定义相符。 (4)用户对定义的规则,是复杂的完整性检查。,2完整性约束及其优点 完整性约束,是对表的列定义规则的说明性方法。 Oracle利用完整性约束机制防止无效的数据进入数据库的基表,如果任何DML执行结果破坏完整性约束,该语句被回滚并返回上一个错误。,利用完整性约束实施数据完整性规则有

35、下列优点: (1)定义或更改表时,不需要程序设计,便很容易地编写程序并可消除程序性错误,其功能是由Oracle控制。所以说明性完整性约束优于应用代码和数据库触发器。 (2)对表所定义的完整性约束是存储在数据字典中,所以由任何应用进入的数据都必须遵守与表相关联的完整性约束。 (3)具有最大的开发能力。当由完整性约束所实施的事务规则改变时,管理员只需改变完整性约束的定义,所有应用自动地遵守所修改的约束。,3完整性约束的类型 Oracle的DBA和应用开始者对列的值输入可使用的完整性约束有下列类型: (1)NOT NULL约束:如果在表的一列的值不允许为空,则需在该列指定NOT NULL约束。 (2

36、)UNIQUE键约束:在表指定的列或组列上不允许两行具有重复值时,则需要该列或组列上指定UNIQUE键完整性约束。在UNIQUE键约束定义中的列或组列称为唯一键。所有唯一完整性约束是用索引方法实施。 (3)PRIMARY KEY约束:在数据库中每一个表可有一个PRIMARY KEY约束。包含在PRIMARY KEY完整性约束的列或组列称为主键,每个表可有一个主键。Oracle使用索引实施PRIMARY KEY约束。,(4)FOREIGN KEY约束:在关系数据库中表可通过公共列相关联,该规则控制必须维护的列之间的关系。包含在引用完整性约束定义的列或组列称为外来键。由外来键所引用的表中的唯一键,

37、称为引用键。包含有外来键的表称为子表或从属表。由子表的外来键所引用的表称为双亲表或引用表。如果对表的每一行,其外来键的值必须与主键中一值相匹配,则需指定引用完整性约束。 (5)CHECK约束:表的每行对一指定的条件必须是TRUE或未知,则需在一列或列组上指定CHECK完整性约束。如果在发出一个DML语句时,CHECK约束的条件计算得FALSE时,该语句被回滚。,4数据库触发器 数据库触发器,是使用非说明方法实施完整性规则,利用数据库触发器可定义和实施任何类型的完整性规则。,9.6 数据库性能优化工具,常用的数据库性能优化工具有: (1)Oracle数据库在线数据字典 (2)操作系统工具 (3)

38、SQL语言跟踪工具(SQL TRACE FACILITY) (4)Oracle Enterprise Manager(OEM) (5)EXPLAIN PLANSQL语言优化命令,9.7.2 确定Oracle数据库表中重复的记录,9.7.1 序号生成器,9.7 常见问题处理,(1)Oracle序号生成的命令格式为: create 序号名 increment by 每次增长数 start with 起始序号 (2)可以用下面的语句得到当前的序号: select seq1.currval from dual; (3)也可以用下面的语句得到下一个序号: insert into dept values(

39、seq1.nextval,.);,9.7.1 序号生成器,(4)删除序号的语句为: DROP SEQUENCE order_seq; (5)影响Sequence的初始化参数: SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目,1自关联查询方法,2GROUP BY/HAVING查询方法,9.7.2 确定Oracle数据库表中重复的记录,3Exception into子句,1自关联查询方法 Oracle系统中,对于所有的表都存在一个唯一的列,这就是rowid。对该列使用最大(max)或者最小(min)函数可以非常容易地确定重复的行。,2GROUP BY/

40、HAVING查询方法 利用分组函数GROUP BY/HAVING也很容易确定重复的行。以需要创建唯一索引的列分组并统计每组的个数,很明显如果组中记录数超过1个就存在重复的行。,3Exception into子句 采用alter table命令中的Exception into子句也可以确定出表中重复的记录。这种方法稍微麻烦一些,为了使用“excepeion into”子句,必须首先创建EXCEPTIONS表。创建该表的SQL脚本文件为utlexcpt.sql。对于NT系统和UNIX系统,Oracle存放该文件的位置稍有不同。 将exceptions表和原表通过rowid关联起来即可得到原表中重复的记录。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1