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等待相关知识的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段