zoukankan      html  css  js  c++  java
  • oracle 12cR2 smart flash cache实测

    最近一直在处理新系统的性能优化问题,这两天特地测试了下oracle 11gR2开始引入的smart flash cache。

    其介绍参考MOS文档,How To Size the Database Smart Flash Cache (文档 ID 1317950.1)

    The Database Smart Flash Cache is a new feature in Oracle Database 11g Release 2 (11.2).
    The Database Smart Flash Cache is a transparent extension of the database buffer cache using solid state device (SSD) technology.
    The SSD acts as a Level 2 cache to the (Level 1) SGA.
     
    Database Smart Flash Cache can greatly improve the performance of Oracle databases by reducing the amount of disk I/O at a much lower cost than adding an equivalent amount of RAM.
    简单的说,他比较适合于系统中绝大部分存储使用机械硬盘,但是又配备了小部分SSD的场景,比如说我们的某个系统4.5T存储,600GB的SSD。
    Your database is running on the Solaris or Oracle Linux operating systems.
    The flash cache is supported on these operating systems only.
    如果不是solaris或者OEL,则启动时报错,这很有可能会是个最大的限制,因为很多企业限定了必须使用RHEL/CENTOS/SUSE。如下:
    SQL> startup;
    ORA-00439: feature not enabled: Server Flash Cache
    这明显就是Oracle设置的障碍。
    可以通过DB_FLASH_CACHE_FILE和db_flash_cache_size设置智能闪存的位置以及大小。
    下面来看实际效果:
    [oracle@oel-12c ~]$ sqlplus "/as sysdba"
    
    SQL*Plus: Release 12.2.0.1.0 Production on 星期五 9月 7 20:13:00 2018
    
    Copyright (c) 1982, 2016, Oracle.  All rights reserved.
    
    
    连接到: 
    Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
    
    SQL> create tablespace my_ts_2 datafile '/u01/app/oracle/oradata/nfs_to_14/my_ts02.dbf' size 1g autoextend on next 10m maxsize unlimited;
    
    表空间已创建。
    
    SQL> create table my_big_table as select * from dba_tables;
    
    表已创建。
    
    SQL> alter table my_big_table move tablespace my_ts_2; --移动到NFS存储上
    
    表已更改。
    
    SQL> insert into my_big_table select * from my_big_table;
    
    已创建 2106 行。
    
    SQL> /
    
    已创建 4212 行。
    
    SQL> /
    
    已创建 8424 行。
    
    SQL> /
    
    已创建 16848 行。
    
    SQL> /
    
    已创建 33696 行。
    
    SQL> /
    
    已创建 67392 行。
    
    SQL> commit;
    
    提交完成。
    
    SQL> /
    
    提交完成。
    
    SQL> insert into my_big_table select * from my_big_table;
    
    已创建 134784 行。
    
    SQL> /
    
    已创建 269568 行。
    
    SQL> commit;
    
    提交完成。
    
    SQL> insert into my_big_table select * from my_big_table;
    
    已创建 539136 行。
    
    SQL> commit;

    使用智能闪存:

    SQL> set autotrace on;
    SQL> select count(1) from my_big_table;
    
      COUNT(1)
    ----------
       1078272
    
    已用时间:  00: 00: 33.06
    
    执行计划
    ----------------------------------------------------------
    Plan hash value: 1307946652
    
    ---------------------------------------------------------------------------
    | Id  | Operation       | Name      | Rows  | Cost (%CPU)| Time      |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |          |    1 | 12973   (1)| 00:00:01 |
    |   1 |  SORT AGGREGATE    |          |    1 |           |      |
    |   2 |   TABLE ACCESS FULL| MY_BIG_TABLE |   969K| 12973   (1)| 00:00:01 |
    ---------------------------------------------------------------------------
    
    Note
    -----
       - dynamic statistics used: dynamic sampling (level=2)
    
    
    统计信息
    ----------------------------------------------------------
        124  recursive calls
          0  db block gets
          47210  consistent gets
          47193  physical reads
        132  redo size
        546  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          3  sorts (memory)
          0  sorts (disk)
          1  rows processed
    
    SQL> /
    
      COUNT(1)
    ----------
       1078272
    
    已用时间:  00: 00: 03.00
    
    执行计划
    ----------------------------------------------------------
    Plan hash value: 1307946652
    
    ---------------------------------------------------------------------------
    | Id  | Operation       | Name      | Rows  | Cost (%CPU)| Time      |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |          |    1 | 12973   (1)| 00:00:01 |
    |   1 |  SORT AGGREGATE    |          |    1 |           |      |
    |   2 |   TABLE ACCESS FULL| MY_BIG_TABLE |   969K| 12973   (1)| 00:00:01 |
    ---------------------------------------------------------------------------
    
    Note
    -----
       - dynamic statistics used: dynamic sampling (level=2)
    
    
    统计信息
    ----------------------------------------------------------
          0  recursive calls
          0  db block gets
          47094  consistent gets
          47006  physical reads
          0  redo size
        546  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
    
    SQL> /
    
      COUNT(1)
    ----------
       1078272
    
    已用时间:  00: 00: 04.54
    
    执行计划
    ----------------------------------------------------------
    Plan hash value: 1307946652
    
    ---------------------------------------------------------------------------
    | Id  | Operation       | Name      | Rows  | Cost (%CPU)| Time      |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |          |    1 | 12973   (1)| 00:00:01 |
    |   1 |  SORT AGGREGATE    |          |    1 |           |      |
    |   2 |   TABLE ACCESS FULL| MY_BIG_TABLE |   969K| 12973   (1)| 00:00:01 |
    ---------------------------------------------------------------------------
    
    Note
    -----
       - dynamic statistics used: dynamic sampling (level=2)
    
    
    统计信息
    ----------------------------------------------------------
          0  recursive calls
          0  db block gets
          47094  consistent gets
          47020  physical reads
          0  redo size
        546  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
    
    SQL> /
    
      COUNT(1)
    ----------
       1078272
    
    已用时间:  00: 00: 02.24

    不使用智能闪存:

    SQL> alter system set db_flash_cache_size=0 ;
    
    系统已更改。
    
    已用时间:  00: 00: 01.01
    SQL> select count(1) from my_big_table;
    
      COUNT(1)
    ----------
       1078272
    
    已用时间:  00: 00: 30.75
    
    执行计划
    ----------------------------------------------------------
    Plan hash value: 1307946652
    
    ---------------------------------------------------------------------------
    | Id  | Operation       | Name      | Rows  | Cost (%CPU)| Time      |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |          |    1 | 12973   (1)| 00:00:01 |
    |   1 |  SORT AGGREGATE    |          |    1 |           |      |
    |   2 |   TABLE ACCESS FULL| MY_BIG_TABLE |   969K| 12973   (1)| 00:00:01 |
    ---------------------------------------------------------------------------
    
    Note
    -----
       - dynamic statistics used: dynamic sampling (level=2)
    
    
    统计信息
    ----------------------------------------------------------
          0  recursive calls
          0  db block gets
          47094  consistent gets
          47020  physical reads
          0  redo size
        546  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
    
    SQL> /
    
      COUNT(1)
    ----------
       1078272
    
    已用时间:  00: 00: 32.20
    
    执行计划
    ----------------------------------------------------------
    Plan hash value: 1307946652
    
    ---------------------------------------------------------------------------
    | Id  | Operation       | Name      | Rows  | Cost (%CPU)| Time      |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |          |    1 | 12973   (1)| 00:00:01 |
    |   1 |  SORT AGGREGATE    |          |    1 |           |      |
    |   2 |   TABLE ACCESS FULL| MY_BIG_TABLE |   969K| 12973   (1)| 00:00:01 |
    ---------------------------------------------------------------------------
    
    Note
    -----
       - dynamic statistics used: dynamic sampling (level=2)
    
    
    统计信息
    ----------------------------------------------------------
          0  recursive calls
          0  db block gets
          47094  consistent gets
          47020  physical reads
          0  redo size
        546  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
    
    SQL> /
    
      COUNT(1)
    ----------
       1078272
    
    已用时间:  00: 00: 17.56
    
    执行计划
    ----------------------------------------------------------
    Plan hash value: 1307946652
    
    ---------------------------------------------------------------------------
    | Id  | Operation       | Name      | Rows  | Cost (%CPU)| Time      |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |          |    1 | 12973   (1)| 00:00:01 |
    |   1 |  SORT AGGREGATE    |          |    1 |           |      |
    |   2 |   TABLE ACCESS FULL| MY_BIG_TABLE |   969K| 12973   (1)| 00:00:01 |
    ---------------------------------------------------------------------------
    
    Note
    -----
       - dynamic statistics used: dynamic sampling (level=2)
    
    
    统计信息
    ----------------------------------------------------------
          0  recursive calls
          0  db block gets
          47094  consistent gets
          47019  physical reads
          0  redo size
        546  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
    
    SQL> /
    
      COUNT(1)
    ----------
       1078272
    
    已用时间:  00: 00: 15.11
    
    执行计划
    ----------------------------------------------------------
    Plan hash value: 1307946652
    
    ---------------------------------------------------------------------------
    | Id  | Operation       | Name      | Rows  | Cost (%CPU)| Time      |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |          |    1 | 12973   (1)| 00:00:01 |
    |   1 |  SORT AGGREGATE    |          |    1 |           |      |
    |   2 |   TABLE ACCESS FULL| MY_BIG_TABLE |   969K| 12973   (1)| 00:00:01 |
    ---------------------------------------------------------------------------
    
    Note
    -----
       - dynamic statistics used: dynamic sampling (level=2)
    
    
    统计信息
    ----------------------------------------------------------
          0  recursive calls
          0  db block gets
          47094  consistent gets
          47019  physical reads
          0  redo size
        546  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
    
    SQL> /
    
      COUNT(1)
    ----------
       1078272
    
    已用时间:  00: 00: 15.69

    如上所述,性能相差了6-7倍。可见智能闪存效果还是不错的。

    不过需要注意的是,如果95%+的常用数据都已经在iops足够高的磁盘上了比如SSD,这个时候又拿一部分SSD作为智能缓存,性能反而会下降比直接访问磁盘高达1倍。

    在oracle 11g中,闪存文件只能配置1个,在12c中没有这个限制了。

  • 相关阅读:
    和阿木聊Node.js
    C#开发攀爬集锦
    MyBatis实战
    对于技术的思考
    抛物线习题
    变量集中策略
    变换作图中的常用模板函数
    网上看到一题目的解法的启示
    函数习题
    新定义习题
  • 原文地址:https://www.cnblogs.com/zhjh256/p/9607343.html
Copyright © 2011-2022 走看看