首页 > 其他分享 >oralce的33中常见等待

oralce的33中常见等待

时间:2023-06-21 16:05:35浏览次数:45  
标签:oralce cache log 33 常见 file 日志 等待 name

处理等待事件的思路:

1.sql 级别的思路(10046事件)

对于某个sql,如果我们想要知道这个sql消耗在了什么地方,具体等待的是哪些资源,那么我们就可以对这个sql 做一个10046时间的分析

2.会话层面

我们可以直接查询v$session 和v$session_wait 视图查看事务的等待事件

select sid,event,state,wait_class from v$session_wait;

3.系统级别

AWRB报告或者v$system_event

oralce常见的33种等待事件

目录

等待事件的分类

分类

01 概念:

等待事件的概念大概是从ORACLE 7.0.12中引入的,大致有100个等待事件。在ORACLE 8.0中这个数目增大到了大约150个,在ORACLE 8I中大约有220个事件,在ORACLE 9IR2中大约有400个等待事件,而在最近ORACLE 10GR2中,大约有874个等待事件。

虽然不同版本和组件安装可能会有不同数目的等待事件,但是这些等待事件都可以通过查询V$EVENT_NAME视图获得:

1.等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件。
2.空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件。
3.非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件是在调整数据库的时候需要关注与研究的。

在Oracle 10g中的等待事件有872个,11g中等待事件1116个。 我们可以通过v$event_name 视图来查看等待事件的相关信息。

1、查看v$event_name视图的字段结构:

desc v$event_name;
EVENT# NUMBER
EVENT_ID NUMBER
NAME VARCHAR2(64)
PARAMETER1 VARCHAR2(64)
PARAMETER2 VARCHAR2(64)
PARAMETER3 VARCHAR2(64)
WAIT_CLASS_ID NUMBER
WAIT_CLASS# NUMBER
WAIT_CLASS VARCHAR2(64)

2、查看等待事件总数:

select count(*) from v$event_name;
  COUNT(*)
----------
      1367

3、查看等待事件分类情况:

set linesize 300;
col WAIT_CLASS format a20
SELECT wait_class#,
    wait_class_id,
    wait_class,
    COUNT(*) AS "count"
FROM v$event_name
GROUP BY wait_class#, wait_class_id,wait_class
ORDER BY wait_class#;

WAIT_CLASS# WAIT_CLASS_ID WAIT_CLASS                count
----------- ------------- -------------------- ----------
          0    1893977003 Other                       958
          1    4217450380 Application                  17
          2    3290255840 Configuration                24
          3    4166625743 Administrative               55
          4    3875070507 Concurrency                  33
          5    3386400367 Commit                        2
          6    2723168908 Idle                         96
          7    2000153315 Network                      35
          8    1740759767 User I/O                     48
          9    4108307767 System I/O                   32
         10    2396326234 Scheduler                     8

WAIT_CLASS# WAIT_CLASS_ID WAIT_CLASS                count
----------- ------------- -------------------- ----------
         11    3871361733 Cluster                      50
         12     644977587 Queueing                      9

13 rows selected.

02 Buffer busy waits

原因:
      当一个会话试图修改一个数据块,但这个数据块正在被另一个会话修改时。
      当一个会话需要读取一个数据块,但这个数据块正在被另一个会话读取到内存中时。
      备注:数据处理的最小单位是块


select name,parameter1,parameter2,parameter3 from v$event_name where name='buffer busy waits'; 
 NAME                 PARAMETER1 PARAMETER2 PARAMETER3
-------------------- ---------- ---------- ----------
buffer busy waits    file#      block#     class#

File#:等待访问数据块所在的文件id号。
Blocks:等待访问的数据块号。
class#:原因码
A、如果等待处于字段头部,应增加自由列表(freelist)的组数,或者增加pctused到pctfree之间的距离。
B、如果等待处于回退段(undo)头部块,可以通过增加回滚段(rollback segment)来解决缓冲区的问题;
C、如果等待处于回退段(undo)非头部块上,就需要降低驱动一致读取的表中的数据密度,或者增大DB_CACHE_SIZE;
D、如果等待处于数据块,可以将数据移到另一数据块以避开这个"热"数据块、增加表中的自由列表或使用LMT表空间;
E、如果等待处于索引块,应该重建索引、分割索引或使用反向键索引。

问题处理:

select segment_type, owner ||'.'|| segment_name
from dba_extents
where file_id = file_id
and block_id between block_id and block_id + blocks - 1;

SEGMENT_TYPE       OWNER||'.'||SEGMENT_NAME
------------------ --------------------------------
ROLLBACK           SYS.SYSTEM
ROLLBACK           SYS.SYSTEM
ROLLBACK           SYS.SYSTEM
ROLLBACK           SYS.SYSTEM
TYPE2 UNDO         SYS._SYSSMU1_3724004606$
TYPE2 UNDO         SYS._SYSSMU1_3724004606$
TYPE2 UNDO         SYS._SYSSMU1_3724004606$
TYPE2 UNDO         SYS._SYSSMU1_3724004606$
TYPE2 UNDO         SYS._SYSSMU2_2996391332$
TYPE2 UNDO         SYS._SYSSMU2_2996391332$
TYPE2 UNDO         SYS._SYSSMU2_2996391332$

03 DB file scattered read

最常见的两种情况是全表扫描(FTS:Full Table Scan)和索引快速扫描(IFFS:index fast full scan)

04 Direct path read

当发生direct path read等待事件时,意味着磁盘上有大量的临时数据产生,比如排序,并行执行等操作。或者意味着PGA中空闲空间不足。

05 Direct path write

这个等待事件和direct path read正好相反,是会话将一些数据从PGA中直接写入到磁盘文件上,而不经过SGA。
这种情况通常发生在:
a.使用临时表空间排序(内存不足);
b.数据的直接加载(使用append方式加载数据);
c.并行DML操作。

06 Free buffer waits

当一个会话将数据块从磁盘读到内存中时,它需要到内存中找到空闲的内存空间来存放这些数据块,当内存中没有空闲的空间时,就会产生这个等待;除此之外,还有一种情况就是会话在做一致性读时,需要构造数据块在某个时刻的前映像(image),此时需要申请内存来存放这些新构造的数据块,如果内存中无法找到这样的内存块,也会发生这个等待事件。
当数据库中出现比较严重过的free buffer waits等待事件时,可能的原因是:
(1)、data buffer太小,导致空闲空间不够;
(2)、内存中的脏数据太多,DBWR无法及时将这些脏数据写到磁盘中以释放空间。
这个等待事件包含2个参数:
File#:需要读取的数据块所在的数据文件的文件号。
Block#:需要读取的数据块块号。

07 Library cache lock

一般可以理解的是alter table或者alter package/procedure会以X模式持有library cache lock,造成阻塞。
但是常见的问题还有以下几种原因:
1)错误的用户名密码:
2)正在执行搜集统计信息,这是大家往往会忽略的,一般会看last_ddl_time,却忽略了last_analyzed,
检查脚本如下:
比如EMP是遇到library cache lock中的表名:

###查看emp表上次ddl的时间
col OBJECT_NAME format a10;
select owner,object_name,object_type,to_char(last_ddl_time,'yyyy-mm-dd hh24:mi:ss') as last_ddl_time
from dba_objects 
where object_name='EMP';

###查看emp表上次分析的时间
select table_name,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss') as last_analyzed 
from dba_tables 
where table_name='EMP';

也需要检查所有dependency的对象,因为oracle对象是相互关联的,一个对象失效会导致一串失效。

查询与EMP相关的失效的对象:
select owner,object_name,object_type,to_char(last_ddl_time,'yyyy-mm-dd hh24:mi:ss') ddl_time from dba_objects where object_name in
(
select p.name
from sys.obj$ d, sys.dependency$ dep, sys.obj$ p
where d.obj# = dep.d_obj# and p.obj# = dep.p_obj#
start with d.name='EMP'
connect by prior dep.p_obj#=dep.d_obj#)
order by ddl_time desc;


select table_name,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss') from dba_tables where table_name in
(
select p.name
from sys.obj$ d, sys.dependency$ dep, sys.obj$ p
where d.obj# = dep.d_obj# and p.obj# = dep.p_obj#
start with d.name='EMP'
connect by prior dep.p_obj#=dep.d_obj#)
order by last_analyzed desc;

3)错误的语句解析(failed parse)

4)bug

08 Library cache pin

这个等待事件和library cache lock一样是发生在共享池中并发操作引起的事件。通常来讲,如果Oracle要对一些PL/SQL或者视图这样的对象做重新编译,需要将这些对象pin到共享池中。
如果此时这个对象被其他的用户特有,就会产生一个library cache pin的等待。

09 Log buffer space

当log buffer中没有可用空间来存放新产生的redo log数据时,就会发生log buffer space等待事件。如果数据库中新产生的redo log的数量大于LGWR写入到磁盘中的redo log数量,必须等待LGWR完成写入磁盘的操作,LGWR必须确保redo log写到磁盘成功之后,才能在redo buffer当中重用这部分信息。
如果数据库中出现大量的log buffer space等待事件,可以考虑如下办法:
(1)、增加redo buffer的大小。
(2)、提升磁盘的I/O性能。

10 Log file sequential read

这个等待事件通常发生在对redo log信息进行读取时,比如在线redo的归档操作,ARCH进程需要读取redo log的信息,由于redo log的信息是顺序写入的,所以在读取时也是按照顺序的方式来读取的。

11 Log file switch(archiving needed)

在归档模式下,这个等待事件发生在在线日志切换(log file switch)时,需要切换的在线日志还没有被归档进程(ARCH)归档完毕的时候。当在线日志文件切换到下一个日志时,需要确保下一个日志文件已经被归档进程归档完毕,否则不允许覆盖那个在线日志信息(否则会导致归档日志信息不完整)。
出现这样的等待事件通常是由于某种原因导致ARCH进程死掉,比如ARCH进程尝试向目的地写入一个归档文件,但是没有成功(介质失效或者其他原因),这时ARCH进程就会死掉。如果发生这种情况,在数据库的alert log文件中可以找到相关的错误信息。

12 Log file switch(checkpoint incomplete)

当一个在线日志切换到下一个在线日志时,必须保证要切换到的在线日志上的记录信息(比如一些脏数据块产生的redo log)被写到磁盘上(checkpoint),这样做的原因是,如果一个在线日志文件的信息被覆盖,而依赖这些redo信息做恢复的数据块尚未被写到磁盘上(checkpoint) ,此时系统down掉的话,Oracle将没有办法进行实例恢复。
在v$log视图里记录了在线日志的状态。通常来说,在线日志有三种状态。
Active:这个日志上面保护的信息还没有完成checkpoint。
Inactive:这个日志上面保护的信息已完成checkpoint。
Current:当前的日志。
Oracle在做实例恢复时,会使用状态为current和active的日志进行实例恢复。
如果系统中出现大量的log file switch(checkpoint incomplete)等待事件,原因可能是日志文件太小或者日志组太少,所以解决的方法是,增加日志文件的大小或者增加日志组的数量。

13 Log file sync

引起log file sync的原因:
1.频繁提交或者rollback,检查应用是否有过多的短小的事务,如果有,可以使用批处理来缓解。
2.OS的IO缓慢:解决办法是将日志文件放裸设备上或绑定在RAID 0或RAID 1+0中,而不是绑定在RAID 5中。
3.过大的日志缓冲区(log_buffer ) 过大的log_buffer,允许LGWR变得懒惰,因为log buffer中的数据量无法达不到_LOG_IO_SIZE,导致更多的重做条目堆积在日志缓冲区中。
当事务提交或者3s醒来时,LGWR才会把所有数据都写入到redo log file中。 由于数据很多,LGWR要用更多时间等待redo写完毕。
这种情况,可以调小参数_LOG_IO_SIZE参数,其默认值是LOG_BUFFER的1/3或1MB,取两者之中较小的值。
换句话说,你可以具有较大的日志缓冲区,但较小的_LOG_IO_SIZE将增加后台写入次数,从而减少log file sync的等待时间。
4.CPU负载高。详见下面的描述。
5.RAC私有网络性能差,导致LMS同步commit SCN慢

判断:
1.如果log file sync的等待时间很高,而log file parallel write的等待时间并不高,这意味着log file sync的原因并不是缓慢的日志I/O,而是应用程序过多的提交造成。
当log file sync的等待时间和 log file parallel write等待时间基本相同,说明是IO问题造成的log file sync等待事件。
2.Lgwr trace file(10.2.0.4开始),大于500ms会写入
trace文件中如果有Warning: log write time 1000ms, size 2KB,很有可能IO慢。3.分析CPU资源使用情况的工具,CPU过于繁忙,lgwr无法及时获取CPU调度,出现log file sync。
vmstat,关注r是否大于CPU核数,大于说明cpu繁忙。
log file sync=CPU+几个latch+log file parallel write(此处latch申请一般不是瓶颈)
--如果log file sync远大于log file parallel write的等待时间,只会为以下三种情况
1、CPU资源紧张
2、LGWR在申请latch资源时遇到竞争(IMU未使用,RAC环境下不适用)
3、同时提交的进程太多

解决办法:
1.如果确实是因为频繁提交造成的log file sync,那么减少commit,批量提交。
2.如果确实是因为io引起的,那么解决办法是将日志文件放裸设备上或绑定在RAID 1+0中,而不是放在在RAID 5中(切记,redo log file一定不要放在SSD上!!!)。
3.确保CPU资源充足。CPU资源不足,LGWR通知user session后,user session无法及时获得CPU调度,不能正常工作。
4.是否有些表可以使用nologging,会减少redo产生量5.检查redo log file足够大,确保redo log file每15到20分钟切换一次。

14 cursor: pin S wait on X

cursor: pin S,cursor: pin X,cursor: pin S wait on X这三个等待事件,实际上就是替代了cursor的library cache pin,pin S代表执行(share pin),pin X代表解析(exclusive pin),
pin S wait on X代表执行正在等待解析操作。
这里需要强调一下,它们只是替换了访问cursor的library cache pin,而对于访问procedure这种实体对象,依然是传统的library cache pin。
cursor: pin S wait on X,这个等待事件主要是由硬解析引起的
--硬解析,软解析,软软解析在共享池中的等待事件
1、硬解析:latch: shared pool,硬解析需要所有类型的mutex,包括library cache: mutex,cursor: pin,HASH Table,cursor Parent
2、软解析:library cache: mutex,cursor: pin,HASH Table,cursor Parent
3、软软解析(将子游标堆6的信息,缓存在PGA中。子游标堆6:保存执行计划信息):两次cursor: pin S和一次library cache: mutex X(如果使用绑定变量或且使用静态游标,会导致一次library cache: mutex X)
4、sql版本过多:library cache和HASH Table类型等待
总结:如果只有cursor: pin类型和library cache: mutex型竞争激烈,是软软解析问题;如果还有其他类mutex型等待,则是软解析导致。如果再有shared pool latch竞争激烈,一定是硬解析过多,由于大量进程同时请求从共享池中分配内存导致;
版本过多的硬解析:library cache lock和HASH Table类型等待同时出现,如果只有HASH Table类型等待而没有library cache lock,则是版本过多的父游标有很多并发的软解析。

硬解析导致异常等待处理:使用绑定变量(应用层面),cursor sharing=true 禁用ACS(adaptive cursor sharing),配置充足的shared pool v$sqlarea sql_text列中相似的sql很多,说明未使用绑定变量
软解析争用处理:调整session cached cursors参数,使软解析变为软软解析
软软解析导致争用处理:cursor pin:s ,使用提示符/**/改变sql hash值,将一条SQL变为多条减少争用;应用层缓存游标,实现一次解析,多次执行

--导致oracle high version count(高版本游标)
原因:1、owner不同 2、表统计信息发生变化 3、系统环境统计信息发生变化
SELECT * FROM v$sql_shared_cursor e WHERE e.SQL_ID = 'a4tjn5xjzx2mt'
绑定变量长度变大会导致BIND_MISMATCH

15 latch:cache buffers chains

一般产生CACHE BUFFERS CHAINS的原因有几个方面:

1、buffer cache太少(也说明SQL语句效率低,较多的逻辑读意味着较多的latch get操作,从而增加了锁存器争用。多个进程同时扫描大范围的索引或表时,可能广泛地发生cache buffers chains 锁存器争用);

2、热块挣用。(从oracle9i开始,对latch:cache buffer chains支持只读共享访问,这可以减少部分争用,但并不能完全消除争用。)
当多个会话重复访问一个或多个由同一个子cache buffers chains锁存器保护的块时,就会产生热块挣用。当多个会话争用cache buffers chains锁存器时,找出是否有热块的最好的方法是检查latch free等待事件的P1RAW参数值。
判断热块挣用的另一种方法是从 v$session_wait 视图获得锁存器地址后进行比较。v$session_wait的P1RAW就相当于子锁存器地址,若从 v$session_wait 视图获得的锁存器地址过多重复出现,就意味着对相应锁存器发生次数偏多,此时可解释为热快引起的争用。如果会话正在相同的锁存器地址上等待,就是热块。

SQL> select sid,p1raw,p2,p3,seconds_in_wait,wait_time,state from v$session_wait where event='latch: cache buffers chains' order by 3,2;

使用P1RAW=00000300DA316800为例子进行关联热快对象。

SQL> select a.hladdr,a.file#,a.dbablk,a.tch,a.obj,b.object_name from x$bh a, dba_objects b
where (a.obj = b.object_id or a.obj = b.data_object_id) and a.hladdr = '00000300DA316800'
union select hladdr,file#,dbablk,tch,obj,null from x$bh
where obj in (select obj from x$bh where hladdr = '00000300DA316800' minus select object_id from dba_objects minus sel

标签:oralce,cache,log,33,常见,file,日志,等待,name
From: https://www.cnblogs.com/xulinforDB/p/17496438.html

相关文章

  • [Leetcode] 0733. 图像渲染
    733.图像渲染点击上方,跳转至leetcode题目描述有一幅以 mxn 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数sr, sc和newColor。你应该从像素 image[sr][sc] 开始对图像进行上色填充。为了完成上色工作,从......
  • 外汇天眼:交易者亏损最常见的5大原因!
    外汇交易市场无疑是世界上规模最大的金融市场,平均而言,每日的交易规模超5万亿美元。随着外汇市场开放度和国际竞争力不断提升,外汇投资已经成为了越来越多投资者所认可的一种投资。伴随着越来越多的投资者加入到外汇交易的队伍中,不能否认,在外汇市场确实有人通过做外汇而一夜暴富,但是......
  • 常见错误问题 --- chrome自带google翻译失效
    现象在英文网站时,地址栏没有翻译按钮、右键菜单没有翻译条目原因未知解决当地址栏没有翻译按钮时,看右键菜单有没有翻译条目当右键菜单没有翻译条目时,刷新网页再次看右键菜单有没有翻译条目注意加载页面时翻译......
  • IS220PAICH2A 336A4940CSP11通用电气模拟输入输出模块
    IS220PAICH2A336A4940CSP11通用电气模拟输入输出模块IS220PAICH2A336A4940CSP11通用电气模拟输入输出模块  但是传统的以太网是一种商用网络,要应用到工业控制中还存在一些问题,主要有以下几个方面。1、存在实时性差,不确定性的问题传统的以太网采用了CSMA/CD的介质......
  • IS220PDOAH1A 3364940CSP2通用电气I/O模块
    IS220PDOAH1A3364940CSP2通用电气I/O模块IS220PDOAH1A3364940CSP2通用电气I/O模块 随着相关技术的发展,以太网的发展也取得了本质的飞跃,再借助于相关技术,可以从总体上提高以太网应用于工业控制中的实用性。1、采用交换技术传统以太网采用共享式集线器,其结构和功能仅......
  • TMS320F28335光伏并网逆变器生产资料(另有离网状态 ),包含(原理图/PCB/
    TMS320F28335光伏并网逆变器生产资料(另有离网状态),包含(原理图/PCB/源代码,说明文挡),无实物。YID:3128609798582139......
  • 武汉星起航跨境:常见的亚马逊站外推广渠道有哪些?
    作为亚马逊卖家,站外推广是提升产品曝光度和销售量的重要策略之一。除了在亚马逊平台内进行推广,卖家还可以利用多种站外推广渠道来吸引更多潜在买家。星起航浅分享下亚马逊卖家常用的站外推广渠道:社交媒体广告:利用社交媒体平台如Facebook、Instagram、Twitter等进行广告投放是一种有......
  • 智能台灯语音方案:NRK3303语音识别芯片,更好的用户体验
    智能家居的发展已经成为了当今科技界的热门话题,其中智能台灯作为智能家居的组成部分越来越受到人们的关注。智能台灯的出现,意味着家居生活将迎来更加便捷的方式。而随着语音识别技术的发展,智能台灯的语音方案也越来越受到人们的青睐。今天,我们来介绍一款智能台灯语音方案:NRK3303语......
  • 智能台灯语音方案:NRK3303语音识别芯片,更好的用户体验
    智能家居的发展已经成为了当今科技界的热门话题,其中智能台灯作为智能家居的组成部分越来越受到人们的关注。智能台灯的出现,意味着家居生活将迎来更加便捷的方式。而随着语音识别技术的发展,智能台灯的语音方案也越来越受到人们的青睐。今天,我们来介绍一款智能台灯语音方案:NRK3303语......
  • 五种常见的DNS攻击类型!
    目前,DNS攻击已经成为网络安全中非常常见的攻击方式之一,而且其危害和影响也非常之大,每年都有不少网站成为了这类攻击的受害者。因此为了免受其害,做到有效防御,我们需要对DNS攻击类型进行一定的了解,本文为大家介绍五种常见的DNS攻击类型,快来看看吧。1、DNS劫持DNS劫持又称......