oracle优化SQL方法,ORACLE SQL 优化的若干方法

本文详细介绍了Oracle数据库的SGA组件,包括共享池、数据缓冲区和日志缓冲区的优化方法,以及如何通过查询统计信息来评估其性能。此外,还阐述了SQL语句的执行步骤,特别是解析阶段的优化潜力。通过对SQL执行过程的理解和SGA的调整,可以有效提升数据库的性能。
摘要由CSDN通过智能技术生成

ORACLE SQL 优化的若干方法

一、 先介绍一下oracle的SGA:数据库的系统全局区,SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 1、共享池又由两部分构成:共享SQL区和数据字典缓冲区。共享SQL区专门存放用户SQL命令,oracle使用最近最少使用等优先级算法来更新覆盖;数据字典缓冲区(library cache)存放数据库运行的动态信息。数据库运行一段时间后,DBA需要查看这些内存区域的命中率以从数据库角度对数据库性能调优。通过执行下述语句查看:

select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache;

--查看共享SQL区的重用率,最好在90%以上,否则需要增加共享池的大小。

select (sum(gets - getmisses - usage - fixED)) / sum(gets) "Row Cache" from v$rowcache;

--查看数据字典缓冲区的命中率,最好在90%以上,否则需要增加共享池的大小。

2、 数据缓冲区:存放sql运行结果抓取到的data block;

SELECT name, value  from v$sysstat  WHERE name IN ('db block gets', 'consistent gets','physical reads');

-- 查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=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数据库的日志缓冲区。

二.Sql语句的执行步骤:

了解sql的执行步骤有利于更好的优化它们,每条sql语句执行时都要经历以下几步:

1. Create cursor ;

2. Parse, if it is not already in the shared pool.;

3. Any query in the statement is processed.

4. Bind Variables

5. Execute.

6. If possible, the statement is parallelized.

7. Rows to be returned are fetched. 其中,Parse—是最有优化潜力的阶段。

Cursor创建后,oracle将在share pool中寻找是否该sql语句已经存在,若已经存在且已经被parsed,则不需要再执行parse,直接到下一步。若未在share pool中�

相关文档:

Oracle RAC学习笔记

1. Introduction:

Cluster - 对用户来说多台服务器好像是一台服务器一样。

Oracle Clusterware - Oracle提供的集群解决方案

Oracle RAC 多个实例对应一个数据库(文件)

Oracle Cluster Architecture:  (Hardware)

Oracle RAC 俩个组件:Voting Disk和OCR (Oracle Cluster Register)

Voti ......

select name from v$datafile;

create dataspace tablespace datafile '/oracle/oradata/orcl/data01.dbf' size 1024m,'/oracle/oradata/orcl/data02.dbf' size 1024m autoextend on next 100m maxsize unlimited;

alter tablespace dataspace add datafile '/oracle/oradata/orcl/da ......

SQL字符串函数http://www.cnblogs.com/virusswb/archive/2008/09/10/1288576.html

select语句中只能使用sql函数对字段进行操作(链接sql server),

select 字段1 from 表1 where 字段1.IndexOf("云")=1;

这条语句不对的原因是indexof()函数不是sql函数,改成sql对应的函数就可以了。

left()是sql函数。

select 字 ......

Student(S#,Sname,Sage,Ssex) 学生表

Course(C#,Cname,T#) 课程表

SC(S#,C#,score) 成绩表

Teacher(T#,Tname) 教师表

问题:

1、查询“001”课程比“002”课程成绩高的所有学生的学号;

select a.S# from (select s#,score from SC where C#='001') a,(select s#,score

fr ......

本文转自:http://industry.ccidnet.com/art/1106/20070514/1080519_1.html

本文是SQL Server SQL语句优化系列文章的第一篇。该系列文章描述了在Micosoft’s SQLServer2000关系数据库管理系统中优化SELECT语句的基本技巧,我们讨论的技巧可在Microsoft's SQL Enterprise Manager或 Microsoft SQL Query Anal ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值