查询v$lock缓慢和direct path write temp等待

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

  COUNT(*)
----------
       163

Elapsed: 00:00:60.90

Execution 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(*)
----------
       190

Elapsed: 00:00:00.18

Execution 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

    GATHER_FIXED_OBJECTS_STATS   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


本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1277089


相关文章
|
存储 Android开发
解决了一个大家都有可能遇到的奇葩权限问题
解决了一个大家都有可能遇到的奇葩权限问题
解决了一个大家都有可能遇到的奇葩权限问题
|
存储
【C盘瘦身】如何清理Wechat Files,经常使用电脑微信用户必知的常识!
【C盘瘦身】如何清理Wechat Files,经常使用电脑微信用户必知的常识!
3638 0
【C盘瘦身】如何清理Wechat Files,经常使用电脑微信用户必知的常识!
|
SQL 存储 分布式计算
Spark Doris Connector设计方案
Spark Doris Connector 是Doris在0.12版本中推出的新功能。用户可以使用该功能,直接通过Spark对Doris中存储的数据进行读写,支持SQL、Dataframe、RDD等方式。从Doris角度看,将其数据引入Spark,可以使用Spark一系列丰富的生态产品,拓宽了产品的想象力,也使得Doris和其他数据源的联合查询成为可能。
1270 0
Spark Doris Connector设计方案
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
11月前
|
人工智能 搜索推荐 算法
当AI代做PPT时,教师如何完成自我迭代?——从生成式人工智能(GAI)认证看教育者的未来突围
本文探讨了AI在教育领域的广泛应用及其对教师角色的挑战,强调知识观与教育观的转变。生成式人工智能(GAI)认证为教师提供了提升AI应用能力、促进教育创新的机会。文章建议教师通过转变观念、加强情感交流及参与创新实践完成自我迭代,并呼吁政府、学校和社会共同支持AI时代教育的发展,以培养适应未来的高素质人才。
|
数据采集 前端开发 搜索推荐
|
人工智能 JavaScript 前端开发
一段 JavaScript 代码,集成网站AI语音助手
根据本教程,只需通过白屏化的界面操作,即可快速构建一个专属的AI智能体。
|
存储 NoSQL Redis
Redis之 redis.conf配置文件
Redis之 redis.conf配置文件
3106 0
|
Linux 应用服务中间件 nginx
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。

热门文章

最新文章