oracel等待相关知识

Posted 米米家的呆小瓜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracel等待相关知识相关的知识,希望对你有一定的参考价值。

SQL*Net message from client 空等待

SQL> SELECT DISTINCT SID FROM V$MYSTAT; 
SQL> SELECT SID,EVENT,STATE FROM V$SESSION WHERE SID = 7;

造成等待三种情况

请求的资源太忙,需要等待资源释放 
会话处于空闲状态,等待新的任务 
会话被阻塞,需要等待阻塞解除

常识

数据库处理数据,只要有时间消耗,就会有等待事件 性能和等待是个矛盾体 理解出现某种等待事件的原因 结合业务,主观的看待等待事件 指定基线,发现异常等待事件 接受合理的等待事件

 等待分类

Administrative
因为命令导致的等待事件,建索引导致的
Application
应用代码导致的,锁定等
Cluster
和rac相关的等待,全局内存等待
Commit
会话提交,log file sync
Concurrency
并发
Configuration
数据库参数的配置,log file sizes;shared pool size
Idle
登录后未操作导致的等待
Network
网络等待,例如dblink导致的
Queue
并发队列导致的等待
Schedular
定时任务相关的
System I/O
数据库进程导致的I/O,刷脏数据刷不过来
User I/O
用户SQL导致的等待
Other
其他所有的等待

查看等待,查当前会话的等待

SQL> SELECT * FROM V$SESSION_WAIT;

ilde wait events

client message
parallel query dequeue
dispatcher timer
rdbms ipc message
Null event
SQL*Net message from client
smon timer
SQL*Net message to client
PX idle Wait
SQL*Net more data from client
pipe get
wakeup time manage
PL/SQL lock timer
virtual circuit status
pmon timer
lock manager wait for remote message

cpu不属于等待事件

SQL> SELECT NAME,VALUE FROM V$SYSSTAT WHERE NAME LIKE \'%CPU%\';

db file scattered read

当数据块以multiblock read的形式被读取到SGA中时
FTS(full table scan)
IFFS(index fast full scan)
db_file_multiblock_read_count

DB File Sequential Read

索引中拿到地址后去通过地址取数据导致的等待
读表导致的
undo读取导致的

Direct Path Read直接路径读取

数据直接读取到PGA内存中时,发生的等待。
    排序数据由于内存不足,被写到磁盘上(temp表空间数据文件),然后重新读取时
    并行操作的slave进程的数据读取
    其他属于某个会话私有数据的读取操作
参数说明
    P1读取文件的ID
    P2读取开始的数据块id
    p3读取数据块数量
解决方法
    无需解决
    增大内存排序区(PGA)
    调整操作的并行度
    改善磁盘I/O

Direct Path Write直接写到磁盘上

数据从PGA内存中直接写道磁盘上,发生的等待
    排序数据由于内存不足,被写到磁盘上了(temp表空间数据文件)
    并行操作的slave进程向磁盘上写数据
    其他的属于某个会话私有数据的读取操作
参数说明
    P1读取文件的ID
    P2读取开始的数据块id
    p3读取数据块数量

Log File Sync

用户commit(rollback)时,lgwr需要将log buffer的数据写到log file上面,发生的等待
原因是提交太频繁
参数说明
    P1写入文件的数据块数
解决方式
    减少commit的频率
    提高I/O性能

buffer busy waits

内存中相同的数据块有多个并发请求时,导致这个等待
参数说明
    P1读取数据块所在文件的ID
    p2读取的数据块ID
    p3等待类型(class id)
SQL> SELECT ROW_WAIT_OBJ# FROM V$SESSION WHERE EVENT = \'buffer busy waits\';
SQL> SELECT OWNER,OBJECT_NAME,SUBOBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE DATA_OBJECT_ID = &ROW_WAIT_OBJ.
解决方法
    热块:
    segment header ASSM
    data block     ASSM,反向索引
    undo header    automatic undo management
    undo block    增大回滚段

free buffer waits

server process无法找一个可用内存空间
    系统I/O成为瓶颈
    等待资源latch争用
    SGA太小
    SGA太大,dbwr无法快速的把脏数据刷到磁盘上
参数说明
    P1读取数据块所在文件ID
    P2读取的数据库ID
    P3无
解决方式
    优化I/O
     - 提高I/O通道性能
     - 异步I/O
     - 增加多个dbwr进程
    增大SGA

rdbms ipc reply(Other)

两个IP进程之间通讯应答导致的等待,可能是rac中某个挂掉了导致的

reliable message(Other)

当跨实例发送消息时,发送者期望收到订阅者的回复信息,如果得不到可信回复,就会一直处于等待。
等待以3秒为周期进行反复尝试,直到收到所有订阅者的回复或者被唤醒。
在RAC环境中如果此等待事件出现在top5中,那就说明在节点间的通讯已经出现问题,一个节点得不到另外一个节点
的可信回复,这个等待事件已经严重影响了性能,这个时候就要检查节点间的通信是否正常,是否网络负载过大等。

gc current block 2-way(Cluster)

两个节点之间通道导致的等待

V$SESSION_EVENT查看其他会话的累积

SELECT EVENT,TOTAL_WAITS FROM V$SESSION_EVENT WHERE SID = 165;

V$SYSTEM_EVENT实例层的等待,从数据库启动开始,不太实用

SELECT EVENT,TOTAL_WAITS FROM V$SYSTEM_EVENT;

 

 

以上是关于oracel等待相关知识的主要内容,如果未能解决你的问题,请参考以下文章

Oracel期末复习知识点——背完这33题想挂都难

Oracel和Mysql的相关的错题

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

android小知识点代码片段

触发器_实现ORACEL自动增长字段

线程池相关知识点