加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_马鞍山站长网 (https://www.0555zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle高并发系列1:DML引起的常见问题及优化思路

发布时间:2021-01-08 07:25:15 所属栏目:站长百科 来源:网络整理
导读:副标题#e# 《Oracle高并发系列1:DML引起的常见问题及优化思路》要点: 本文介绍了Oracle高并发系列1:DML引起的常见问题及优化思路,希望对您有用。如果有疑问,可以联系我们。 作者介绍 王鹏冲,平安科技数据库技术专家,浸淫数据库行业十多年,对Oracle数据

Oracle进行找空块的过程中,如果这些块不在内存中,会增加物理读,如果这些块还需要做延迟块清除或者还要回滚,则需要触发更多系统递归操作,可见,如果“failed probes”过多,split效率低下时,会直接导致index contention增加.

3、enq: HW –contention

TABLE的High WaterMark(即高水位线)标识table segment中已用空间和未用空间的边界,具体来讲,HWM以上的block的状态是:unformattedand have never been used; HWM以下的block的状态是:Allocated,but currentlyunformatted and unused、 Formatted and contain data、Formatted and empty because the data was deleted.当HWM以下的block都无空闲空间可以使用时,Oracle会推进HWM来申请分配新的block到segment里面,而HW enqueue锁被用来管理推进HWM分配新空间时的串行操作.

显而易见,当高并发的insert发生时,甚至表中若有LOB字段时情况更糟,HWM的推进分配新空间的速度赶不上并发会话所需空间的速度时,就会发生在HW的enq上的等待.

解决思路: ?

  • 删除无用索引.
  • 改造为hash分区表.同一时间的并发的空间分配需求会被打散到多个分区段上.
  • 提前手工allocatenew空间(可以做成定期自动任务).
  • 主动shrink回收可以重用的空间,避免业务高峰期的自动allocate竞争.
  • 设置表空间更大的UNIFORM SIZE,每次allocate更多extent到表的HWM之上,避免HWM剧烈时偶尔还会等在表空间的extent分配上.
  • 确保使用ASSM (Automatic segment spacemanagement) tablespace.
  • 隐含参数_bump_highwater_mark_count,可以控制HWM每次推进的block个数.但是设置该隐含参数应该得到Oracle的支持,而且对其它小表有负面影响.
  • 检查IO子系统性能,有时候IO性能的变化也会导致空间分配操作缓慢,进而引发等待.
  • LOB段空间的频繁重回收,可能也会导致该竞争,针对LOB可以适当增加chunk,每次分配更多空间;也可以主动allocate 或shrink
  • 另外针对使用ASSM表空间的LOB有一个Bug 6376915注意检查是否已applied fixed patch,并且要通过设置event来启用.此event用于控制1次LOB chunk回收操作时的chunk个数(default是1),进而可以减少HWM enq等待发生的次数.
  • EVENT=”44951 TRACE NAME CONTEXT FOREVER,LEVEL < 1 -1024 >”
4、enq: US –contention

这个等待事件通常说明会话在等待Undo Segment,注意等待的原因一般其实并不是因为UNDO TABLESPACE没有空间了,UNDO表空间不足会直接报ORA-30036(NOSPACEERRCNT).

(编辑:网站开发网_马鞍山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!