[20190823]关于CPU成本计算3.txt
[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的更多相关文章
- [20190823]关于CPU成本计算2.txt
[20190823]关于CPU成本计算2.txt --//前几天探究CPU cost时遇到的问题,获取行成本时我的测试查询结果出现跳跃,不知道为什么,感觉有点奇怪,分析看看.--//ITPUB原始链接 ...
- [20190821]关于CPU成本计算.txt
[20190821]关于CPU成本计算.txt --//有人问链接http://blog.itpub.net/267265/viewspace-2653964/中CPU成本如何计算的,实际上一般在优化 ...
- Trusted Execution Technology (TXT) --- 基本原理篇
版权声明:本文为博主原创文章,未经博主允许不得转载. http://www.cnblogs.com/tsec/p/8409600.html 1. Intel TXT 介绍 TXT是Trusted Ex ...
- shell脚本监控系统负载、CPU和内存使用情况
hostname >>/home/vmuser/xunjian/xj.logdf -lh >>/home/vmuser/xunjian/xj.logtop -b -n 1 | ...
- Linux CPU Hotplug CPU热插拔
http://blog.chinaunix.net/uid-15007890-id-106930.html CPU hotplug Support in Linux(tm) Kernel Linu ...
- centos 查看脚本
centos 查看脚本 #!/bin/bash date >>info.txt echo "本机centos版本为" >>info.txt cat /etc ...
- Oracle的优化器介绍
Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...
- Oracle优化器介绍
Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...
- Linux 性能搜集【linux_reports-cpu/memory/disks/network】
为方便问题发生后,问题原因的分析排查,我们可以在服务器中事先部署如下脚本,方便故障发生后,问题原因的分析排查 脚本部署方法: 1.将脚本[linux_reports.sh]上传到服务器 2.登陆虚拟机 ...
随机推荐
- SSM框架之Mybatis(6)动态SQL
Mybatis(6)动态SQL 1.动态SQL 出现原因:有些时候业务逻辑复杂时,我们的 SQL 是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了 1.1.if标签 我们根据实体类的不 ...
- 松软科技web课堂:JavaScript 数组迭代方法
数组迭代方法对每个数组项进行操作,听着挺高深,其实,就是对数组对象一次性逐一进行一种操作的一种叫法.(文章来源:www.sysoft.net.cn,加v:15844800162深度交流) Array. ...
- FCC---Use the CSS Transform Property skewX to Skew an Element Along the X-Axis
The next function of the transform property is skewX(), which skews the selected element along its X ...
- 关于angularjs异步操作后台请求时,用$q.all排列先后顺序的问题
最近我在做angularjs程序时遇到了一个问题 1.页面有很多选择框,一个选择框里面有众多的选择项,和一个默认选定的项,像下面这样(很多选择框,不只一个): 2.众多的选项要从后台接口得到,默认项从 ...
- JS 简介
JS 简介 JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. avaScript 是脚本语言 J ...
- [20191101]通过zsh计算sql语句的sql_id.txt
[20191101]通过zsh计算sql语句的sql_id.txt 1.简单介绍以及测试使用zsh遇到的问题:--//前段时间写的,链接http://blog.itpub.net/267265/vie ...
- Django使用xadmin集成富文本编辑器Ueditor(方法二)
一.xadmin的安装与配置1.安装xadmin,其中第一种在python3中安装不成功,推荐第二种或者第三种 方式一:pip install xadmin 方式二:pip install git+g ...
- Linux —— 时间(tzselect、timedatactl命令,查看和修改时区,修改时区为东八区)【转】
转自:https://blog.csdn.net/weixin_42167759/article/details/90648225 一.设置linux修改时区首先查看当前时区 #date -R显示结果 ...
- vuex中module的命名空间概念
vuex中module的命名空间概念 默认情况下,模块内部的 action.mutation 和 getter 是注册在全局命名空间的. 弊端1:不同模块中有相同命名的mutations.action ...
- LG1840 Color the Axis 线段树
菜的人就要写简单题 为了练习手速来写这样一道 珂朵莉树 线段树简单题 没啥可说的,注意修改操作中要判一下 val=0 #include<bits/stdc++.h> using names ...