【Oracle】Exadata Smart Scan---Column Projection

The term Column Projection refers to Exadata‘s ability to limit the volume of data transferred between the storage tier and the database tier by only returning columns of interest (that is, those in the select list or

necessary for join operations on the database tier). If your query requests five columns from a 100-column table, Exadata can eliminate most of the data that would be returned to the database servers by non-Exadata storage. This feature is a much bigger deal than you might expect and it can have a very significant impact on response times. Here is an example:

字段投影是指在Exadata中通过只返回感兴趣的列(指那些在SELECT列表中或者必须参加数据库层JOIN操作的列)来限制在存储层和数据库层之间的数据传输。如果查询从拥有100列的表中请求5个字段的值,Exadata能够消除非Exadata存储原本会返回给数据库层的大部分数据。此功能所做的工作远超出你可能的预期,在响应时间上会带来非常巨大的影响。

下面是字段投影的一个例子:

首先在test用户下建立一张大表做测试表:

SQL> conn test/test

Connected.

SQL> @large_table.sql

Table created.

SQL> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options

[[email protected] ~]$ sqlldr userid=test/test direct=true rows=100000 control=large_table.ldr

SQL*Loader: Release 11.2.0.1.0 - Production on Fri Oct 10 20:18:25 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Save data point reached - logical record count 100000.

Save data point reached - logical record count 200000.

Save data point reached - logical record count 300000.

Save data point reached - logical record count 400000.

Save data point reached - logical record count 500000.

Save data point reached - logical record count 600000.

Save data point reached - logical record count 700000.

Save data point reached - logical record count 800000.

Save data point reached - logical record count 900000.

Save data point reached - logical record count 1000000.

Load completed - logical record count 1000000.

首先来看一下不启用Smart Scan的情况:

SQL> show parameter cell;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

cell_offload_compaction              string      ADAPTIVE

cell_offload_decryption              boolean     TRUE

cell_offload_parameters              string

cell_offload_plan_display            string      AUTO

cell_offload_processing              boolean     TRUE

cell_partition_large_extents         string      DEFAULT

SQL> ALTER session SET cell_offload_processing=FALSE;

Session altered.

SQL> show parameter cell;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

cell_offload_compaction              string      ADAPTIVE

cell_offload_decryption              boolean     TRUE

cell_offload_parameters              string

cell_offload_plan_display            string      AUTO

cell_offload_processing              boolean     FALSE

cell_partition_large_extents         string      DEFAULT

SQL> ALTER session SET "_serial_direct_read" = TRUE; 启用direct path read

Session altered.

SQL> set timing on

SQL> set autot trace

SQL> ALTER session SET cell_offload_processing=FALSE;

Session altered.

Elapsed: 00:00:00.00

SQL> SELECT id FROM large_table;

1000000 rows selected.

Elapsed: 00:00:11.64

Execution Plan

----------------------------------------------------------

Plan hash value: 1101256009

--------------------------------------------------------------------------------

---------

| Id  | Operation                 | Name        | Rows  | Bytes | Cost (%CPU)| T

ime     |

--------------------------------------------------------------------------------

---------

|   0 | SELECT STATEMENT          |             |  1000K|  4882K|  4285   (1)| 0

0:00:52 |

|   1 |  TABLE ACCESS STORAGE FULL| LARGE_TABLE |  1000K|  4882K|  4285   (1)| 0

0:00:52 |

--------------------------------------------------------------------------------

---------

Statistics

----------------------------------------------------------

1  recursive calls

0  db block gets

81301  consistent gets

15619  physical reads

0  redo size

14646884  bytes sent via SQL*Net to client

733745  bytes received via SQL*Net from client

66668  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1000000  rows processed

SQL> set autot off

SQL> SELECT sql_id,

2  physical_read_bytes A,

3  io_interconnect_bytes B,

4  io_cell_offload_eligible_bytes C,

5  io_cell_offload_returned_bytes D

6  FROM v$sql

7  WHERE sql_text LIKE ‘%large_table%‘

8  AND sql_text NOT LIKE ‘%v$sql%‘;

SQL_ID                 A          B          C          D

------------- ---------- ---------- ---------- ----------

8rxx50g4qjas9      16384      16384          0          0

6huzbgn52m7pz  127950848  127950848          0          0

再看一下开启Smart Scan的情况:

SQL> alter system flush shared_pool;

System altered.

SQL> ALTER session SET cell_offload_processing = TRUE;

Session altered.

SQL> ALTER session SET "_serial_direct_read" = TRUE;

Session altered.

SQL> show parameter cell;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

cell_offload_compaction              string      ADAPTIVE

cell_offload_decryption              boolean     TRUE

cell_offload_parameters              string

cell_offload_plan_display            string      AUTO

cell_offload_processing              boolean     TRUE

cell_partition_large_extents         string      DEFAULT

SQL> set timing on

SQL> set autot trace

SQL> set timing on

SQL> SELECT id FROM large_table;

1000000 rows selected.

Elapsed: 00:00:05.08

Execution Plan

----------------------------------------------------------

Plan hash value: 1101256009

--------------------------------------------------------------------------------

---------

| Id  | Operation                 | Name        | Rows  | Bytes | Cost (%CPU)| T

ime     |

--------------------------------------------------------------------------------

---------

|   0 | SELECT STATEMENT          |             |  1000K|  4882K|  4285   (1)| 0

0:00:52 |

|   1 |  TABLE ACCESS STORAGE FULL| LARGE_TABLE |  1000K|  4882K|  4285   (1)| 0

0:00:52 |

--------------------------------------------------------------------------------

---------

Statistics

----------------------------------------------------------

0  recursive calls

0  db block gets

15623  consistent gets

15619  physical reads

0  redo size

14646884  bytes sent via SQL*Net to client

733745  bytes received via SQL*Net from client

66668  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1000000  rows processed

SQL> set timing off

SQL> set autot off

SQL> SELECT sql_id,

2  physical_read_bytes A,

3  io_interconnect_bytes B,

4  io_cell_offload_eligible_bytes C,

5  io_cell_offload_returned_bytes D

6  FROM v$sql

7  WHERE sql_text LIKE ‘%large_table%‘

8  AND sql_text NOT LIKE ‘%v$sql%‘;

SQL_ID                 A          B          C          D

------------- ---------- ---------- ---------- ----------

8rxx50g4qjas9      16384      16384          0          0

6huzbgn52m7pz  127950848   12592432  127950848   12592432

可以看到在启用Smart Scan的时候,io_interconnect_bytes从127950848降到了12592432,执行时间从00:00:11.64降到了00:00:05.08,同时consistent gets从81301降到了15623。

由于此时没有where条件,所以只是字段投影的影响,没有谓词过滤和存储索引的影响。

时间: 2024-11-03 03:24:53

【Oracle】Exadata Smart Scan---Column Projection的相关文章

【Oracle】Exadata虚拟机配置(一)

Exadata是Oracle软硬结合的一体机,通过自己的机子不可能完全模拟出来,这里搭建的虚拟机只是一个简单的.可以供我们学习Exadata的环境. 最简单可以模拟的Exadata虚拟机需要两个节点,CELL节点和DB节点. 首先说一下CELL节点安装介质: OEL5.6-x86-64 cell-11.2.3.3.1_LINUX.X64 这两个在https://edelivery.oracle.com/ 可以下载的到 下面是具体安装步骤: 关闭UEK,否则启动cellsrv会报错: [[emai

【Oracle】Exadata Heathy Check工具Exachk的使用

在Exadata中,出现任何与数据库无关的问题的时候最好都运行exachk进行健康检查.exachk收集的信息很全,省去大量人工收集的繁琐步骤.并且收集完成以后,可以在整体上对系统的健康状况做一个评估,该报告包含软件.硬件.固件版本.配置等方面信息,从中发现一些可疑点,进而缩小范围进行下一步的诊断. 这篇文章主要记录了exachk的基本使用方法,exachk可以从MOS文档:1070954.1中下载得到. 首先要声明两个环境变量RAT_ORACLE_HOME和RAT_EXADATA_VERSIO

【Oracle】Exadata虚拟机配置(二) .

继续上篇文章 搭建DB节点,DB节点的搭建和搭建普通的RAC没什么区别,需要注意的就是以下两点: 1.创建相关目录,并增加两个文件 [[email protected] ~]# vi /etc/oracle/cell/network-config/cellinit.ora ipaddress1=192.168.40.161/24  --DB节点的地址 [[email protected] ~]# vi /etc/oracle/cell/network-config/cellip.ora cell

【Oracle】Exadata日常巡检工具Exachk的使用

在Exadata中,出现任何与数据库无关的问题的时候最好都运行exachk进行健康检查.exachk收集的信息很全,省去大量人工收集的繁琐步骤.并且收集完成以后,可以在整体上对系统的健康状况做一个评估,该报告包含软件.硬件.固件版本.配置等方面信息,从中发现一些可疑点,进而缩小范围进行下一步的诊断. 这篇文章主要记录了exachk的基本使用方法,exachk可以从MOS文档:1070954.1中下载得到. 首先要声明两个环境变量RAT_ORACLE_HOME和RAT_EXADATA_VERSIO

【Oracle】常用语句集合

1 oracle常用经典SQL查询 2 常用SQL查询: 3 4 1.查看表空间的名称及大小 5 6 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size 7 from dba_tablespaces t, dba_data_files d 8 where t.tablespace_name = d.tablespace_name 9 group by t.tablespace_name; 10 11 2.查看表空间物

【Oracle】ora-12541错误解决

ORA-12541: TNS无监听程序错误 1.在oracle安装目录下查找listener.ora和tnsnames.ora文件,然后打开 2.将host改为机器名 3.执行命令:lsnrctl stop,再执行lsnrctl start. [Oracle]ora-12541错误解决,布布扣,bubuko.com

【Oracle】物理体系结构

 一.ORACLE 物理体系结构 原理结构图 各部分解释: PGA: 私有内存区,仅供当前发起用户使用. 三个作用 用户登录后的session信息会保存在PGA. 执行排序,如果内存不够,oracle会在临时表空间中完成 保存用户权限信息 SGA: 包含共享池,数据缓冲区,日志缓冲区以及一些相关的进程. DATABASE: 数据最终存放的地方,其中一块区域是日志存放区.数据和记录日志又由DBWR和LGWR来写入数据库和重做日志组,待一个重做日志组满了之后切换到下一个,等到循环了一次之后,原来

【Oracle】逻辑结构(TableSpace→Segment→Extent→Block)

 一.逻辑体系结构图 二.逻辑结构图组成介绍 从上表可以看出,一个数据库是由多个表空间(tablespace)组成,一个表空间又由多个段(segment)组成,一个段又由多个区(extent)组成,一个区则由多个块(block)组成. 一个数据库中,UNDO和SYSTEM表空间是必须存在的. 举个例子: 话说张三是大坝县的一个农民,每年秋收的稻谷都必须放到县里的粮仓里统一管理.跟他一同去的还有李四.王五等以种稻谷为主的农民. 刚开始的时候县里粮仓给他分配了一块5㎡的地方(block块)给他存

【Oracle】Windows 7下完全卸载Oracle 11g数据库

闲来无事,想把Oracle 11g重装一下,记录如下:   (1)首先在服务中停止所有的Oracle服务:   (2)开始 -> 程序 -> Oracle-OraDb11g_home1 -> Oracle Installation Products -> Universal Installer,单击“卸载产品”-“全部展开”,然后选中除“OraDb11g_home1”外的全部目录,进行删除:   (3)删除注册表: HKEY_LOCAL_MACHINE\SOFTWARE\ORACL