在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

ORACLE的buffer busy wait等待事件怎么解决

112次阅读
没有评论

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

本文丸趣 TV 小编为大家详细介绍“ORACLE 的 buffer busy wait 等待事件怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“ORACLE 的 buffer busy wait 等待事件怎么解决”文章能帮助大家解决疑惑,下面跟着丸趣 TV 小编的思路慢慢深入,一起来学习新知识吧。

1. ORACLE  访问 Data buffer block 的过程:
1)依据数据块的地址计算出数据块所在的 bucket
2)获得保护这个 bucket 的 cbc latch
3)在这个链表上找寻我们需要的数据块,找到后,pin 这个 buffer(读取 s,修改 x)
4)释放 cbc latch
5)读取 / 修改数据块的内容
6)获取 cbc latch
7)unpin 这个 buffer
8)释放 cbc latch

2.buffer busy wait 等待事件形成原因:
(1). 读读
当一个 session 读取一个 block 时,该 block 在 cache 中不存在,需要从 disk 读取至 cache,此时其他 session 想要读取该 block 时,就会发生 buffer busy wait 等待事件。

(2). 写写
当一个 session 修改 block 时,首先会对该 block 进行 buffer pin(修改 x), 因此其他 session 在对该 block 进行修改时都要等待上一个 session unpin buffer。

(3). 读写
1)当读取的进程发现内存块正在被修改的时候(如果有 x 模式的 buffer pin,就说明正在被修改),它只能等待,它不能 clone 块,因为这个时候内存块正在变化过程中 ing,这个时候 clone 是不安全的。很多人说,oracle 里读写是互相不阻塞的,oracle 可以 clone 内存块,把读写的竞争分开。其实要看情况,在读的时候发现内存块正在被写,是不能够 clone 的,因为是不安全的。这个时候读的进程只能等待 buffer busy waits。
2)当写的进程发现内存块正在被读,这个时候,读是不阻塞写的,因为 ORACLE 可以很容易的 clone 出一个 xcur 的数据块,然后在 clone 的块上进行写,这个时候 clone 是安全的,因为读内存块的进程不会去修改数据块,保证了 clone 的安全性。

3.buffer busy wait 常见发生原因
(1). 性能差的 QUERY 访问相同的 block 并发执行时,产生大量的物理读。 
(2). freelist 设置过小,导致并发 insert table 时,频繁扫描 freelist,产生争用。
(3). 大量 session 并发修改相同的 index block

4. 常用解决方法
(1). tuning sql 减少物理读
(2). 删除一些 hot row 并重新 insert 至其他 block 中
(3). 如果 table 较小,可以考虑将其数据 cache 至 keep data buffer 中
(4). 减少 low cardinality index 的使用。避免 index block 争用。
(5). 增加 extents size。避免 oracle 频繁分配空间而造成的 extent map 争用。

5. 产生等待的 block 类型及解决方法

Block Type
Possible Actions
data blocks
Eliminate HOT blocks from the application.                 Check for repeatedly scanned / unselective indexes.                 Change PCTFREE and/or PCTUSED. Check for right-                 hand-indexes (indexes that get inserted into at the                  same point by many processes). Increase INITRANS.                  Reduce the number of rows per block.
segment header
Increase of number of FREELISTs.                  Use FREELIST GROUPs (even in single instance this                  can make a difference).
freelist blocks
Add more FREELISTS. In case of Parallel Server                  make sure that each instance has its own FREELIST                  GROUP(s).
undo header
Add more rollback segments. 

6. 相关命令

 SELECT p1 File , p2 Block , p3 Reason
    FROM v$session_wait 
   WHERE event= enq: TX – row lock contention
   
select objd, file#,block#,class#,ts#,cachehint,status,dirty from v$bh where file#=546 and block#=1289912;

select * from dba_objects where object_id = 124269

select current_obj#,obj.object_name,count(*) from dba_hist_active_sess_history , dba_objects obj
where event= buffer busy waits  
and sample_time =to_date(2017-07-09 00:00:00 , yyyy-mm-dd hh34:mi:ss) 
and sample_time =to_date(2017-07-10 00:00:00 , yyyy-mm-dd hh34:mi:ss) 
and obj.data_object_id = current_obj#
group by current_obj#,obj.object_name

读到这里,这篇“ORACLE 的 buffer busy wait 等待事件怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计2514字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 久久久久亚洲精品一区二区三区 | 99热久久国产这里有只有精品 | 色老汉免费网站免费视频 | 99re最新地址获取精品 | 殴美毛片| 亚洲天堂精品视频 | 色射视频| 在线观看中文字幕第一页 | 性做久久久久久久久老女人 | 丰满少妇三级全黄 | 亚洲高清在线 | 伊人啪啪网 | 午夜性爽视频男人的天堂在线 | 无码粉嫩虎白一线天在线观看 | 国产一级影视 | 青青草原免费在线观看 | 欧美一区二区在线观看视频 | 国产日韩欧美精品一区二区三区 | 欧美在线色视频 | 橘梨纱一区2区3区高清在线 | 亚洲最大天堂无码精品区 | 欧美精品一二三区 | 亚洲综合激情五月色播 | 第一毛片| 玖玖玖免费观看视频 | 日韩欧美一区二区在线观看 | 一级人做人爰a全过程免费视频 | 性盈盈影院影院67194 | 2017日本三级 | 亚洲精品无码av中文字幕 | 自拍 另类 综合 欧美小说 | 无码人妻丰满熟妇区毛片 | av天堂亚洲国产av | 久久成人免费观看全部免费 | 一区二区中文字幕在线观看 | 九九精品视频在线观看 | 久久精品夜色国产亚洲av | 91亚洲精品第一综合不卡播放 | 免费人成再在线观看网站 | 成人久久 | 中文亚洲av片在线观看不卡 |