ORACLE常见等待事件有哪些

59次阅读
没有评论

共计 3042 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章主要介绍“ORACLE 常见等待事件有哪些”,在日常操作中,相信很多人在 ORACLE 常见等待事件有哪些问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ORACLE 常见等待事件有哪些”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

1、db file sequential read

将数据读到连续的内存, 等待时间是由于执行对索引,回滚(undo)段,和表(当借助 rowid 来访问),控制文件和数据文件头的单块读操作 SQL 语句(用户和递归)引起的。

db file sequential read 的优化方法:

从读取开始,增加 SGA 中 buffer cache 的大小,避免每次都从硬盘中去读数;

优化 sql 语句,减少不必要的块读取;

db file scattered read  

db file scattered read 发出离散读,将存储上连续的数据块离散的读入到多个不连续的内存位置。这个事件表明用户进程正在读数据到 Buffer Cache 中,等待直到 I / O 调用返回引起的等待。

2、direct path read/write(直接路径读/写):

直接路径读(direct path read)通常发生在 Oracle 直接读数据到进程 PGA 时,这个读取不需要经过 SGA。

DB file Sequential ReadDB file Scattered ReadDirect Path Read

这类读取通常在以下情况被使用:

1. 磁盘排序 IO 操作;

2. 并行查询从属进程;

3. 预读操作。

直接路径写(direct path write)通常发生在 Oracle 直接从 PGA 写数据到数据文件或临时文件,这个写操作可以绕过 SGA。

这类写入操作通常在以下情况被使用:

1. 直接路径加载;

2. 并行 DML 操作;

3. 磁盘排序;

优化方法:1. 增加 pga_aggregate_target  2. 并行查询导致性能问题,修改并行度

3、Buffer busy waits —hot block

这个等待事件的产生仅说明了一个会话在等待一个 Buffer(数据块),当多个用户频繁地读取或者修改同样的数据块时,这个等待事件就会产生。如果等待的时间很长,我们在 AWR 或者 statspack 报告中就可以看到。

这个等待事件有三个参数。查看有几个参数我们可以用以下 SQL:

SQL select name,parameter1,parameter2,parameter3,wait_class 

        from v$event_name 

        where name= direct path write

P1 P2 P3 别代表文件号、起始数据块号、数据块的数量

解决 hot block 的方法有:

1、出现此情况通常可能通过几种方式调整:增大 data  buffer;

2、增加 freelist,减小 pctused;怎样的目的是将一个 block 上可以使用的空间减少,这样的话:一个 block 上的数据存放的较少,可以提高应用的访问并发率,减少 hot block 的产生;

3、增加回滚段数目,增大 initrans,考虑使用 LMT, 确认是不是由于热点块造成(如果是可以用反转索引, 或者用更小块大小);

3、可以建立 block 较小的表空间,见热点对象移动到此表空间上去;

4、优化应用,优化索引,提高索引的命中率;

◎ Oracle 会话正在等待钉住一个缓冲区。必须在读取或修改缓冲区前将它钉住。在任何时刻只有一个进程可以钉住一个缓冲区。

◎ buffer busy waits 表明读 / 读、读 / 写、写 / 写争用。

◎ 采取的适当措施取决于 P3 参数中的原因码。

A、如果等待处于字段头部,应增加自由列表(freelist)的组数,或者增加 pctused 到 pctfree 之间的距离。

B、如果等待处于回退段(undo)头部块,可以通过增加回滚段 (rollback segment) 来解决缓冲区的问题;

C、如果等待处于回退段(undo)非头部块上,就需要降低驱动一致读取的表中的数据密度, 或者增大 DB_CACHE_SIZE;

D、如果等待处于数据块,可以将数据移到另一数据块以避开这个 热 数据块、增加表中的自由列表或使用 LMT 表空间;

E、如果等待处于索引块,应该重建索引、分割索引或使用反向键索引。

4、log file sync

等待时间发生在 redo log 从 log buffer 写入到 log file 期间。

此等待事件用户发出提交或回滚声明后, 等待提交完成的事件, 提交命令会去做日志同步, 也就是写日志缓存到日志文件,在提交命令未完成前, 用户将会看见此等待事件.

解决办法:

当发生 log file sync 等待后, 判断是否由于缓慢的日志 I / O 造成的, 可以查看两个等待事件的等待时间, 如果比较接近, 就证明日志 I / O 比较缓慢或重做日志过多, 这时, 造成 log file sync 的原因是因为 log file parallel write。

如果 log file sync 的等待时间很高, 而 log file parallel write 的等待时间并不高, 这意味着 log file sync 的原因并不是缓慢的日志 I /O, 而是用户过多的提交造成。

  当 log file sync 的等待时间和 log file parallel write 等待时间基本相同,说明是 IO 问题造成的 log file sync 等待事件。

5、Log File Switch 等待事件  

这个等待出现时,表示所有的提交 (commit) 的请求都需要等待 日志文件切换 的完成。

Log file Switch 主要包含两个子事件:

log file switch (archiving needed)

log file switch (checkpoint incomplete)

其中 log file switch (archiving needed)

这个等待事件出现时通常是因为日志组循环写满以后,第一个日志归档尚未完成,出现该等待。出现该等待,可能表示 io 存在问题。解决办法:

可以考虑增大日志文件和增加日志组

移动归档文件到快速磁盘

调整 log_archive_max_processes

而 log file switch (checkpoint incomplete)- 日志切换(检查点未完成)

当你的日志组都写满以后,LGWR 试图写第一个 log file,如果这时数据库没有完成写出记录在第一个 log file 中的 dirty 块时(例如第一个检查点未完成),该等待事件出现。

该等待事件通常表示你的 DBWR 写出速度太慢或者 IO 存在问题。

为解决该问题,你可能需要考虑增加额外的 DBWR 或者增加你的日志组或日志文件大小。

6、log buffer space

日志缓冲 (log buffer) 产生重做日志的速度比 LGWR 的写出速度快,或者是当日志切换 (log switch) 太慢时,就会发生这种等待。这个等待出现时,通常表明 redo log buffer 过小,为解决这个问题,可以考虑增大日志文件的大小,或者增加日志缓冲器的大小。

    另外一个可能的原因是磁盘 I /O 存在瓶颈,可以考虑使用写入速度更快的磁盘。在允许的条件下设置可以考虑使用裸设备来存放日志文件,提高写入效率。在一般的系统中,最低的标准是,不要把日志文件和数据文件存放在一起,因为通常日志文件只写不读,分离存放可以获得性能提升。

到此,关于“ORACLE 常见等待事件有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计3042字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)