v$lock是常用的enqueue lock队列锁动态性能视图,不管是用户自己部署的监控脚本也好、还是enterprise manager都多少会使用到该V$LOCK视图, 但是在10g中遇到了v$lock查询缓慢的问题, 例如下面的查询会等待较多direct path write temp等待事件:

select count(*) from v$lock;COUNT(*)
----------163Elapsed: 00:00:60.90Execution Plan
----------------------------------------------------------
Plan hash value: 2384831130--------------------------------------------------------------------------------------
| Id  | Operation               | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT        |            |     1 |    50 |     1 (100)| 00:00:01 |
|   1 |  SORT AGGREGATE         |            |     1 |    50 |            |          |
|*  2 |   HASH JOIN             |            |     1 |    50 |     1 (100)| 00:00:01 |
|   3 |    MERGE JOIN CARTESIAN |            |   100 |  3800 |     0   (0)| 00:00:01 |
|*  4 |     FIXED TABLE FULL    | X$KSUSE    |     1 |    19 |     0   (0)| 00:00:01 |
|   5 |     BUFFER SORT         |            |   100 |  1900 |     0   (0)| 00:00:01 |
|   6 |      FIXED TABLE FULL   | X$KSQRS    |   100 |  1900 |     0   (0)| 00:00:01 |
|   7 |    VIEW                 | GV$_LOCK   |    10 |   120 |     0   (0)| 00:00:01 |
|   8 |     UNION-ALL           |            |       |       |            |          |
|*  9 |      FILTER             |            |       |       |            |          |
|  10 |       VIEW              | GV$_LOCK1  |     2 |    24 |     0   (0)| 00:00:01 |
|  11 |        UNION-ALL        |            |       |       |            |          |
|* 12 |         FIXED TABLE FULL| X$KDNSSF   |     1 |    64 |     0   (0)| 00:00:01 |
|* 13 |         FIXED TABLE FULL| X$KSQEQ    |     1 |    64 |     0   (0)| 00:00:01 |
|* 14 |      FIXED TABLE FULL   | X$KTADM    |     1 |    64 |     0   (0)| 00:00:01 |
|* 15 |      FIXED TABLE FULL   | X$KTATRFIL |     1 |    64 |     0   (0)| 00:00:01 |
|* 16 |      FIXED TABLE FULL   | X$KTATRFSL |     1 |    64 |     0   (0)| 00:00:01 |
|* 17 |      FIXED TABLE FULL   | X$KTATL    |     1 |    64 |     0   (0)| 00:00:01 |
|* 18 |      FIXED TABLE FULL   | X$KTSTUSC  |     1 |    64 |     0   (0)| 00:00:01 |
|* 19 |      FIXED TABLE FULL   | X$KTSTUSS  |     1 |    64 |     0   (0)| 00:00:01 |
|* 20 |      FIXED TABLE FULL   | X$KTSTUSG  |     1 |    64 |     0   (0)| 00:00:01 |
|* 21 |      FIXED TABLE FULL   | X$KTCXB    |     1 |    64 |     0   (0)| 00:00:01 |
--------------------------------------------------------------------------------------direct path write temp
direct path write temp
direct path write temp
................

显然仅返回100多条记录的v$LOCK视图的查询不该这么慢,也不该由SORT或HASH造成大量的临时空间使用, 究其根本还是FIXED TABLE即X$的内部表上的统计信息不准确导致的执行计划使用,通过使用RULE HINT可以马上获得较好的性能:

select /*+ RULE */ count(*) from v$LOCK;COUNT(*)
----------190Elapsed: 00:00:00.18Execution Plan
----------------------------------------------------------
Plan hash value: 2026431807-------------------------------------------------
| Id  | Operation                  | Name       |
-------------------------------------------------
|   0 | SELECT STATEMENT           |            |
|   1 |  SORT AGGREGATE            |            |
|   2 |   MERGE JOIN               |            |
|   3 |    SORT JOIN               |            |
|   4 |     MERGE JOIN             |            |
|   5 |      SORT JOIN             |            |
|   6 |       FIXED TABLE FULL     | X$KSQRS    |
|*  7 |      SORT JOIN             |            |
|   8 |       VIEW                 | GV$_LOCK   |
|   9 |        UNION-ALL           |            |
|* 10 |         FILTER             |            |
|  11 |          VIEW              | GV$_LOCK1  |
|  12 |           UNION-ALL        |            |
|* 13 |            FIXED TABLE FULL| X$KDNSSF   |
|* 14 |            FIXED TABLE FULL| X$KSQEQ    |
|* 15 |         FIXED TABLE FULL   | X$KTADM    |
|* 16 |         FIXED TABLE FULL   | X$KTATRFIL |
|* 17 |         FIXED TABLE FULL   | X$KTATRFSL |
|* 18 |         FIXED TABLE FULL   | X$KTATL    |
|* 19 |         FIXED TABLE FULL   | X$KTSTUSC  |
|* 20 |         FIXED TABLE FULL   | X$KTSTUSS  |
|* 21 |         FIXED TABLE FULL   | X$KTSTUSG  |
|* 22 |         FIXED TABLE FULL   | X$KTCXB    |
|* 23 |    SORT JOIN               |            |
|* 24 |     FIXED TABLE FULL       | X$KSUSE    |
-------------------------------------------------

针对上述问题考虑为FIXED TABLE收集统计信息,可以使用DBMS_STATS.GATHER_FIXED_OBJECTS_STATS标准存储过程,特别是对于版本升级上来的数据库,特别需要考虑执行该存储过程更新FIXED TABLE STATISTICS:

SQL> set timing on;
SQL> exec DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;PL/SQL procedure successfully completed.Elapsed: 00:01:24.87

  Create fixed table statistics Directly after catupgrd.sql has been completed This will speed up processing for recompilation with utlrp.sql Create fixed table statistics again after a week with regular production workload This task should be done only a few times per year

转载于:https://blog.51cto.com/maclean/1277089

查询v$lock缓慢和direct path write temp等待相关推荐

  1. ORACLE 索引并行引起的direct path read temp和latch free等待导致进程数超过最大数

    2016年10月27日下午,测试同事说测试数据库连接不上了,让我们DBA查看问题并解决一下.    操作系统:Red Hat Enterprise Linux Server release 6.6 ( ...

  2. oracle direct path read temp,direct path read/read temp等待事件

    当会话从磁盘直接读取数据块到PGA(绕过SGA)时,发生direct path read/read temp等待事件 ,下图简要描述了这种方式的读取方式: 如果I/O子系统不支持异步I/Os,那么每个 ...

  3. oracle direct path read temp,Oracle中的direct path read事件(转)

    在11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是物理读了. 在10g中,都是通过gc buffer来读的,所以不存在direct pa ...

  4. 深入解析direct path read

     传统读取数据的方式是服务器进程通过读取磁盘,然后把数据加载到共享内存中,这样后面的进程就可以通过共享内存访问这些数据,不用再通过缓慢的磁盘读取来 完成.direct path read读取数据块 ...

  5. 一次direct path read 故障处理

    说明: 产生direct path read事件的原因有三种情况: Causes This situation occurs in the following situations: The sort ...

  6. ORACLE等待事件:direct path write

    2015年4月27日,晚上6点左右,电渠3g2库ORACLE RAC系统节点1出现大量的direct path write等待事件,导致大量的会话堆积,节点1几乎无法使用,应用受到影响,相关处理流程如 ...

  7. Oracle 11g新特性direct path read引发的系统停运故障诊断处理

    Oracle 11g新特性direct path read引发的系统停运故障诊断处理 黎俊杰 | 2016-07-28 14:37 声明:部分表名为了脱敏而用XX代替 1.故障现象 (1)一个业务系统 ...

  8. oracle 11g禁用和强制direct path read

    一般在混合型环境中,大表在进行全表扫描或者走并行的时候一般会出现direct path read等待事件,如果在OLTP或者纯粹的DSS环境中,出现大量的direct path read直接路径读取, ...

  9. 生产环境 direct path read 与log file sync等待事件问题处理

    1. 2018-09-26 前7天awr报告(此期间 oracle 使用率为 4,022.34/6,179.76/24=2.71%) 由此看出最显著问题是 log file sync 等待事件,查看后 ...

最新文章

  1. 设置EditText光标颜色
  2. 皮一皮:感受下什么叫瑟瑟发抖的寒冬...
  3. boost::notify_all_at_thread_exit相关的测试程序
  4. jackson的简单实用实例(json)
  5. JavaMD5加密MD5Utils工具类
  6. 8个经典智能穿戴设备优选电路方案合辑
  7. 机器人拉格朗日动力学应用公式详解
  8. 一文看懂外汇风险准备金率调整为 20%的含义
  9. word文档 目录 导航窗格 整理
  10. python scratch unity_极客晨星:少儿编程热门语言,除了Scratch还有哪些
  11. 易语言多线程崩溃解决的原因
  12. php 银行卡归属,银行卡归属地查询
  13. aspen模拟蒸发器_用aspen计算多效蒸发器:高浓盐废水处理蒸发工艺简介
  14. 东湖高新区申报2023年融资租赁公司等类金融机构财政支持政策解读
  15. ISO27001-2013学习笔记
  16. 梅花点讯输入法关闭按键气泡提示注册表
  17. 各种品牌的主板和笔记本的BIOS快捷启动按键
  18. stm32f103之GP2Y1014AU
  19. 家庭学生版本offic安装mathtype7.4
  20. LikeLib:深耕链圈的公链技术标杆者

热门文章

  1. 转VS2010解决方案转换到VS2008
  2. Windows自动启动程序的十大藏身之所
  3. 配置Exchange 2007边缘同步
  4. KVM — 内存虚拟化
  5. 电容触摸屏GT911、GT928、GT9147的使用
  6. 12.5寸新i5商务本 联想X220i报10888元
  7. 前端Layui开发日常记录
  8. 如何给屏幕设置一个充满全屏的图片
  9. java反射field和method的顺序问题
  10. 自动化运维Python系列(六)之面向对象