最近有同事遇到某客户数据库产生大量阻塞,等待事件为:enq HW - contention,最开始采用不断杀会话的方式,效果不好,问题一直高频反复。进一步确认SQL是大量的insert,且插入的表中含有LOB字段,根据经验最终采用设置44951 event缓解了该问题。

具体关于Oracle的44951事件,可参考Maclean的文章:

这篇文章中采用的设置方法是:

  1. alter system set events '44951 trace name context forever, level 1024';

需要注意的是,这种设置方法在重启数据库后就会失效,若需要重启后永久生效,需设置event:

  1. alter system set event='44951 trace name context forever, level 1024' scope=spfile;

但说到这里就需要深入了解下event和events的区别,这里大概测试总结有如下区别:

  • 1.events立即生效,重启数据库后消失
  • 2.events无法直接通过show parameter event查看
  • 3.event后面必须有等号,重启数据库后生效,可通过show parameter event查看
  • 4.event需要注意不要覆盖掉之前的event设置,如果这个知识点不理解很容易产生误操作,需要特别注意

补充说明:

比如在11g的最佳实践中,通常已经设置10949和28401event:

  1. alter system set event='28401 trace name context forever,level 1','10949 trace name context forever,level 1' sid='*' scope=spfile;

所以如果有需求额外设置44951 event,就需要将之前的也写上(否则就会覆盖):

  1. alter system set event='28401 trace name context forever,level 1','10949 trace name context forever,level 1','44951 trace name context forever,level 1024' sid='*' scope=spfile;

events设置的值如何查看?使用下面的脚本(注意循环的范围要包含要查询的events):

  1. set serveroutput on
  2. declare
  3. event_level number;
  4. begin
  5. for i in 10000..50000 loop
  6. sys.dbms_system.read_ev(i,event_level);
  7. if (event_level > 0) then
  8. dbms_output.put_line('Event '||to_char(i)||' set at level '||
  9. to_char(event_level));
  10. end if;
  11. end loop;
  12. end;
  13. /

查询结果类似如下:

  1. Event 10949 set at level 1
  2. Event 28401 set at level 1
  3. Event 44951 set at level 1024

附:Maclean使用的测试用例:

  1. create user maclean identified by maclean;
  2. grant resource, connect, dba to maclean;
  3. conn maclean/maclean
  4. CREATE TABLE "MACLEAN_LOB" ( "T1" VARCHAR2(200) NOT NULL , "T2" CLOB, "T3" CLOB) tablespace users
  5. LOB ("T2")
  6. STORE AS ( TABLESPACE "USERS" CHUNK 16K PCTVERSION 50 CACHE )
  7. LOB ("T3")
  8. STORE AS ( TABLESPACE "USERS" CHUNK 16K PCTVERSION 50 CACHE );
  9. select segment_space_management from dba_tablespaces where tablespace_name='USERS';
  10. exec dbms_workload_repository.create_snapshot;
  11. --开3个进程并发插入LOB
  12. begin
  13. for i in 1..10000 loop
  14. insert into maclean.maclean_lob values ('ABC',rpad('Z',32000,'L'),rpad('Z',32000,'L'));
  15. end loop;
  16. commit;
  17. end;
  18. /
  19. exec dbms_workload_repository.create_snapshot;
  20. select bytes/1024,segment_name from dba_segments where segment_name in (select segment_name from dba_lobs where table_name='MACLEAN_LOB' and owner='MACLEAN');
  21. truncate table maclean.maclean_lob;
  22. select bytes/1024,segment_name from dba_segments where segment_name in (select segment_name from dba_lobs where table_name='MACLEAN_LOB' and owner='MACLEAN');
  23. alter system flush buffer_cache;
  24. alter system flush shared_pool;
  25. alter system set events '44951 trace name context forever, level 1024';
  26. exec dbms_workload_repository.create_snapshot;
  27. --开3个进程并发插入LOB
  28. begin
  29. for i in 1..10000 loop
  30. insert into maclean.maclean_lob values ('ABC',rpad('Z',32000,'L'),rpad('Z',32000,'L'));
  31. end loop;
  32. commit;
  33. end;
  34. /
  35. exec dbms_workload_repository.create_snapshot;
  36. select bytes/1024,segment_name from dba_segments where segment_name in (select segment_name from dba_lobs where table_name='MACLEAN_LOB' and owner='MACLEAN');
  37. 以上可以看到虽然设置了44951 level 1024,但并不会因为单次bump hwmchunks数增加而导致大量空间的浪费。
  38. 对比AWR可以发现设置44961 level 1024 enq HW - contention消耗的DB TIME明显减少:
  39. 此外在10.2.0.3之前还有一种方案即设置LOBPCTVERSION 0/100,但是该方案会导致LOB占用的SPACE大幅上升,所以不推荐,你有大量的理由至少升级DB10.2.0.5.9

通过这个测试用例实验效果,确实设置前后的效果明显:





注意:这里主要看enq HW - contention的优化效果,其他event也有调整优化空间,但不在本文讨论范围。

关于Oracle的44951事件的更多相关文章

  1. Oracle Tuning 基础概述01 - Oracle 常见等待事件

    对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据 ...

  2. [转帖]Oracle 起诉 Google 事件

    Oracle 起诉 Google 事件 https://www.cnblogs.com/panchanggui/p/9449842.html Oracle 是世界第二大软件公司 世界第一大DBMS公司 ...

  3. 【Oracle】等待事件之 V$SESSION_WAIT

    (1)-V$SESSION_WAIT 这是一个寻找性能瓶颈的关键视图.它提供了任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做,则显示它最后的等待事件).当系统存 ...

  4. ORACLE 常见等待事件

    一. 等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...

  5. Oracle 起诉 Google 事件

    最近,Google 和 Oracle 纠缠多年的“Java 侵权案”又有了新的判决结果.Google 在此次对决中败诉,并可能需要支付高达88亿美元的赔偿金.这个案件还引发关于 API(应用程序编程接 ...

  6. Oracle常见等待事件

    1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: ·         当一个会话视图 ...

  7. 【Oracle】等待事件详细内容

    一.等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不 ...

  8. oracle之 等待事件LOG FILE SYNC (awr)优化

    log file sycn是ORACLE里最普遍的等待事件之一,一般log file sycn的等待时间都非常短 1-5ms,不会有什么问题,但是一旦出问题,往往都比较难解决.什么时候会产生log f ...

  9. Oracle之 等待事件log file sync + log file parallel write (awr优化)

    这是3月份某客户的情况,原因是server硬件故障后进行更换之后,业务翻译偶尔出现提交缓慢的情况.我们先来看下awr的情况. 我们能够看到,该系统的load profile信息事实上并不高,每秒才21 ...

随机推荐

  1. 代码生成工具更新--快速生成Winform框架的界面项目

    在之前版本的代码生成工具Database2Sharp中,由于代码生成都是考虑Winform和Web通用的目的,因此Winform界面或者Web界面都是单独生成的,在工具中生成相应的界面后,复制到项目里 ...

  2. UOJ#55. 【WC2014】紫荆花之恋 点分树 替罪羊树 平衡树 splay Treap

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ55.html 题解 做法还是挺容易想到的. 但是写的话…… 首先这种题如果只要求一棵树中的满足条件的点数( ...

  3. 带URL的XML解析方式

    XmlDocument xml = new XmlDocument(); xml.LoadXml(responseString); XmlNode root = xml.DocumentElement ...

  4. HTML,js的基础知识

    HTML 元素语法 HTML 元素以开始标签起始 HTML 元素以结束标签终止 元素的内容是开始标签与结束标签之间的内容 某些 HTML 元素具有空内容(empty content) 空元素在开始标签 ...

  5. 关于FastReport在winform中的使用(包含FastReport.net的安装步骤链接)

    一.FastReport的简介 FastReport是功能齐全的报表控件,使开发者可以快速并高效地为·NET/VCL/COM/ActiveX应用程序添加报表支持. 二.FastReport的安装(推荐 ...

  6. pymongo使用手册

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...

  7. SQL语句删除表中的字段只留下最新一行

    方法一 DELETE FROM A WHERE `name` in ( SELECT a.name FROM( SELECT name FROM A a GROUP BY name HAVING CO ...

  8. Android ble蓝牙问题

    (1)蓝牙回调安卓4.4的蓝牙回调是在异步线程中(不在主线程),若要在蓝牙回调中执行更新界面的操作,记得切换到主线程去操作 (2)三星手机兼容性问题connectGatt()方法在某些三星手机上只能在 ...

  9. Laravel使用心得

    Laravel使用心得 1.session使用 laravel的session使用时,不要使用exit和die,否则session会为空. 2.ajax提交注意框架对post的CSRF保护 在头加上& ...

  10. maven deploy Return code is: 400, ReasonPhrase: Bad Request.

    最近在自己本地deploy jar 到本地 nexus的时候,报错 Return code is: 400, ReasonPhrase: Bad Request. 解决思路: 1.查看maven pr ...