当前位置: 首页 > news >正文

[20150904]exp slow.txt

[20150904]exp slow.txt

--昨天看一个贴子,链接如下:
http://www.itpub.net/thread-1936560-1-1.html

--发现几个问题:
1.第1个问题:

delete from RecycleBin$ where bo=:1;
delete from RecycleBin$ where purgeobj=:1;

--都是全表扫描,如果你对象太多,一定很慢.

2.第2个问题:
可以看到exp会执行如下语句:
SELECT SCHEMAOID FROM SYS.EXU9XMLST WHERE TOBJID = :1

--仔细查看awr的sql部分:
SQL ordered by Gets

Buffer Gets  Executions Gets per Exec   %Total Elapsed Time (s)  %CPU  %IO    SQL Id        SQL Module  SQL Text
188,385,092  211        892,820.34      19.71        10,324.37  66.84  29.40  81xv812rrxj0m exp.exe     SELECT SCHEMAOID FROM SYS.EXU9...

Gets per Exec=892,820.34 , 每次的逻辑读也太高了.

我在我的测试环境上测试看看:


SCOTT@test> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SCOTT@test> alter session set statistics_level=all;
Session altered.

SCOTT@test> variable x number ;
SCOTT@test> exec :x := 56060;

PL/SQL procedure successfully completed.

SCOTT@test> SELECT SCHEMAOID FROM SYS.EXU9XMLST WHERE TOBJID = :x;
SCHEMAOID
--------------------------------
6C3FCF2D9D354DC1E03408002087A0B7

SCOTT@test> @dpcz ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  3vwz8ctc13xrr, child number 0
-------------------------------------
SELECT SCHEMAOID FROM SYS.EXU9XMLST WHERE TOBJID = :x
Plan hash value: 918491496
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name     | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |          |      1 |        |       |   439 (100)|          |      1 |00:00:00.01 |    1654 |       |       |          |
|*  1 |  FILTER                              |          |      1 |        |       |            |          |      1 |00:00:00.01 |    1654 |       |       |          |
|   2 |   MERGE JOIN CARTESIAN               |          |      1 |     25 |   525 |   439   (1)| 00:00:01 |     43 |00:00:00.01 |    1612 |       |       |          |
|*  3 |    INDEX RANGE SCAN                  | I_OBJ1   |      1 |      1 |     5 |     2   (0)| 00:00:01 |      1 |00:00:00.01 |       3 |       |       |          |
|   4 |    BUFFER SORT                       |          |      1 |     25 |   400 |   437   (1)| 00:00:01 |     43 |00:00:00.01 |    1609 |  4096 |  4096 | 4096  (0)|
|*  5 |     TABLE ACCESS FULL                | OPQTYPE$ |      1 |     25 |   400 |   437   (1)| 00:00:01 |     43 |00:00:00.01 |    1609 |       |       |          |
|*  6 |   FILTER                             |          |     42 |        |       |            |          |      0 |00:00:00.01 |      42 |       |       |          |
|*  7 |    CONNECT BY WITH FILTERING (UNIQUE)|          |     42 |        |       |            |          |      0 |00:00:00.01 |      42 |  1024 |  1024 |          |
|   8 |     TABLE ACCESS BY INDEX ROWID      | NTAB$    |     42 |      2 |    16 |     2   (0)| 00:00:01 |      0 |00:00:00.01 |      42 |       |       |          |
|*  9 |      INDEX RANGE SCAN                | I_NTAB1  |     42 |      2 |       |     1   (0)| 00:00:01 |      0 |00:00:00.01 |      42 |       |       |          |
|  10 |     NESTED LOOPS                     |          |      0 |      4 |    84 |     4   (0)| 00:00:01 |      0 |00:00:00.01 |       0 |       |       |          |
|  11 |      CONNECT BY PUMP                 |          |      0 |        |       |            |          |      0 |00:00:00.01 |       0 |       |       |          |
|  12 |      TABLE ACCESS CLUSTER            | NTAB$    |      0 |      2 |    16 |     1   (0)| 00:00:01 |      0 |00:00:00.01 |       0 |       |       |          |
|* 13 |       INDEX UNIQUE SCAN              | I_OBJ#   |      0 |      1 |       |     0   (0)|          |      0 |00:00:00.01 |       0 |       |       |          |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$F5BB74E1
   3 - SEL$F5BB74E1 / O@SEL$2
   5 - SEL$F5BB74E1 / OPQ@SEL$2
   6 - SEL$0EEC8FC1
   8 - SEL$6        / NT@SEL$6
   9 - SEL$6        / NT@SEL$6
  10 - SEL$5
  12 - SEL$5        / NT@SEL$5
  13 - SEL$5        / NT@SEL$5
Peeked Binds (identified by position):
--------------------------------------
   1 - (NUMBER): 56060
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter(("O"."OBJ#"="OPQ"."OBJ#" OR  IS NOT NULL))
   3 - access("O"."OBJ#"=:X)
   5 - filter(("OPQ"."TYPE"=1 AND BITAND("OPQ"."FLAGS",2)=2))
   6 - filter("NT"."NTAB#"=:B1)
   7 - access("NT"."OBJ#"=PRIOR NULL)
   9 - access("NT"."OBJ#"=:B1)
  13 - access("connect$_by$_pump$_005"."PRIOR nt.ntab# "="NT"."OBJ#")

--要全表扫描OPQTYPE$!逻辑读1654。

SCOTT@test> select count(*) from sys.OPQTYPE$;
  COUNT(*)
----------
       193

--共193行,而执行计划查询过滤条件(("OPQ"."TYPE"=1 AND BITAND("OPQ"."FLAGS",2)=2))返回43行。

--但是看定义
CREATE TABLE SYS.OPQTYPE$
(
  OBJ#       NUMBER                             NOT NULL,
  INTCOL#    NUMBER                             NOT NULL,
  TYPE       NUMBER,
  FLAGS      NUMBER,
  LOBCOL     NUMBER,
  OBJCOL     NUMBER,
  EXTRACOL   NUMBER,
  SCHEMAOID  RAW(16),
  ELEMNUM    NUMBER,
  SCHEMAURL  VARCHAR2(4000 BYTE)
)
CLUSTER SYS.C_OBJ#(OBJ#);

--是一个cluster table。如果对象很多实际上占用空间会很大的。

SCOTT@test> select num_rows,blocks from dba_tables where owner='SYS' and table_name='OPQTYPE$';
  NUM_ROWS     BLOCKS
---------- ----------
       193       1605

--占用块达到了1605. 按照一些提示,建立索引:
create index OPQTYPE_IDX1 on OPQTYPE$(TYPE,BITAND (FLAGS, 2));

SYS@test> execute dbms_stats.gather_table_stats ('SYS', 'OPQTYPE$');
PL/SQL procedure successfully completed.

SCOTT@test> SELECT SCHEMAOID FROM SYS.EXU9XMLST WHERE TOBJID = :x;

SCHEMAOID
--------------------------------
6C3FCF2D9D354DC1E03408002087A0B7

SCOTT@test> @dpcz ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  3vwz8ctc13xrr, child number 0
-------------------------------------
SELECT SCHEMAOID FROM SYS.EXU9XMLST WHERE TOBJID = :x

Plan hash value: 3256635089

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name         | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |              |      1 |        |       |    41 (100)|          |      1 |00:00:00.01 |      69 |       |       |          |
|*  1 |  FILTER                              |              |      1 |        |       |            |          |      1 |00:00:00.01 |      69 |       |       |          |
|   2 |   MERGE JOIN CARTESIAN               |              |      1 |     57 |  1197 |    41   (0)| 00:00:01 |     43 |00:00:00.01 |      27 |       |       |          |
|*  3 |    INDEX RANGE SCAN                  | I_OBJ1       |      1 |      1 |     5 |     2   (0)| 00:00:01 |      1 |00:00:00.01 |       3 |       |       |          |
|   4 |    BUFFER SORT                       |              |      1 |     57 |   912 |    39   (0)| 00:00:01 |     43 |00:00:00.01 |      24 |  4096 |  4096 | 4096  (0)|
|   5 |     TABLE ACCESS BY INDEX ROWID      | OPQTYPE$     |      1 |     57 |   912 |    39   (0)| 00:00:01 |     43 |00:00:00.01 |      24 |       |       |          |
|*  6 |      INDEX RANGE SCAN                | OPQTYPE_IDX1 |      1 |     57 |       |     0   (0)|          |     43 |00:00:00.01 |       1 |       |       |          |
|*  7 |   FILTER                             |              |     42 |        |       |            |          |      0 |00:00:00.01 |      42 |       |       |          |
|*  8 |    CONNECT BY WITH FILTERING (UNIQUE)|              |     42 |        |       |            |          |      0 |00:00:00.01 |      42 |  1024 |  1024 |          |
|   9 |     TABLE ACCESS BY INDEX ROWID      | NTAB$        |     42 |      2 |    16 |     2   (0)| 00:00:01 |      0 |00:00:00.01 |      42 |       |       |          |
|* 10 |      INDEX RANGE SCAN                | I_NTAB1      |     42 |      2 |       |     1   (0)| 00:00:01 |      0 |00:00:00.01 |      42 |       |       |          |
|  11 |     NESTED LOOPS                     |              |      0 |      4 |    84 |     4   (0)| 00:00:01 |      0 |00:00:00.01 |       0 |       |       |          |
|  12 |      CONNECT BY PUMP                 |              |      0 |        |       |            |          |      0 |00:00:00.01 |       0 |       |       |          |
|  13 |      TABLE ACCESS CLUSTER            | NTAB$        |      0 |      2 |    16 |     1   (0)| 00:00:01 |      0 |00:00:00.01 |       0 |       |       |          |
|* 14 |       INDEX UNIQUE SCAN              | I_OBJ#       |      0 |      1 |       |     0   (0)|          |      0 |00:00:00.01 |       0 |       |       |          |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$F5BB74E1
   3 - SEL$F5BB74E1 / O@SEL$2
   5 - SEL$F5BB74E1 / OPQ@SEL$2
   6 - SEL$F5BB74E1 / OPQ@SEL$2
   7 - SEL$0EEC8FC1
   9 - SEL$6        / NT@SEL$6
  10 - SEL$6        / NT@SEL$6
  11 - SEL$5
  13 - SEL$5        / NT@SEL$5
  14 - SEL$5        / NT@SEL$5
Peeked Binds (identified by position):
--------------------------------------
   1 - (NUMBER): 56060
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter(("O"."OBJ#"="OPQ"."OBJ#" OR  IS NOT NULL))
   3 - access("O"."OBJ#"=:X)
   6 - access("OPQ"."TYPE"=1 AND "OPQ"."SYS_NC00011$"=2)
   7 - filter("NT"."NTAB#"=:B1)
   8 - access("NT"."OBJ#"=PRIOR NULL)
  10 - access("NT"."OBJ#"=:B1)
  14 - access("connect$_by$_pump$_005"."PRIOR nt.ntab# "="NT"."OBJ#")

--逻辑读降为69.不过对方的逻辑读Gets per Exec=892,820.34 ,一定与我的不同。

SYS@test> drop  index sys.OPQTYPE_IDX1 ;
Index dropped.

--如果exp很慢,可以考虑建立这个索引,不过现在使用exp越来越少了。

相关文章:

  • 数字填空
  • c/c++ 软件集成 安装和可卸载软件
  • 【云分析】《“支持和运维服务”仍然困扰着企业云的应用》
  • 前端工程师技能之photoshop巧用系列第四篇——图片格式
  • serialVersionUID的作用
  • 判断客户端类型,Android,iOS,PC
  • 2015年最新数据库流行排行榜
  • android 调用jni 的简单步骤
  • 做图表统计你需要掌握SQL Server 行转列和列转行
  • Centos7安装Xmind
  • svn的终端使用
  • [KMP求最小循环节][HDU1358][Period]
  • Ajax与json在前后端中的细节解惑
  • SQL Server相关书籍
  • 华为第七届无线编码大赛总结(转)
  • [nginx文档翻译系列] 控制nginx
  • ECMAScript入门(七)--Module语法
  • iOS | NSProxy
  • Javascript 原型链
  • JavaWeb(学习笔记二)
  • java小心机(3)| 浅析finalize()
  • Median of Two Sorted Arrays
  • MySQL数据库运维之数据恢复
  • python学习笔记-类对象的信息
  • Redux系列x:源码分析
  • Theano - 导数
  • Vue.js源码(2):初探List Rendering
  • 测试开发系类之接口自动化测试
  • 基于Android乐音识别(2)
  • 警报:线上事故之CountDownLatch的威力
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 智能合约开发环境搭建及Hello World合约
  • nb
  • 数据库巡检项
  • ​Linux·i2c驱动架构​
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #vue3 实现前端下载excel文件模板功能
  • %@ page import=%的用法
  • (1)(1.13) SiK无线电高级配置(五)
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (floyd+补集) poj 3275
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (数据结构)顺序表的定义
  • (五)IO流之ByteArrayInput/OutputStream
  • (一) springboot详细介绍
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)visual stdio 书签功能介绍
  • ./configure,make,make install的作用(转)
  • .net core 6 集成和使用 mongodb
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net 中viewstate的原理和使用
  • .Net中的设计模式——Factory Method模式
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法