[20180730]exadata与行链接.txt
[20180730]exadata与行链接.txt
--//最近一段时间在看<expert oracle exadata>,智能扫描的三大优化方法是:字段投影,谓词过滤,存储索引.大多数智能扫描
--//优化方法的主要目标就是在执行扫描时减少需要传输回数据块服务端的数据量.
--//而智能扫描的先决条件,满足三个基本条件:
--//1.必须要是对象上的全扫描.
--//2.扫描必须要使用oracle直接路径读取机制.
--//3.对象必须存储在exadata存储中.
--//有几种情况转换为块传输模式:
--//1.一致性读取,
--//2,行链接(注意:不是行迁移)
--//3.存储服务器CPU太忙.
--//正好生产系统有1张大表存在大量行链接.自己测试看看.
1.环境:
xxxx> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
2.测试:
xxxx> select bytes/1024/1024/1024 GB ,BLOCKS from dba_segments where owner='XXXX_YYY' and segment_name='BIG_TAB';
GB BLOCKS
---------- ----------
207.549805 27203968
--//表占用207G.
xxxx> set timing on
xxxx> @ &r/viewsess 'table fetch continued row'
NAME STATISTIC# VALUE SID
-------------------------- ---------- ---------- ----------
table fetch continued row 417 0 2323
Elapsed: 00:00:00.00
xxxx> select /*+ full(a) */ count(*) from xxxxxx_yyy.big_tab a;
COUNT(*)
----------
44669678
Elapsed: 00:01:38.73
xxxx> @ &r/viewsess 'table fetch continued row'
NAME STATISTIC# VALUE SID
------------------------- ---------- ---------- ----------
table fetch continued row 417 0 2323
Elapsed: 00:00:00.01
--//需要大约98秒完成查询.table fetch continued row的记数没有变化.
xxxx> @ &r/desc xxxxxx_yyy.big_tab;
Name Null? Type
------------- -------- ----------------------------
YZBXH NOT NULL NUMBER(18)
BRID NOT NULL NUMBER(18)
ZYH NOT NULL NUMBER(18)
YEPB NOT NULL NUMBER(1)
BRKS NOT NULL NUMBER(4)
BRBQ NUMBER(4)
BRCH VARCHAR2(20)
YDYZLB NOT NULL NUMBER(4)
XMLB NOT NULL NUMBER(8)
...
CAKEY VARCHAR2(2000)
YZCA VARCHAR2(3000)
TZ_CAKEY VARCHAR2(2000)
TZCA VARCHAR2(3000)
HSCAKEY VARCHAR2(2000)
HSCA VARCHAR2(3000)
TZ_HSCAKEY VARCHAR2(2000)
TZ_HSCA VARCHAR2(3000)
DYSJ DATE
YZZXSJ VARCHAR2(80)
ZXTZSJ DATE
ZYDY NUMBER(1)
FZLJ NUMBER(8)
BRZH NUMBER(8)
TZBRZH NUMBER(8)
TJSJ DATE
TQMXBZ NUMBER(1)
--//顺便找靠前的可以为NULL的字段BRBQ. 注意看那些XXkey的字段,正是这些字段导致了大量的行链接与行迁移.
xxxx> select sysdate from dual;
SYSDATE
-------------------
2018-07-30 08:49:54
Elapsed: 00:00:00.01
xxxx> select /*+ full(a) */ count(BRBQ) from xxxxxx_yyy.big_tab a;
select /*+ full(a) */ count(BRBQ) from xxxxxx_yyy.big_tab a
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
Elapsed: 00:03:09.84
xxxx> select sysdate from dual;
SYSDATE
-------------------
2018-07-30 08:53:37
Elapsed: 00:00:00.00
xxxx> @ &r/viewsess 'table fetch continued row'
NAME STATISTIC# VALUE SID
------------------------- ---------- ---------- ----------
table fetch continued row 417 53476 2323
Elapsed: 00:00:00.00
--//时间太长仅仅测试不到4分钟,放弃!!(注上个星期测试4个小时也没有出来报ora-01555错误,当时选择靠后的字段).说明可以大量的行
--//链接导致无法充分发挥exadata智能扫描的优势,转为块传输模式.
--//如果在服务器上观察可以发现:
# perf top -k /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
PerfTop: 5431 irqs/sec kernel:51.3% exact: 0.0% [1000Hz cycles], (all, 24 CPUs)
----------------------------------------------------------------------------------------------------------
samples pcnt function DSO
_______ _____ _______________________ _______________________________________________________
1125.00 5.3% kafger /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
763.00 3.6% qertbFetchByRowID /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
~~~~~~~~~~~~~~~~
740.00 3.5% kafgex1 /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
740.00 3.5% kcbgtcr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
607.00 2.8% kdifxs1 /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
477.00 2.2% qerixtFetch /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
451.00 2.1% expepr /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
386.00 1.8% kdsgrp /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle
--//出现许多qertbFetchByRowID函数调用.
3.顺便测试exadata的存储索引:
--//重新登录:
xxxx> @ &r/viewsess 'storage'
NAME STATISTIC# VALUE SID
---------------------------------------------------------------------- ---------- ---------- ----------
cell physical IO bytes saved by storage index 274 0 4821
xxxx> @ &r/viewsess 'table fetch continued row'
NAME STATISTIC# VALUE SID
---------------------------------------------------------------------- ---------- ---------- ----------
table fetch continued row 417 0 4821
xxxx> set timing on
xxxx> select /*+ full(a) */ count(*) from xxxxxx_yyy.big_tab a where ZXTZSJ between trunc(sysdate)-1 and trunc(sysdate)-1+1/86400;
COUNT(*)
----------
5
Elapsed: 00:47:05.16
--//仅仅取1秒的日期范围数据,竟然需要47分钟.
xxxx> @ &r/viewsess 'table fetch continued row'
NAME STATISTIC# VALUE SID
---------------------------------------------------------------------- ---------- ---------- ----------
table fetch continued row 417 3461046 4821
Elapsed: 00:00:00.00
xxxx> @ &r/viewsess 'storage'
NAME STATISTIC# VALUE SID
---------------------------------------------------------------------- ------------ ------------ ------------
cell physical IO bytes saved by storage index 274 15562743808 4821
--//15562743808/1024/1024/1024 = 14.49393463134765625
--//15562743808/1024/1024 = 14841.7890625
--//15562743808/8192 = 1899749块
--//竟然存储索引可以使用.我以为会失效.也许前面的部分数据是使用expdp导入的(我当时记忆5XG),可能发生行链接或者迁移的量很少.估计开始
--//实施也不规范,XXkey的字段都是NULL.我估计仅仅没有发生行迁移或者链接的存储单元1M的数据才有存储索引.(我的理解)
--//看看与cell相关的记数变化情况:
xxxx> @ &r/viewsess 'cell'
NAME STATISTIC# VALUE SID
---------------------------------------------------------------------- ------------ ------------ ------------
cell writes to flash cache 58 0 4821
cell overwrites in flash cache 59 0 4821
cell partial writes in flash cache 60 0 4821
cell physical IO interconnect bytes 64 33219425400 4821
cell physical IO bytes saved during optimized file creation 271 0 4821
cell physical IO bytes saved during optimized RMAN file restore 272 0 4821
cell physical IO bytes eligible for predicate offload 273 222633656320 4821
cell physical IO bytes saved by storage index 274 15562743808 4821
cell physical IO bytes sent directly to DB node to balance CPU 275 0 4821
cell smart IO session cache lookups 276 0 4821
cell smart IO session cache hits 277 0 4821
cell smart IO session cache soft misses 278 0 4821
cell smart IO session cache hard misses 279 0 4821
cell smart IO session cache hwm 280 0 4821
cell num smart IO sessions in rdbms block IO due to user 281 0 4821
cell num smart IO sessions in rdbms block IO due to open fail 282 0 4821
cell num smart IO sessions in rdbms block IO due to no cell mem 283 0 4821
cell num smart IO sessions in rdbms block IO due to big payload 284 0 4821
cell num smart IO sessions using passthru mode due to user 285 0 4821
cell num smart IO sessions using passthru mode due to cellsrv 286 0 4821
cell num smart IO sessions using passthru mode due to timezone 287 0 4821
cell num smart file creation sessions using rdbms block IO mode 288 0 4821
cell num block IOs due to a file instant restore in progress 289 0 4821
cell physical IO interconnect bytes returned by smart scan 290 6552450168 4821
cell num bytes in passthru during predicate offload 291 0 4821
cell num bytes in block IO during predicate offload 292 0 4821
cell num fast response sessions 293 0 4821
cell num fast response sessions continuing to smart scan 294 0 4821
cell num smartio automem buffer allocation attempts 295 1 4821
cell num smartio automem buffer allocation failures 296 0 4821
cell statistics spare1 297 0 4821
cell statistics spare2 298 0 4821
cell statistics spare3 299 0 4821
cell statistics spare4 300 0 4821
cell statistics spare5 301 0 4821
cell statistics spare6 302 0 4821
cell scans 421 1 4821
cell blocks processed by cache layer 422 25661755 4821
cell blocks processed by txn layer 423 25661095 4821
cell blocks processed by data layer 424 25282464 4821
cell blocks processed by index layer 425 0 4821
cell commit cache queries 426 0 4821
cell transactions found in commit cache 427 0 4821
cell blocks helped by commit cache 428 0 4821
cell blocks helped by minscn optimization 429 25647939 4821
chained rows skipped by cell 430 3467111 4821
chained rows processed by cell 431 1116529 4821
chained rows rejected by cell 432 3467111 4821
cell simulated physical IO bytes eligible for predicate offload 433 0 4821
cell simulated physical IO bytes returned by predicate offload 434 0 4821
cell CUs sent uncompressed 435 0 4821
cell CUs sent compressed 436 0 4821
cell CUs sent head piece 437 0 4821
cell CUs processed for uncompressed 438 0 4821
cell CUs processed for compressed 439 0 4821
cell IO uncompressed bytes 440 207119351808 4821
cell index scans 457 0 4821
cell flash cache read hits 646 3138149 4821
58 rows selected.
--//对于许多记数不是很熟悉,仅仅做一个记录.
--//附上viewsess.sql脚本:
set verify off
column name format a70
SELECT b.NAME, a.statistic#, a.VALUE,a.sid
FROM v$mystat a, v$statname b
WHERE lower(b.NAME) like lower('%&1%') AND a.statistic# = b.statistic# ;
--and a.value>0;
[20180730]exadata与行链接.txt的更多相关文章
- Oracle 行迁移和行链接
一.行迁移 1.1.行迁移概念 当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能在容纳在当前块,我们需要进行行迁移.一个行迁移意味着整行数据将会移动,仅仅保留的是一个转移地址.因此整 ...
- 参数化时按行读取txt文件,如何去掉换行符"\n"
参数化按行读取txt,每行默认自带了回车换行操作,导致脚本报错,故而按行读取时,需要去掉默认的'\n' #coding=utf-8 from selenium import webdriver imp ...
- 模拟Oracle行迁移和行链接
行链接消除方法创建大的block块------------------ 参考tom kyte的例子----------------------------------------------创建4k ...
- java指定编码的按行读写txt文件(几种读写方式的比较)
转: java指定编码的按行读写txt文件(几种读写方式的比较) 2018年10月16日 20:40:02 Handoking 阅读数:976 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- [20191010]bash行计算器.txt
[20191010]bash行计算器.txt --//写一个bash行计算器,为了避免冲突,函数命名为2个=,1个=感觉不是很好(心里上^_^).--//使用bc计算器,里面函数不能使用圆括号,使用中 ...
- C语言:按行读TXT文件
//搂行读取TXT #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_L ...
- Python中将变量按行写入txt文本中
案例一: 讲数组a 循环写入名称为2.txt的文档中 # -*-coding:utf8-*- import requests from lxml import etree a=[1,2,3,4,5,6 ...
- 按行读取TXT文件中的内容
public Dictionary<int, string> GetDicFromLog() { try { StreamReader sr = new StreamReader(file ...
- java按行读取txt并按行写入
IO流想必大家都很熟悉了,本次实现的需求是按行读取文件内容并且按行写入,代码如下: try { String encoding="utf-8"; //设定自己需要的字符编码集 Fi ...
随机推荐
- [视频]K8软件破解脱壳入门教程
[视频]K8软件破解脱壳入门教程 链接:https://pan.baidu.com/s/1aV9485MmtRedU6pzyr--Vw 提取码:vbak C:\Users\K8team\Desktop ...
- VS Code:让你工作效率翻倍的23个插件和23个编辑技巧
VS Code:让你工作效率翻倍的23个插件和23个编辑技巧 总结了一些平时常用且好用的 VS Code 的插件和编辑技巧分享出来. 文章详情可查阅我的博客:lishaoy.net ,欢迎大家访问. ...
- OSI七层模型和tcp/ip四层模型对比
OSI 与TCP/IP 模型对比 OSI 协议层名称 TCP/IP 协议层名称 封装的单元 功能描述 TCP/IP协议 应用层(Application) 应用层(Application) 数据 应用程 ...
- 21天打造分布式爬虫-requests库(二)
2.1.get请求 简单使用 import requests response = requests.get("https://www.baidu.com/") #text返回的是 ...
- 在Kubernetes中部署GlusterFS+Heketi
目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...
- python3中的range函数返回的是列表吗?
注意,这里说的Python3里面的range函数,和Python2是不同的,返回的不是列表,是可迭代对象. 在python3中,如果执行下面的语句 print(range(10)) 得到结果是 ran ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十):服务熔断(Hystrix、Turbine)
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 雪崩效应 在微服务架构中,由于服务众多,通常会涉及多个服务层级的调用,而一旦基 ...
- AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署
AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署 Amazon ElastiCache 连接至 Redis 节点 通过 AWS Command Line Inter ...
- window7环境下ZooKeeper的安装运行及监控查看
原文:http://www.cnblogs.com/RainAndWind/p/4668427.html ZooKeeper是一个分布式开源框架,供了协调分布式应用的基本服务.这些天在使用DUBBO, ...
- java高级工程师开放面试题集<二>
临近年关,不少人蠢蠢欲动,有童鞋问我java后端面试会面试什么? 作为一个java后端老鸟,跌打滚爬多次被面试和面试别人,总结了一些经验,希望对大家有所帮助. 特别说明,仅仅针对工作两年以上的java ...