阿里云
发表主题 回复主题
  • 526阅读
  • 9回复

感受ORACLE 12C IN_MEMORY性能威力

级别: 论坛版主
发帖
131
云币
630
                    感受ORACLE 12C IN_MEMORY性能威力


      oracle 12C in_memory(简称IM)对数据库性能的提升是巨大的,最重要的一点是这一切

对应用程序是透明的。首先我们来看看实验中IM的相关参数设置   

SQL> show parameter inmemory;

NAME                                 TYPE        VALUE

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

inmemory_clause_default              string

inmemory_force                       string      DEFAULT

inmemory_max_populate_servers        integer     2

inmemory_query                       string      ENABLE

inmemory_size                        big integer 100M

inmemory_trickle_repopulate_servers_ integer     1

percent

optimizer_inmemory_aware             boolean     TRUE

创建一个普通用户,创建一个表数据来自dba_objects;

SQL> create user c##frank identified by frank;

User created.

SQL> grant connect,resource,unlimited tablespace to c##frank;

Grant succeeded.

SQL> create table c##frank.t1 as select * from dba_objects;

Table created.


把用户表放到IM中.

SQL> alter table t1 c##frank.inmemory;

Table altered.

收集一下统计息.

SQL> exec dbms_stats.gather_table_stats('C##FRANK','T1');

PL/SQL procedure successfully completed.


SQL> set autotrace on;

SQL> select count(object_id) from c##frank.t1;

COUNT(OBJECT_ID)

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

           90905


Execution Plan

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

Plan hash value: 3724264953

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

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

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

|   0 | SELECT STATEMENT            |      |     1 |     5 |    27   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE             |      |     1 |     5 |            |          |

|   2 |   TABLE ACCESS INMEMORY FULL| T1   | 90905 |   443K|    27   (0)| 00:00:01 |

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


Statistics

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

          0  recursive calls

          0  db block gets

          3  consistent gets

          0  physical reads

          0  redo size

        552  bytes sent via SQL*Net to client

        552  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          1  rows processed

做一个简单的查询,可以看出有以下几点:1,全表扫描多了INMEMORY关健字;2,consistent gets急剧减少,少得有点

可怜了,说明对内存访问极少;3,cost是27

相比传统的查询,看看in-memory快了多少,使用NO_INMEMORY hint让optimizer不走in-memory,而走传统的buffer cache

SQL> select /*+ NO_INMEMORY */ count(object_id) from t1;

COUNT(OBJECT_ID)

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

           90905


Execution Plan

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

Plan hash value: 3724264953

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

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

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

|   0 | SELECT STATEMENT   |      |     1 |     5 |   416   (1)| 00:00:01 |

|   1 |  SORT AGGREGATE    |      |     1 |     5 |            |          |

|   2 |   TABLE ACCESS FULL| T1   | 90905 |   443K|   416   (1)| 00:00:01 |

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


Statistics

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

         33  recursive calls

          0  db block gets

       1557  consistent gets

          0  physical reads

          0  redo size

        552  bytes sent via SQL*Net to client

        552  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          3  sorts (memory)

          0  sorts (disk)

          1  rows processed

传统的成本是416,consistent gets是1557,相比in-memory,访问数据大量增加.这是由于是传统是存储的是

行式,而in-memory存放的是列式.速度快了非常多.

  有人可能会问,这里选择是单列,如果是count(*)了,性能还有这么明显吗?好,我们来看例子

SQL> select /*+ NO_INMEMORY */ count(*) from c##frank.t1;

  COUNT(*)

----------

     90905


Execution Plan

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

Plan hash value: 3724264953

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

| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT   |      |     1 |   426   (1)| 00:00:01 |

|   1 |  SORT AGGREGATE    |      |     1 |            |          |

|   2 |   TABLE ACCESS FULL| T1   | 90905 |   426   (1)| 00:00:01 |

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


Statistics

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

          5  recursive calls

          0  db block gets

       1536  consistent gets

       1527  physical reads

          0  redo size

        544  bytes sent via SQL*Net to client

        552  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          1  rows processed

在实验中还产生了物理读.再来看看in-memory的count(*)

SQL> select /*+ INMEMORY */ count(*) from c##frank.t1;

  COUNT(*)

----------

     90905


Execution Plan

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

Plan hash value: 3724264953

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

| Id  | Operation                   | Name | Rows  | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT            |      |     1 |    27   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE             |      |     1 |            |          |

|   2 |   TABLE ACCESS INMEMORY FULL| T1   | 90905 |    27   (0)| 00:00:01 |

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


Statistics

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

          0  recursive calls

          0  db block gets

          3  consistent gets

          0  physical reads

          0  redo size

        544  bytes sent via SQL*Net to client

        552  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          1  rows processed

即使count(*),in-memory也和原来一样,快上很多倍.估计看到这样一对比很多人都已经坐不住了.






oracle, 性能, 数据库, 提升, 应用程序






级别: *
发帖
*
云币
*


in-memory并不是万能药,不是拯救者。更多的结果我稍后再发出来 。
级别: *
发帖
*
云币
*


单表操作还不错,但如果是 比较复杂的JOIN  不知道会对执行计划 有什么影响。
级别: *
发帖
*
云币
*




SQL> alter system set inmemory_size=100M scope=spfile;

alter system set inmemory_size=100M scope=spfile

                                               *

第 1 行出现错误:

ORA-02096: 此选项的指定初始化参数不可修改



求救
级别: *
发帖
*
云币
*


期待楼主的精彩实验解析
级别: *
发帖
*
云币
*


好是好,不过闭源的东西很难研究。出了一些奇怪的问题,Oracle支持还是力度不够。
级别: *
发帖
*
云币
*




新产品,正常的感受ORACLE 12C IN_MEMORY性能威力-oracle 12c
级别: *
发帖
*
云币
*


感受ORACLE 12C IN_MEMORY性能威力-oracle 12c in memory学习了,多谢分享
级别: *
发帖
*
云币
*





SQL> alter system set inmemory_size=100M scope=spfile;

alter system set inmemory_size=100M scope=spfile

                                               *

第 1 行出现错误:

ORA-02096: 此选项的指定初始化参数不可修改



老师 救救啊
级别: *
发帖
*
云币
*


感受ORACLE 12C IN_MEMORY性能威力-12c in memory good
发表主题 回复主题
« 返回列表
«12345678910»
共10页
上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 16 + 24 = ?
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)

      版权声明

      开发者论坛为你提供“感受ORACLE 12C IN_MEMORY性能威力”的内容,论坛中还有更多关于 inmemory关健字威力 的内容供你使用,该内容是网友上传,与开发者论坛无关,如果需要删除请联系zixun-group@service.aliyun.com,工作人员会在5个工作日内回复您。