对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据库版本包含的等待事件.例如我在Linux平台查11.2.0.4版本的Oracle是有1367个等待事件.SELECT name FROM V$EVENT_NAME ORDER BY name; 如此多的等待事件自然是要分类汇总,并对常见的等待事件有比较深入的认识,才能在Oracle数据库调优这条路上…
一.B-Tree索引 三大特点:高度较低.存储列值.结构有序 1.1利用索引特性进行优化 外键上建立索引:不但可以提升查询效率,而且可以有效避免锁的竞争(外键所在表delete记录未提交,主键所在表会被锁住). 统计类查询SQL:count(), avg(), sum(), max(), min() 排序操作:order by字段建立索引 去重操作:distinct UNION/UNION ALL:union all不需要去重,不需要排序 1.2联合索引 应用场景一:SQL查询列很少,建立查询列…
Tables A table describes an entity such as employees. You define a table with a table name, such as employees, and set of columns. In general, you give each column a name, a data type, and a width when you create the table. 1.普通堆表(Heap-Organized Tabl…
1.autotrace的设定 SQL> set autotrace Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]] set autot on --打开autotrace,之后执行的sql,会显示sql执行结果.执行计划.统计信息 set autot on exp --会显示sql执行结果.执行计划 set autot on stat --会显示sql执行结果.统计信息 set autot tra…
在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描,单块读,有序 INDEX RANGE SCAN:索引的范围扫描 INDEX FAST FULL SCAN:索引的快速全扫描,多块读,无序 INDEX FULL SCAN(MIN/MAX):针对MAX(),MIN()函数的查询 INDEX SKIP SCAN:查询条件没有用到组合索引的第一列,而组合索引的第一…
在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描,单块读,有序INDEX RANGE SCAN:索引的范围扫描INDEX FAST FULL SCAN:索引的快速全扫描,多块读,无序INDEX FULL SCAN(MIN/MAX):针对MAX(),MIN()函数的查询INDEX SKIP SCAN:查询条件没有用到组合索引的第一列,而组合索引的第一列重复度…
一. 等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件.2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件 是在调整数据库的时候需要关注与研究的. 在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待事件…
1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: ·         当一个会话视图修改一个数据块,但这个数据块正在被另一个会话修改时. ·         当一个会话需要读取一个数据块,但这个数据块正在被另一个会话读取到内存中时. 在新的版本中,第二种情况已经被独立出来,以read by other session取代~ Buffer busy waits等待事件常见于数据库中存…
buffer cache与相关的latch等待事件 1.buffer cache 2.latch:cache buffers lru chain 3.latch:cache buffers chains 1.buffer cache 我的理解: buffer cache理解成4块结构: 三个列表+1个pool 三个列表指: lru (最近最少使用列表) dirty list (checkpoing qu buffer cache与相关的latch等待事件 1.buffer cache2.latc…
1.使用sql_trace跟踪执行计划 1.1 当前session跟踪: alter session set sql_trace = true; //开始sql_trace alter session set tracefile_identifier = jytrace; //设定trace文件的标识符 alter session set sql_trace = false; //结束sql_trace 1.2 其他session跟踪:(根据其他session的sid, serial#定位,最常…
Shared Pool Tuning 目标是提高命中率, 以减少 I/O 操作 shared pool : 是由 library cache, data dictionary cache 两部分组成. 由于 data dictionary cache 在内存中的时间比 library cache 时间长, 所以就命中率来说, 只要 library cache 命中了, 那么 data dictionary cache 肯定也命中, 所以我们要提高 library cache 命中率. 注意, 提…
Oracle官方文档对SQL Access Advisor的描述如下: SQL Access Advisor, which is a tuning tool that provides advice on improving the performance of a database through partitioning, materialized views, indexes, and materialized view logs. 本文介绍下如何通过DBMS_ADVISOR的quick_…
nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_nl() merge sort join(排序合并)   驱动表和被驱动表都是最多访问1次,无驱动顺序,需要排序(SORT_AREA_SIZE),连接条件是<>或like导致无法使用. 在连接条件上建立索引可以消除一张表的排序. hints:use_merge() hash join(哈希连接)  …
SQL调优顾问 SQL Tuning Advisor的使用案例: 1.构建测试表T 2.定义调整任务 3.修改调整任务参数 4.执行调整任务 5.监控调整任务 6.查看调整任务建议 7.删除调整任务 1.构建测试表T SQL> conn zjy/zjy Connected. SQL> create table t as select * from dba_objects; Table created. SQL> select count(*) from t; COUNT(*) -----…
Oracle 四个表的 emp dept  salgrade  bunus 的结构,记住有利于后期SQL语句的学习 雇员表(emp) No. 字段 类型 描述 1 empno NUMBER(4) 表示雇员编号,是唯一的 2 ENAME VARCHAR2(10) 表示雇员姓名 3 JOB VARCHAR2(9) 表示工作职位 4 MGR NUMBER(4) 表示雇员的领导编号 5 HIREDATE DATE 表示雇佣的时间 6 SAL NUMBER(7,2) 表示雇员的薪金 7 COMM NUMB…
1.explain plan的使用 SQL> explain plan for delete from t_jingyu; Explained. SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT ----------------------------------------------------------------------------------------------------------------…
N多年之前,刚刚接触SQL的时候,就被多表查询中的各种内连接,外连接,左外连接,右外连接等各式各样的连接弄的晕头转向. 更坑的是书上看到的各种表连接还有两种不同的写法, 比如对于表A,表B的查询 1,内连接两种写法: select * from A, B where A.id = B.id; select * from A join B on A.id = B.id; 2,右外连接写法: select * from A, B where A.id(+) = B.id; select * from…
一.等待事件由来 大家可能有些奇怪,为什么说等待事件,先谈到了指标体系.其实,正是因为指标体系的发展,才导致等待事件的引入.总结一下,Oracle的指标体系,大致经历了下面三个阶段: · 以命中率为主要参考指标 · 以各种命中率为主要的优化入口依据,常见的有”library cache hit radio“等.但这种方式弊端很大,一个命中率为99%的系统,不一定就比95%的系统优化的更好.在老的Oracle版本中,往往采用这种方式,如8i.9i等. · 以等待事件为主要参考指标 · 以各种等待事…
I/O相关竞争等待简介 当Oracle数据库出现I/O相关的竞争等待的时候,一般来说都会引起Oracle数据库的性能低下,发现数据库存在I/O相关的竞争等待一般可以通过以下的三种方法来查看Oracle数据库是否存在I/O相关的竞争等待: (1)Statpack报告中在"Top 5 Wait Events"部分中主要都是I/O相关的等待事件. (2)数据库的等待事件的SQL语句跟踪中主要都是I/O相关的等待事件的限制. (3)操作系统工具显示存储数据库文件的存储磁盘有非常高的利用率. 数…
第一章   oracle数据库基础 1.oracle简介-->数据库管理系统    1.1:数据库    1.2:全局数据库名    1.3:数据库实例    1.4:表空间    1.5:数据文件(扩展名:.dbf)    1.6:控制文件(扩展名:.ctl)    1.7:日志文件(扩展名:.log)    1.8:模式和模式对象2.连接oracle数据库    2.1 SQL*Plus工具    2.2 PL/SQL Developer工具3.配置oracle数据库    3.1 配置监听…
[等待事件]等待事件系列(5.1)--Enqueue(队列等待)   1  BLOG文档结构图   2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Enqueue队列等待 ② Enq数据字典 ③ enq: AE - lock ④ enq: MR锁 ⑤ enq: DX - contention ⑥ enq: SQ - contention 序列等待     2.2  相关参考文章链接 [推…
 [等待事件]等待事件系列(3+4)--System IO(控制文件)+日志类等待   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 控制文件类等待 ② 日志类等待   2.2  相关参考文章链接 [推荐] 等待事件系列(1)--User I/O类型(下) http://blog.itpub.net/26736162/viewspace-2124435…
[等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV -  contention) 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 序列等待事件总结 ② enq: SQ - contention.row cache lock.DFS lock handle和enq: SV…
简介 本文主要讨论 RAC 数据库中的'log file sync' 等待事件.RAC 数据库中的'log file sync' 等待事件要比单机数据库中的'log file sync' 等待事件复杂,主要原因是由于RAC 数据库需要将SCN同步到所有实例. 首先,回顾一下单机数据库中的'log file sync' 等待事件,当user session 提交(commit)时,user session会通知LGWR进程将redo buffer中的信息写入到redo log file,当LGWR…
Oracle 10g v$session视图中不同等待事件对应的p1,p2,p3的含义也不同,我们不可能记住所有等待事件对应的p1,p2,p3的含义. 可以通过查询V$EVENT_NAME知道每个等待事件对应的p1,p2,p3的含义 SQL> col name for a25;SQL> col p1 for a10;SQL> col p2 for a10;SQL> col p3 for a10; SQL> SELECT NAME, PARAMETER1 P1, PARAMET…
1.查看数据库中需要关注的等待事件: select sw.seq#,sw.sid||','||s.serial# sids,s.username,sw.event,sw.P1,sw.p2,sw.p3,sw.wait_time "WAIT", sw.state,sw.seconds_in_wait sec,s.status,to_char(s.logon_time,'dd/hh24:mi:ss') logon_time from v$session s,v$session_wait sw…
1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然这也是相对的, 如果不存在显著的 latch wait 或过高的logical read 等,  CPU time 占的比例高才是令人放心的. 也就是说CPU在高效率干活是好事,但是是否因为低效的设置或SQL而消耗CPU时间就需要注意了. NUM_CPU_SOCKETS    物理CPU的数目 NU…
在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待事件的相关信息     一. 等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件.2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件 是在调整数据库的时候…
1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: 当一个会话视图修改一个数据块,但这个数据块正在被另一个会话修改时. 当一个会话需要读取一个数据块,但这个数据块正在被另一个会话读取到内存中时. 在新的版本中,第二种情况已经被独立出来,以read by other session取代~Buffer busy waits等待事件常见于数据库中存在的热快的时候,当多个用户频繁地读取或者修…
转自 http://blog.itpub.net/29371470/viewspace-1063994/ 1. Buffer busy waits 从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是:--当一个会话视图修改一个数据块,但这个数据块正在被另一个会话修改时.--当一个会话需要读取一个数据块,但这个数据块正在被另一个会话读取到内存中时.在新的版本中,第二种情况已经被独立出来,以read by other ses…