最近一直在处理新系统的性能优化问题,这两天特地测试了下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中没有这个限制了。

oracle 12cR2 smart flash cache实测的更多相关文章

  1. Exadata Smart Flash Logging工作原理

    Exadata在V2时代,ORACLE为了进一步拓宽客户人群,除了宣称Exadata适用OLAP系统,同时也适用于OLTP系统,那怎么才能满足OLTP系统的高IOPS要求呢?于是Exadata引入了闪 ...

  2. [转帖]Oracle 12cR2使用经验

    大规模升级来临,谈谈Oracle 12cR2使用经验 随着2019年2月13日,Oracle 19c (Oracle 12.2.0.3) for Exadata 版本发布,Oracle 12cR2体系 ...

  3. oracle 11g 之 result cache

    oracle 11g 之 result cache 今天是2013-10-12,打算最近时间研究一下shared pool的相关原理以及awr报告分析.今天学习一下在oracle 11g shared ...

  4. Linux平台 Oracle 12cR2 RAC安装Part1:准备工作

    Linux平台 Oracle 12cR2 RAC安装Part1:准备工作 一.实施前期准备工作 1.1 服务器安装操作系统 1.2 Oracle安装介质 1.3 共享存储规划 1.4 网络规范分配 二 ...

  5. Linux平台 Oracle 12cR2 RAC安装Part2:GI配置

    Linux平台 Oracle 12cR2 RAC安装Part2:GI配置 三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 ...

  6. Linux平台 Oracle 12cR2 RAC安装Part3:DB安装

    Linux平台 Oracle 12cR2 RAC安装Part3:DB安装 四.DB(Database)安装 4.1 解压DB的安装包 4.2 DB软件安装 4.3 ASMCA创建磁盘组 4.4 DBC ...

  7. ORACLE性能优化- Buffer cache 的调整与优化

    Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候,将会造成更多的 free buffer waits事件. 下面将具 ...

  8. Oracle 12CR2 中alert.log出现大量的 WARNING: too many parse errors 告警

    Oracle 12CR2 中alert.log出现大量的 WARNING: too many parse errors 告警   日志如下: 2018-06-24T17:16:21.024586+08 ...

  9. Oracle数据库大量library cache: mutex X及latch: shared pool问题排查一例

    业务系统数据库夯住,数据库内大量的library cache: mutex X及latch: shared pool等待,alert日志信息如下 Tue Sep :: WARNING: inbound ...

随机推荐

  1. 大牛推荐的10本学习 Python 的好书

    Python:蛇亚目蟒科,主要包括分布于非洲及亚洲的无毒蟒蛇. Python:Richard Clabaugh拍摄的恐怖电影,2000年发行. Python:澳大利亚汽车公司. Python:英国偶发 ...

  2. iOS 开发笔记-加载/初始化

    ViewDidLoad 一般我们会在这里做界面上的初始化操作,比如往view中添加一些子视图.从数据库或者网络加载模型数据装配到子视图中 在自定义控制里 initWithFrame:一般用于添加控件, ...

  3. animation 老动画

    关于设置跳跃: using System.Collections; using System.Collections.Generic; using UnityEngine; public class ...

  4. Nginx性能调优

    [调优]Nginx性能调优   一.Nginx优化配置 1.主配置文件优化:# vi /usr/local/nginx/conf/nginx.conf------------------------- ...

  5. uvm设计分析——tlm

    tlm模块,用来在不同模块之间实现实时通信,主要基于两个定义在通信双方的port类来实现. 两个port之间,通过connect函数,来拿到双方的class指针,进而调用对方的function. 但是 ...

  6. while练习题

    # 1. 使用while循环输出1 2 3 4 5 6 8 9 10count = 1while count <= 10: if count == 7: count += 1 continue ...

  7. Yii2 Restful api设计--App接口编程

    Yii2框架写一套RESTful风格的API,对照魏曦教你学 一,入门 一.目录结构 实现一个简单地RESTful API只需用到三个文件.目录如下: frontend ├─ config │ └ m ...

  8. codeforces 980A Links and Pearls

    题意: 有珍珠和线,问能否重新安排使得相邻珍珠之间的线的数量相等. 思路: 首先,珍珠为0或者线为0,那么都满足条件: 其次,如果珍珠的个数大于线的个数,那么肯定不满足条件: 然后,如果线的个数能够被 ...

  9. c++学习笔记(二)-指针

    1. 指向数组的指针 int balance[5] = { 1000, 2, 3, 17, 50 }; int *ptr; ptr = balance; //ptr是指向数组balance的指针 // ...

  10. 功能的显著性分析——GO Enrichment Analysis

      Gene Ontology(GO)是基因功能国际标准分类体系.GO富集分析是对差异基因等按GO分类,并对分类结果进行基于离散分布的显著性分析.错判率分析.富集度分析,得到与实验目的有显著联系的.低 ...