[20190823]关于CPU成本计算3.txt

--//前几天探究CPU cost时遇到的问题,获取行成本时我的测试查询结果出现跳跃,不知道为什么,感觉有点奇怪,分析看看。
--//ITPUB原始链接已经不存在,我的日记本还有记录,现在想想当时的记录思路很乱,不过这些都是猜测的过程,以前思路混乱也是正常的。
--//顺便做一些必要补充唯一索引的相关CPU COST。

1.环境:
SCOTT@test01p> @ ver1
PORT_STRING          VERSION    BANNER                                                                       CON_ID
-------------------- ---------- ---------------------------------------------------------------------------- ------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production      0

2.测试:
SCOTT@test01p> create table t as select rownum a1 , rownum a2 ,rownum a3 from dual connect by level<=100 ;
Table created.

create unique index i_t_a1 on t(a1);
create unique index i_t_a2 on t(a2);
create unique index i_t_a3 on t(a3);
--//分析略.

column STATEMENT_ID format a10
column OPTIONS format a20
explain plan set statement_id='a1' for select a1 from t where a1=100;
explain plan set statement_id='a2' for select a2 from t where a2=100;
explain plan set statement_id='a3' for select a3 from t where a3=100;

SCOTT@test01p> select STATEMENT_ID,OPERATION, OPTIONS, COST, CPU_COST, IO_COST, TIME from plan_table where options='UNIQUE SCAN';
STATEMENT_ OPERATION OPTIONS     COST CPU_COST IO_COST TIME
---------- --------- ----------- ---- -------- ------- ----
a1         INDEX     UNIQUE SCAN    0     1050       0    1
a2         INDEX     UNIQUE SCAN    0     1050       0    1
a3         INDEX     UNIQUE SCAN    0     1050       0    1
--//通过唯一索引访问cpu cost=1050.这里面包含行成本150,比较50。
--//通过hack看看变化.

SCOTT@test01p> select BLEVEL,LEAF_BLOCKS from user_indexes where index_name = 'I_T_A3';
BLEVEL LEAF_BLOCKS
------ -----------
     0           1

SCOTT@test01p> exec dbms_stats.set_index_stats(ownname=> NULL,indname=>'I_T_A3',indlevel=> 1000);
PL/SQL procedure successfully completed.

SCOTT@test01p> select BLEVEL,LEAF_BLOCKS from user_indexes where index_name = 'I_T_A3';
    BLEVEL LEAF_BLOCKS
---------- -----------
       255           1

--//注意:我修改indlevel=> 1000,实际上最大仅仅255.也就是最大blevel=255.
--//注:我记忆blevel最大64.如果hack blevel最好不要超过6X.不然在11g下会直接导致使用该索引的sql语句挂起!!切记!!
SCOTT@test01p> exec dbms_stats.set_index_stats(ownname=> NULL,indname=>'I_T_A3',indlevel=> 1000);
PL/SQL procedure successfully completed.

SCOTT@test01p> alter system flush shared_pool;
System altered.

column STATEMENT_ID format a10
column OPTIONS format a20

SCOTT@test01p> explain plan set statement_id='x3' for select /*+ index(t) */ a3 from t where a3=100;
Explained.

SCOTT@test01p> select STATEMENT_ID,OPERATION, OPTIONS, COST, CPU_COST, IO_COST, TIME from plan_table where STATEMENT_ID='x3';
STATEMENT_ OPERATION            OPTIONS                    COST   CPU_COST    IO_COST       TIME
---------- -------------------- -------------------- ---------- ---------- ---------- ----------
x3         SELECT STATEMENT                                   2    1817017          2          1
x3         INDEX                UNIQUE SCAN                 255    1817017        255          1
--//访问索引根节点,叶子节点占255块.
7121.44*255 = 1815967.20
1817017- 1815967.20 = 1049.80

--//修改blevel=254看看.
SCOTT@test01p> exec dbms_stats.set_index_stats(ownname=> NULL,indname=>'I_T_A3',indlevel=> 1000);
PL/SQL procedure successfully completed.

SCOTT@test01p> alter system flush shared_pool;
System altered.

SCOTT@test01p> explain plan set statement_id='x3' for select /*+ index(t) */ a3 from t where a3=100;
Explained.

SCOTT@test01p> select STATEMENT_ID,OPERATION, OPTIONS, COST, CPU_COST, IO_COST, TIME from plan_table where STATEMENT_ID='x3';
STATEMENT_ OPERATION            OPTIONS                    COST   CPU_COST    IO_COST       TIME
---------- -------------------- -------------------- ---------- ---------- ---------- ----------
x3         SELECT STATEMENT                                   2    1809896          2          1
x3         INDEX                UNIQUE SCAN                 254    1809896        254          1
--//访问索引根节点,叶子节点占255块.
7121.44*254 = 1808845.76
1809896 - 1808845.76 = 1050.24
7121.44*254+1050 = 1809895.76
--//无法通过HACK blevel测试.估计就是1050.
--//这样扣除行成本150,比较成本50. UNIQUE SCAN block 成本在=850.

5.看看索引范围的情况呢?
--//重新分析表T!!

column STATEMENT_ID format a10
column OPTIONS format a10
explain plan set statement_id='x100' for select /*+ index(t) */ 1 from t where a3>=100;
explain plan set statement_id='x050' for select /*+ index(t) */ 1 from t where a3>=050;

SCOTT@test01p> select STATEMENT_ID,OPERATION, OPTIONS, COST, CPU_COST, IO_COST, TIME from plan_table ;
STATEMENT_ OPERATION            OPTIONS                    COST   CPU_COST    IO_COST       TIME
---------- -------------------- -------------------- ---------- ---------- ---------- ----------
x100       SELECT STATEMENT                                   1       7321          1          1
x100       INDEX                RANGE SCAN                    1       7321          1          1
x050       SELECT STATEMENT                                   1      17521          1          1
x050       INDEX                RANGE SCAN                    1      17521          1          1

--//看看STATEMENT_ID=050的情况.
SCOTT@test01p> select BLEVEL,LEAF_BLOCKS from user_indexes where index_name = 'I_T_A3';
BLEVEL LEAF_BLOCKS
------ -----------
     0           1
--//Blevel=0 , LEAF_BLOCKS=1
--//块1块 7121.44 行1行 150, 比较 1次 50
--//索引选择率 = (100-50)/99+1/100 = 0.51505050505050505050,也就是card=52.
--//访问块  0.5150*1 = .5150 = 1 ,块成本= 1*7121.44= 7121
--//(行成本+比较成本)*card = 200*52 = 10400
--//10400+7121.44 = 17521.44

--//仅仅大致确定UNIQUE SCAN 块成本是1050.

[20190823]关于CPU成本计算3.txt的更多相关文章

  1. [20190823]关于CPU成本计算2.txt

    [20190823]关于CPU成本计算2.txt --//前几天探究CPU cost时遇到的问题,获取行成本时我的测试查询结果出现跳跃,不知道为什么,感觉有点奇怪,分析看看.--//ITPUB原始链接 ...

  2. [20190821]关于CPU成本计算.txt

    [20190821]关于CPU成本计算.txt --//有人问链接http://blog.itpub.net/267265/viewspace-2653964/中CPU成本如何计算的,实际上一般在优化 ...

  3. Trusted Execution Technology (TXT) --- 基本原理篇

    版权声明:本文为博主原创文章,未经博主允许不得转载. http://www.cnblogs.com/tsec/p/8409600.html 1. Intel TXT 介绍 TXT是Trusted Ex ...

  4. shell脚本监控系统负载、CPU和内存使用情况

    hostname >>/home/vmuser/xunjian/xj.logdf -lh >>/home/vmuser/xunjian/xj.logtop -b -n 1 | ...

  5. Linux CPU Hotplug CPU热插拔

    http://blog.chinaunix.net/uid-15007890-id-106930.html   CPU hotplug Support in Linux(tm) Kernel Linu ...

  6. centos 查看脚本

    centos 查看脚本 #!/bin/bash date >>info.txt echo "本机centos版本为" >>info.txt cat /etc ...

  7. Oracle的优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

  8. Oracle优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

  9. Linux 性能搜集【linux_reports-cpu/memory/disks/network】

    为方便问题发生后,问题原因的分析排查,我们可以在服务器中事先部署如下脚本,方便故障发生后,问题原因的分析排查 脚本部署方法: 1.将脚本[linux_reports.sh]上传到服务器 2.登陆虚拟机 ...

随机推荐

  1. JavaScript 字符串是否包含某个字符串

    字符串方式 indexOf()   (推荐) var str = "123"; console.log(str.indexOf("3") != -1 ); // ...

  2. iOS sqlite ORM框架-LKDBHelper

    LKDBHelper 一个sqlite ORM(全自动操作数据库)框架. 线程安全.不再担心递归锁死的问题 安装要求 iOS 4.3+ 仅支持 ARC FMDB 添加到你的项目 如果你使用 Cocoa ...

  3. Android ndk 加载简单的gif 图像

    首先获取一个安卓权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> ...

  4. MySQL 事务提交 --不良好的事务习惯。

    MySQL 事务提交 --不良好的事务习惯 我们知道"事务"是数据库区别于文件系统的重要特性之一.MySQL的InnoDB引擎中的事务也完全符合ACID(原子性 一致性 隔离性 持 ...

  5. Python-1-Day

    C = float(input("Enter a degree in Celsius:"))F = (9/5) * C + 32print("{0} Celsius is ...

  6. Codeforces Round #606 (Div. 2)

    传送门 A. Happy Birthday, Polycarp! 签到. Code /* * Author: heyuhhh * Created Time: 2019/12/14 19:07:57 * ...

  7. R基础绘图

    本节内容 0:小知识 1:绘图系统散点图的特征 2:基础绘图函数 3:基础绘图参数 4:图形设备 5:案例操作5个图形 0:小知识 summary() ## 对数据框或者向量进行描述性数据 read. ...

  8. 扩展KMP笔记

    KMP能计算一个字符串的每个位置前最长公共前缀后缀 扩展KMP可以用来计算两个字符串间的最长公共前缀后缀的…… 不过为了计算这个需要绕些弯路 已知字符串$S$和$P$,$S$的长度为$n$,$P$的长 ...

  9. acwing 902. 最短编辑距离

    地址 https://www.acwing.com/problem/content/904/ 给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有: 删除–将字符串A中的某个字符删除. ...

  10. centos安装nginx并配置SSL证书

    安装nginx的命令 sudo yum install epel-release sudo yum install nginx 让nginx随系统启动而启动 sudo systemctl enable ...