热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle12cNewFeatures—InMemoryOption(1)

本站文章除注明转载外,均为本站原创:转载自lovewifelovelife—Roger的Oracle技术博客本文链接地址:Oracle12cNewFeaturesInMemoryOption(1)Oracle12.1.0.2版本了引入了一个非常牛叉的功能,即InMemoryoption,这是十分具有诱惑力的,针对

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger 的Oracle技术博客 本文链接地址: Oracle 12c New FeaturesIn Memory Option(1) Oracle 12.1.0.2版本了引入了一个非常牛叉的功能,即In Memory option,这是十分具有诱惑力的,针对

本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger 的Oracle技术博客

本文链接地址: Oracle 12c New Features—In Memory Option(1)

Oracle 12.1.0.2版本了引入了一个非常牛叉的功能,即In Memory option,这是十分具有诱惑力的,针对这个重大的变化,我会进行一个系列文章的分析,这是第一篇。

首先,我们来尝试下In Memory option功能。

[oracle@ora12012 ~]$ sqlplus "/as sysdba"

SQL*Plus: Release 12.1.0.2.0 Beta on Tue Jul 29 05:30:26 2014

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Beta
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL>
SQL>
SQL>
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ WRITE
SQL> select * from v$option where PARAMETER like '%In-Memory%';

PARAMETER                        VALUE                   CON_ID
-------------------------------- ------------------- ----------
In-Memory Column Store           TRUE                         0
In-Memory Aggregation            TRUE                         0
SQL> select name,open_mode from v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDBORCL                        READ WRITE
KILLDB                         READ WRITE
SQL> conn roger/roger@killdb
Connected.

SQL> create table t_memory as select * from dba_objects;

Table created.

SQL> select owner,table_name,INMEMORY,INMEMORY_DISTRIBUTE from dba_tables where table_name='T_MEMORY';

OWNER      TABLE_NAME                     INMEMORY INMEMORY_DISTRI
---------- ------------------------------ -------- ---------------
ROGER      T_MEMORY                       DISABLED
SQL> set autot on
SQL> select count(1) from T_MEMORY;

COUNT(1)
----------
 90922

Execution Plan
----------------------------------------------------------
Plan hash value: 620019089

-----------------------------------------------------------------------
| Id  | Operation          | Name     | Rows  | Cost (%CPU)| Time     |
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |     1 |   416   (1)| 00:00:01 |
|   1 |  SORT AGGREGATE    |          |     1 |            |          |
|   2 |   TABLE ACCESS FULL| T_MEMORY | 90922 |   416   (1)| 00:00:01 |
-----------------------------------------------------------------------

Statistics
----------------------------------------------------------
 2  recursive calls
 0  db block gets
 1529  consistent gets
 1525  physical reads
 0  redo size
 544  bytes sent via SQL*Net to client
 551  bytes received via SQL*Net from client
 2  SQL*Net roundtrips to/from client
 0  sorts (memory)
 0  sorts (disk)
 1  rows processed

SQL>  select count(1) from T_MEMORY;

COUNT(1)
----------
 90922

Execution Plan
----------------------------------------------------------
Plan hash value: 620019089

-----------------------------------------------------------------------
| Id  | Operation          | Name     | Rows  | Cost (%CPU)| Time     |
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |     1 |   416   (1)| 00:00:01 |
|   1 |  SORT AGGREGATE    |          |     1 |            |          |
|   2 |   TABLE ACCESS FULL| T_MEMORY | 90922 |   416   (1)| 00:00:01 |
-----------------------------------------------------------------------

Statistics
----------------------------------------------------------
 36  recursive calls
 0  db block gets
 1575  consistent gets
 1525  physical reads
 0  redo size
 544  bytes sent via SQL*Net to client
 551  bytes received via SQL*Net from client
 2  SQL*Net roundtrips to/from client
 5  sorts (memory)
 0  sorts (disk)
 1  rows processed

未启用in Memory 特性之前,大家可以看到执行计划是上述这样的,虽然SQL执行过一次了,然而再次执行仍然会有不少的代价,下面我们来看下开启in Memory 特性后的情况。首先我们来了解下in Memory option相关的几个参数:

SQL> show parameter inmemory

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_max_populate_servers        integer     0
inmemory_query                       string      ENABLE
inmemory_size                        big integer 100M

这里针对in memory option的几个参数进行简单说明:

inmemory_size:该参数可以在cdb或pdb级别进行设置,即In memory column store的内存区域。
inmemory_force:该参数默认值为default,表示Oracle仅仅通过对象的inmemory或no inmemory特殊来决定是否启用in memory column store特性。
inmemory_max_populate_servers:表示后台启动多少个进程来加载数据到memory中。对于多core(多cpu)的系统来讲,可以设置相对大一点。
inmemory_query: 表示In memory query是否被启动,默认为enable。

还有有一个参数:OPTIMIZER_INMEMORY_AWARE,表示Oracle CBO是否参考in memory column store功能。这里Oracle的官方文档描述其实有误。

这个参数在12.1.0.2中其实是一个隐含参数:

SQL> show parameter OPTIMIZER_INMEMORY

NAME                                      TYPE        VALUE
------------------------------------      ----------- ------------------------------
_optimizer_inmemory_access_path           boolean     TRUE
_optimizer_inmemory_autodop               boolean     TRUE
_optimizer_inmemory_aware                 boolean     TRUE
_optimizer_inmemory_bloom_filter          boolean     TRUE
_optimizer_inmemory_gen_pushable_preds    boolean     TRUE
_optimizer_inmemory_minmax_pruning        boolean     TRUE
_optimizer_inmemory_pruning_ratio_rows    integer     100
_optimizer_inmemory_quotient              integer     0
_optimizer_inmemory_table_expansion       boolean     TRUE

从这部分隐含参数,我们其实可以大概看出来12c中的优化器的一些机制。下面再调整下另外一个参数,注意这个参数只能在CDB级别进行调整。

SQL> conn /as sysdba
Connected.
SQL> alter system set inmemory_max_populate_servers=2 scope=spfile;

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  637534208 bytes
Fixed Size                  2919088 bytes
Variable Size             478152016 bytes
Database Buffers           46137344 bytes
Redo Buffers                5468160 bytes
In-Memory Area            104857600 bytes
Database mounted.

SQL> alter table t_memory INMEMORY;

Table altered.

SQL> select count(1) from T_MEMORY;

COUNT(1)
----------
 90922

Execution Plan
----------------------------------------------------------
Plan hash value: 620019089

--------------------------------------------------------------------------------
| Id  | Operation                   | Name     | Rows  | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |          |     1 |   416   (1)| 00:00:01 |
|   1 |  SORT AGGREGATE             |          |     1 |            |          |
|   2 |   TABLE ACCESS INMEMORY FULL| T_MEMORY | 90922 |   416   (1)| 00:00:01 |
--------------------------------------------------------------------------------

Statistics
----------------------------------------------------------
 332  recursive calls
 0  db block gets
 1872  consistent gets
 1534  physical reads
 0  redo size
 544  bytes sent via SQL*Net to client
 551  bytes received via SQL*Net from client
 2  SQL*Net roundtrips to/from client
 22  sorts (memory)
 0  sorts (disk)
 1  rows processed

SQL>
SQL> set autot off
SQL> select owner,table_name,INMEMORY,INMEMORY_PRIORITY,INMEMORY_DISTRIBUTE,INMEMORY_COMPRESSION
 2  from dba_tables where table_name='T_MEMORY';

OWNER      TABLE_NAME                     INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS
---------- ------------------------------ -------- -------- --------------- -----------------
ROGER      T_MEMORY                       ENABLED  NONE     AUTO            FOR QUERY LOW

SQL> set autot on
SQL> select count(1) from T_MEMORY;

COUNT(1)
----------
 90922

Execution Plan
----------------------------------------------------------
Plan hash value: 620019089

--------------------------------------------------------------------------------
| Id  | Operation                   | Name     | Rows  | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |          |     1 |    16   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE             |          |     1 |            |          |
|   2 |   TABLE ACCESS INMEMORY FULL| T_MEMORY | 90922 |    16   (0)| 00:00:01 |
--------------------------------------------------------------------------------

Statistics
----------------------------------------------------------
 187  recursive calls
 0  db block gets
 151  consistent gets
 1  physical reads
 0  redo size
 544  bytes sent via SQL*Net to client
 551  bytes received via SQL*Net from client
 2  SQL*Net roundtrips to/from client
 16  sorts (memory)
 0  sorts (disk)
 1  rows processed

我们可以看到如果你开启了in memory option的话,那么SQL的执行代价确实要少很多,优势比较明显。然而,这里不知道大家
注意到了没有? 为什么开启了in memory 特性之后,再次执行SQL时,还有一个物理读呢?

对于In memory Option这里有几种属性:

1) IM Column Store Compression Methods
2) IM Column Store Data Population Options

对于In Memory column store compression来讲,又分为几种情况,上面的FOR QUERY LOW 就是默认行为. 根据官方文档的描述分为如下几种:

NO MEMCOMPRESS??? :? 即存在In memory内存中的该对象的列数据是不会被压缩的。
MEMCOMPRESS FOR DML: 这种属性的设置下可以优化DML操作以及最小程度的压缩In memory column store的数据。
MEMCOMPRESS FOR QUERY LOW: 这是默认设置,Oracle认为这是最利于查询性能的设置。这种情况下数据的压缩比例是介于FOR DML 和 QUERY HIGH之间的.
MEMCOMPRESS FOR QUERY HIGH: 这种情况下查询性能也是相对较优的,列数据的压缩比例在FOR QUERY LOW 和 FOR CAPACITY LOW 两种默认之间。
MEMCOMPRESS FOR CAPACITY LOW:这种情况下也能获得不错的查询性能,数据压缩情况介于FOR QUERY HIGH和FOR CAPACITY HIGH之间。
MEMCOMPRESS FOR CAPACITY HIGH:这种情况下压缩比例是最高的,通常是不推荐的,没有性能上的优势。


对于IM Column Store Data Population Options来讲,这种属性的设置只能是对象级别,分别表级别或分区级别,不能进行column级别的设置。
PRIORITY NONE? :即 不启用对象的PRIORITY特性。什么是PRIORITY呢,其实就是定义对象的活跃程度。
当达到一定的活跃程度之后,该对象会被放到in memory area中。默认情况下oracle不会启用这个属性,即默认为None。

PRIORITY LOW :表示启用priority特性,只是level较低,为low。
PRIORITY MEDIUM :表示启用priority特性,level介于LOW 和High之间. 目前暂时不知道oracle是如何来定义这个low,medium和high的。
PRIORITY HIGH?? :表示启用priority特性,level介于MEDIUM 和CRITICAL之间
PRIORITY CRITICAL:表示启用priority特性,level是最高的。

未完待续!

Related posts:

  1. 11g 新特性之–query result cache(3)
  2. full text index 探秘(1)
  3. 11gR2 新特性之—In-Memory Parallel execution
  4. 10g中distinct加强以及anti jion,semi jion
  5. Oracle materizlized view Study (1)

推荐阅读
  • 如何在Oracle ASM_Diskgroup中重命名现有磁盘
    如何在Oracle ASM_Diskgroup中重命名现有磁盘 ... [详细]
  • 基于Java和JSP的电子医疗记录管理平台
    随着信息技术的快速发展,各类管理系统已在各行各业得到广泛应用。传统的人工管理模式已逐渐无法满足现代需求。本文介绍了一种基于Java和JSP技术开发的电子医疗记录管理平台,旨在提高医疗行业的信息化水平和管理效率。该平台通过整合先进的数据库技术和Web开发框架,实现了医疗记录的高效存储、查询和管理,为医护人员提供了便捷的操作界面和强大的数据支持。 ... [详细]
  • 开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用
    开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用 ... [详细]
  • 深入解析:Explain命令的应用与字段详解
    深入解析:Explain命令的应用与字段详解 ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
  • 如何运用蒙特卡洛方法计算NPV:计算机专业毕业设计遇到难题怎么办?
    许多计算机科学专业的学生在大学期间都会遇到这样的困扰:课堂上教授的内容往往偏向理论,实际应用的知识点讲解得较为浅显和概括,导致在进行毕业设计时,如运用蒙特卡洛方法计算净现值(NPV)等复杂问题时感到无从下手。本文旨在探讨如何通过深入理解和实践蒙特卡洛模拟技术,解决这类计算难题,为学生的毕业设计提供实用指导。 ... [详细]
  • 数据仓库架构中缓慢变化维度的优化设计策略
    在数据仓库架构中,缓慢变化维度(SCD)是一种广泛应用的技术手段。该技术处理的是那些随时间逐步变化的维度属性,确保在进行商业智能(BI)分析时能够准确反映特定历史时间点的数据状态。通过合理设计SCD,可以有效提升数据仓库的性能与准确性,同时简化数据管理和维护流程。 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • 在Ubuntu系统中,由于预装了MySQL,因此无需额外安装。通过命令行登录MySQL时,可使用 `mysql -u root -p` 命令,并按提示输入密码。常见问题包括:1. 错误 1045 (28000):访问被拒绝,这通常是由于用户名或密码错误导致。为确保顺利连接,建议检查MySQL服务是否已启动,并确认用户名和密码的正确性。此外,还可以通过配置文件调整权限设置,以增强安全性。 ... [详细]
  • 如何使用Python高效绘制矩形图形
    本文详细介绍了如何利用Python的Turtle库高效绘制矩形图形,适合初学者快速上手。通过具体示例代码,帮助读者理解Turtle库的基本绘图方法和技巧,同时探讨了在不同应用场景中绘制矩形的实际操作,为后续复杂图形的绘制打下坚实基础。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 在主从复制架构中,Bingo_MySQL 同步工具的应用与优化具有重要意义。为确保高效同步,建议使用相同或兼容的 MySQL 版本,并确保两台服务器位于同一局域网内,且网络连接畅通无阻。若无法 ping 通,请检查 IP 配置及防火墙设置,以保证网络连通性。此外,合理的配置参数和定期维护也是提升同步性能的关键因素。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 在Hive中合理配置Map和Reduce任务的数量对于优化不同场景下的性能至关重要。本文探讨了如何控制Hive任务中的Map数量,分析了当输入数据超过128MB时是否会自动拆分,以及Map数量是否越多越好的问题。通过实际案例和实验数据,本文提供了具体的配置建议,帮助用户在不同场景下实现最佳性能。 ... [详细]
author-avatar
patrick0129_645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有