当前位置:
文档之家› Oracle的性能优化-文档资料
Oracle的性能优化-文档资料
数据缓冲区的使用命中率=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,否则说明日志缓冲区开设太小,需 要增加Oracle数据库的日志缓冲区。
Oracle的性能 优化
第九章 Oracle的性能优化
本章学习目标 本章将介绍优化和调整Oracle数据库 系统的一些相关命令和方法。
本章内容安排
9.1 数据库性能优化概述 9.2 SQL语句的优化
9.3 Oracle运行环境的优化 9.4 并发事件处理 9.5 数据完整性 9.7 常见问题处理
共享SQL区的使用率应该在90%以上,否则需要增加共享 池的大小。
(2)数据库管理员可以执行下述语句,查看数据字典缓冲区 的使用率。
select (sum(-getmisses-usage-fixed))/sum (gets) "Row Cache" from v$rowcache;
数据字典缓冲区的使用率也应该在90%以上,否则需要 增加共享池的大小。
SELECT * FROM V$SYSSTAT WHERE NAME IN ('parse_time_cpu','parse_time_elapsed','parse _count_ hard');
这里: ①parse_time_cpu:是系统服务时间。 ②parse_time_elapsed:是响应时间。 而用户等待时间为:
9.1 数据库性能优化概述
9.1.1 数据库性能优化的内容 9.1.2 不同类型系统的优化
9.1.1 数据库性能优化的内容
(1)调整数据结构的设计。 (2)调整应用程序结构设计。 (3)调整数据库SQL语句。 (4)调整服务器内存分配。 (5)调整硬盘I/O,这一步是在信息系统开发之前完成的。 (6)调整操作系统参数。
3.查看Oracle数据库的冲突情况
数据库管理员可以通过v$system_event数据字典中的 “latch free”统计项查看Oracle数据库的冲突情况,如果没 有冲突的话,latch free查询出来没有结果。如果冲突太大 的话,数据库管理员可以降低spin_count参数值,来消除 高的CPU使用率。
9.3.2 物理I/O的调整
(1)在磁盘上建立数据文件前首先运行磁盘碎片整理程序
为了安全地整理磁盘碎片,需关闭打开数据文件的实 例,并且停止服务。如果有足够的连续磁盘空间建立数据文 件,那么就很容易避免数据文件产生碎片。
(2)不要使用磁盘压缩
Oracle数据文件不支持磁盘压缩。
(3)不要使用磁盘加密
关联查询的开销——对返回到父查询的记录来说,子查询会 每行执行一次。因此,必须保证任何可能的时候子查询用到索 引。
(2)在子查询中慎重使用IN或者NOT IN语句 在子查询中慎重使用IN或者NOT IN语句,使用where
(NOT)exists的效果要好的多。 ①带IN的关联子查询是多余的,因为IN子句和子查询中相 关的操作的功能是一样的。
1.共享池 共享池由两部分构成:共享SQL区和数据字典缓冲区。
共享SQL区是存放用户SQL命令的区域,数据字典缓冲区 存放数据库运行的动态信息。
(1)数据库管理员通过执行下述语句,来查看共享SQL区的使 用率。
select (sum(pins-reloads))/sum(pins) "Lib Cache" from v$librarycache;
2.数据缓冲区 数据库管理员可以通过下述语句,来查看数据库数据缓冲区
的使用情况。
SELECT name, FROM v$sysstat WHERE name IN ('db block gets','consistent gets','physical reads');
根据查询出来的结果可以计算出数据缓冲区的使用命中率:
9.3.5 Oracle碎片整理
1.碎片是如何产生的 2.碎片对系统的影响 (1)导致系统性能减弱 (2)浪费大量的表空间
3.自由范围的碎片计算 用fsfi——free space fragmentation index(自由空间碎片
索引)值来直观体现:
fsfi=100*sqrt(max(extent)/sum(extents))*1/ sqrt(sqrt(count(extents)))
9.3 Oracle运行环境的优化
9.3.1 内存结构的调整 9.3.2 物理I/O的调整 9.3.3 CPU的优化调整 9.3.4 网络配置的优化 9.3.5 Oracle碎片整理 9.3.6 Oracle系统参数的调整
9.3.1 内存结构的调整
内存参数的调整主要是指Oracle数据库的系统全局区 (SGA)的调整。SGA主要由三部分构成:共享池、数 据缓冲区、日志缓冲区。
系统的服务器,可以使用sar –u命令查看CPU的使用率;NT 操作系统的服务器,可以使用NT的性能管理器来查看CPU 的使用率。
出现CPU资源不足的情况是很多的:SQL语句的重解析、 低效率的SQL语句、锁冲突都会引起CPU资源不足。
2.查看SQL语句的解析情况 (1)数据库管理员可以执行下述语句来查看SQL语句的解析 情况:
4.SQL子查询的调整
(1)关联子查询和非关联子查询
非关联查询的开销——非关联查询时子查询只会执行一次, 而且结果是排序好的,并保存在一个Oracle的临时段中,其中的 每一个记录在返回时都会被父查询所引用。在子查询返回大量 的记录的情况下,将这些结果集排序,以及将临时数据段进行 排序会增加大量的系统开销。
4.CPU的优化调整方法 一些优化CPU使用和配置的具体方法有:
(1)取消屏幕保护。 (2)把系统配置为应用服务器。 (3)监视系统中消耗中断的硬件。 (4)保持最小的安全审计记录。 (5)在专用服务器上运行Oracle。 (6)禁止非必须的服务。
9.3.4 网络配置的优化
网络配置是性能调整的一项很重要的内容,而且很容易隐 藏性能瓶颈。 (1)配置网卡使用最快速度和有效模式 (2)删除不需要的网络协议 (3)优化网络协议绑定顺序 (4)为Oracle禁止或优化文件共享
②为非关联子查询指定EXISTS子句是不适当的,因为这样 会产生笛卡尔乘积。
③尽量不要使用NOT IN子句。
(3)慎重使用视图的联合查询
慎重使用视图的联合查询,尤其是比较复杂的视图之 间的联合查询。一般对视图的查询最好都分解为对数据表的 直接查询效果要好一些。
可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参 数,这个参数在SGA共享池中保留一个连续的内存空间,连 续的内存空间有益于存放大的SQL程序包。
加密象磁盘压缩一样增加了一个处理层,降低磁盘读 写速度。如果担心自己的数据可能泄密,可以使用 dbms_obfuscation包和label security选择性地加密数据的敏感 部分。
(5)使用RAID
RAID的使用应注意:
①选择硬件RAID超过软件RAID;
②日志文件不要放在RAID 5卷上,因为RAID 5读性能高而写 性能差;
(4)调整PCTFREE和PCTUSED等存储参数优化插入、更 新或者删除等操作;
(5)考虑数据库的优化器;
(6)考虑数据表的全表扫描和在多个CPU的情况下考虑并 行查询。
9.2.2 SQL语句优化的具体方法 1.索引的使用
2.SQL语句排序优化 3. 选择联合查询的联合次序
4.SQL子查询的调整
2.SQL语句排序优化 排序发生的情况如下: SQL中包含group by 子句 SQL 中包含order by 子句 SQL 中包含 distinct 子句 SQL 中包含 minus 或 union操作
3.选择联合查询的联合次序
联合查询中如涉及到多个表的字段关联及查询,其 SQL查询语句联合次序的不同写法,会导致语句对各表具 体操作的步骤有不同的次序,所以虽然执行结果相同,但 执行效率却不同。
waite_time = parse_time_elapsed – parse_time_cpu 由此可以得到用户SQL语句平均解析等待时间: 用户SQL语句平均解析等待时间=waite_time/parse_count
(2)数据库管理员还可以通过下述语句,查看低效率的 SQL语句:
SELECT BUFFER_GETS,EXECUTIONS,SQL_TEXT FROM V$SQLAREA; 优化这些低效率的SQL语句也有助于提高CPU的利用率。
9.2 SQL语句的优化
9.2.1 SQL语句的优化规则 9.2.2 SQL语句优化的具体方法
9.2.1 SQL语句的优化规则
(1)去掉不必要的大表、全表扫描。不必要的大表、全表 扫描会造成不必要的输入输出,而且还会拖垮整个数据库;
(2)检查优化索引的使用 这对于提高查询速度来说非常重 要;
(3)检查子查询,考虑SQL子查询是否可以用简单连接的 方式进行重新书写;
(2)索引不起作用的情况 ①存在数据类型隐形转换 ②列上有数学运算 ③使用不等于(<>)运算 ④使用substr字符串函数 ⑤‘%’通配符在第一个字符 ⑥字符串连接(||)