[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的更多相关文章

  1. Oracle 行迁移和行链接

    一.行迁移 1.1.行迁移概念 当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能在容纳在当前块,我们需要进行行迁移.一个行迁移意味着整行数据将会移动,仅仅保留的是一个转移地址.因此整 ...

  2. 参数化时按行读取txt文件,如何去掉换行符"\n"

    参数化按行读取txt,每行默认自带了回车换行操作,导致脚本报错,故而按行读取时,需要去掉默认的'\n' #coding=utf-8 from selenium import webdriver imp ...

  3. 模拟Oracle行迁移和行链接

    行链接消除方法创建大的block块------------------ 参考tom kyte的例子----------------------------------------------创建4k ...

  4. java指定编码的按行读写txt文件(几种读写方式的比较)

    转: java指定编码的按行读写txt文件(几种读写方式的比较) 2018年10月16日 20:40:02 Handoking 阅读数:976  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  5. [20191010]bash行计算器.txt

    [20191010]bash行计算器.txt --//写一个bash行计算器,为了避免冲突,函数命名为2个=,1个=感觉不是很好(心里上^_^).--//使用bc计算器,里面函数不能使用圆括号,使用中 ...

  6. C语言:按行读TXT文件

    //搂行读取TXT #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_L ...

  7. Python中将变量按行写入txt文本中

    案例一: 讲数组a 循环写入名称为2.txt的文档中 # -*-coding:utf8-*- import requests from lxml import etree a=[1,2,3,4,5,6 ...

  8. 按行读取TXT文件中的内容

    public Dictionary<int, string> GetDicFromLog() { try { StreamReader sr = new StreamReader(file ...

  9. java按行读取txt并按行写入

    IO流想必大家都很熟悉了,本次实现的需求是按行读取文件内容并且按行写入,代码如下: try { String encoding="utf-8"; //设定自己需要的字符编码集 Fi ...

随机推荐

  1. 算法手记(2)Dijkstra双栈算术表达式求值算法

    这两天看到的内容是关于栈和队列,在栈的模块发现了Dijkstra双栈算术表达式求值算法,可以用来实现计算器类型的app. 编程语言系统一般都内置了对算术表达式的处理,但是他们是如何在内部实现的呢?为了 ...

  2. @pathvariable和@RequestParam的区别

    @PathVariable 获取的是请求路径url中的值: (http://xxx.xxx.com/get_10.html,侧重于请求的URL路径里面的{xx}变量 ) //获取url中某部分的值 @ ...

  3. FTP上传心得

    最近出了一个问题就是在本地上传FTP没有一点问题 可是部署到服务器上.上传的时候总是false.解决办法 ftp.enterLocalPassiveMode();boolean storeFile = ...

  4. 写好Java代码的30条经验总结

    成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中 ...

  5. Android_TextView使用Spanable

    TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能: 1.Bac ...

  6. 用C#学习数据结构之链表

    单链表的定义 链表是用一组任意的存储单元来存储线性表中的数据元素(这组存储单元可以是连续的,也可以是不连续的).那么,怎么表示两个数据元素逻辑上的相邻关系呢?即如何表示数据元素之间的线性关系呢?为此, ...

  7. Linux_CentOS-服务器搭建 <五> 补充

    O:文件的编码格式 1.文件转码问题 Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8. 那么先说,如何查看吧.这时候强大的vi说,I can do that.( ...

  8. GC频繁抖动的主要原因

    内存抖动 内存抖动是因为大量的对象被创建又在短时间内马上被释放,如循环中分配对象,很容易引起GC,特别是在较大的循环次数或者一个循环中分配较多的临时对象时. 瞬间产生大量的对象 瞬间产生大量的对象,即 ...

  9. ES启动报错最大进程数太少

    [--16T18::,][INFO ][o.e.b.BootstrapChecks ] [node-] bound or publishing to a non-loopback address, e ...

  10. JavaWeb学习 (三)————Tomcat服务器学习和使用(二)

    一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下: