Oracle Smart Flash 新特性性能测试说明
1.1测试之前的工作
1.1.1 Oracle Smart Cache简介
在Oracle11gR2及以后版本,Oracle提供了设置FLASH CACHE的功能,提升数据访问性能,该特性尤其适用于db file <sequential/ scattered/ paralle> read 等相关event比较严重的系统中。目前FLASH CACHE功能只能兼容Oracle enterprise linux、oracle solaris版本系统。
1.1.2 Oacle Smart Cache测试方向
Smart Cache允许缓存的设备可以是ASM裸设备或者闪存卡SSD做成文件系统。本文中主要采用单机实例和裸设备缓存位置的测试方法,规定一定的测试参数制造压力,比较其在启用/未启用特性下的性能表现。
1.1.3 Oacle Smart Cache 测试环境
1.1.4 Oracle Smart Cache测试实现办法
1.1.4.1 准备工作
- 由于Oracle的Smart flash cache功能 在Oracle enterprise linux 平台上对oracle database软件打了闪存补丁后可以使用,本次采用的系统版本为Oracle enterprise linux 6.9。在Oracle 11G中Smart flash cache初次被引入,它所支持的FLASH_CACHE_FILE闪存设备仅为一个,12C中最大支持16个。
- 为模拟实验中硬盘性能差异性,我们将采用NFS存储作为一般数据文件存放位置。准备俩台虚拟机如下。
- 主机1使用本地IDE+SSD+固态驱动器盘作为缓存设备,实验中表单数据存放在NFS存储中,俩块硬盘经过简单的DD测试性能表现如下。
[root@ole69 ~]# dd if=/dev/zero of=/dev/raw/raw1 bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 3.40023 s, 316 MB/s
[oracle@ole69 ~]$ dd if=/dev/zero of=/oradata_nfs/1 bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 18.3629 s, 58.5 MB/s
[oracle@ole69 ~]$ dd if=/dev/zero of=/dev/sdc bs=1M count=1024
1.4.1.2 设置数据库相关参数
db_flash_cache_file=‘/dev/raw/raw1’ scope=spfile;
db_flash_cache_size=2g scope=spfile;
设置Smart Cache设备并指定大小。
create tablespace nfs_test datafile'/oradata_nfs/nfs_test.dbf' size 1g ;
alter user ckpt_lu default tablespace nfs_test;
create table ckpt_lu.test_table as select * from dba_objects;
创建测试表存放在NFS_TEST表空间上,创建表单数据量为1600M。
alter system set event='10949 trace name context forever, level 1' scope=spfile;
alter system set "_very_large_object_threshold"=1600 scope=spfile;
关闭直接路径读,设置_very_large_object_threshold参数为表单大小。
alter system set sga_max_target=800m scope=spfile;
alter system set sga_target=800m scope=spfile;
设置SGA大小为表单的一半,制造系统压力。
1.1.5 Oracle Smart Cache 测试关键点
- 缓存设备使用SSD+IDE高速盘,数据盘采用NFS存储,经简单测试写入性能相差6倍。
- 表单数据存放入NFS存储上,表单数据定为1600M,内存设置为表单数据量一半。
- 关闭直接路劲读,本次测试主要关注Smart Cache作为Buffer Cache二级缓存性能。
- 执行的测试SQL需要执行三次及三次以上,让ORACLE缓存相关热块。
1.1.6 Oracle Smart Cache 测试标准点
1.2 测试过程
1.2.1 Oracle Smart Cache 开启
SQL>analyze table ckpt_lu.test_table compute statistics;
先简单收集统计信息
06:30:56 SQL> conn ckpt_lu/ckpt_lu
Connected.
06:31:09 SQL> select sum(bytes/1024/1024) m from user_extents where segment_name='TEST_TABLE';
M
----------
1600
Elapsed: 00:00:00.37
06:31:28 SQL> select name,value from v$sysstat where name in ('physical read flash cache hits','physical reads','consistent gets','db block gets','flash cache insert');
NAME VALUE
---------------------------------------------------------------- ----------
db block gets 388
consistent gets 145703
physical reads 4754
physical read flash cache hits 0
Elapsed: 00:00:00.02
06:31:46 SQL> set time on
06:32:08 SQL> set timing on
06:32:08 SQL> select /*+ monitor */ count(*) as FirstWithSc from test_table;
FIRSTWITHSC
-----------
5853184
Elapsed: 00:02:04.36
06:33:05 SQL> select /*+ monitor */ count(*) as SecondWithSc from test_table;
SECONDWITHSC
------------
5853184
Elapsed: 00:00:43.06
06:35:22 SQL> select /*+ monitor */ count(*) as ThirdWithSc from test_table;
THIRDWITHSC
-----------
5853184
Elapsed: 00:00:16.17
06:36:17 SQL> select /*+ monitor */ count(*) as FouthWithSc from test_table;
FOUTHWITHSC
-----------
5853184
Elapsed: 00:00:16.19
06:36:59 SQL> select name,value from v$sysstat where name in ('physical read flash cache hits','physical reads','consistent gets','db block gets','flash cache insert');
NAME VALUE
---------------------------------------------------------------- ----------
db block gets 830
consistent gets 974792
physical reads 758834
physical read flash cache hits 547581
Elapsed: 00:00:00.01
执行压力脚本,并设置Sql Monitor监控
7nn5sg97fhkhk select /*+ monitor */ count(*) as FirstWithSc from test_table
b2hdkmfcscn3t select /*+ monitor */ count(*) as ThirdWithSc from test_table
40s8yqbkh8237 select /*+ monitor */ count(*) as FouthWithSc from test_table
8tghy100mctdv select /*+ monitor */ count(*) as SecondWithSc from test_table
收集四次SQL执行计划。
块缓存其中前后对比-击中大量块
1.2.2 Oracle Smart Cache 关闭
06:42:04 SQL> conn camdunki/camdunki
Connected.
06:42:48 SQL> select sum(bytes/1024/1024) m from user_extents where segment_name='TEST_TABLE';
M
----------
1600
Elapsed: 00:00:00.45
06:42:55 SQL> set time on
06:43:52 SQL> set timing on
06:43:52 SQL> select /*+ monitor */ count(*) as First from test_table;
FIRST
----------
5853184
Elapsed: 00:00:50.01
06:44:43 SQL> select /*+ monitor */ count(*) as Second from test_table;
SECOND
----------
5853184
Elapsed: 00:00:46.66
06:45:44 SQL> select /*+ monitor */ count(*) as Third from test_table;
THIRD
----------
5853184
Elapsed: 00:00:42.97
06:46:37 SQL> select /*+ monitor */ count(*) as Fouth from test_table;
FOUTH
----------
5853184
Elapsed: 00:00:45.04
06:47:37 SQL> select name,value from v$sysstat where name in ('physical read flash cache hits','physical reads','consistent gets','db block gets','flash cache insert');
NAME VALUE
---------------------------------------------------------------- ----------
db block gets 699
consistent gets 974502
physical reads 749431
physical read flash cache hits 0
Elapsed: 00:00:00.01
执行压力脚本,并设置Sql Monitor监控
7nn5sg97fhkhk select /*+ monitor */ count(*) as First from test_table;
b2hdkmfcscn3t select /*+ monitor */ count(*) as Second from test_table;
40s8yqbkh8237 select /*+ monitor */ count(*) as Third from test_table;
8tghy100mctdv select /*+ monitor */ count(*) as Fouth from test_table;
收集四次SQL执行计划。
块缓存击中量-不变
1.3 测试结果数据整合
1.3.1 Sql语句执行时间
可以发现通过以上测试俩者之间时间差距还是比较大的
**
开启Smart Cache后Sql语句第一次执行耗时较久。第二次部分热块被Cache到二级缓存区上,时间有所缩短,第三次大部分块被Cache,时间缩短了大约7倍。
**
1.3.2 Sql语句执行效率
**
从等待事件上看,俩种情况下第一次Sql等待事件差不多,随着执行次数增加,在开启特性的情况下,热块逐步被Cache到二级缓存中,所对应的等待事件也慢慢降低,语句更加高效一点,没有二级缓存的情况下,Sql语句一直处于低效运行状态。
**
1.3.3 系统资源情况
**
如图,该图显示测试过程中CPU Wait on OI 比率,在6:30之前,创建测试表需要对NFS存储进行频繁的读写,CPU Wait on IO比率居高不下。6:30至6:42分开启Oracle Smart Cache特性进行Sql语句测试,WAIT ON IO暂时下降,Sdc设备正是本地设置的二级缓存盘,这个时候SQL所需要的大部分的数据块在本地二级缓存上可以得到,CPU WAIT ON IO恢复正常值。等到关闭Oracle Smart Cache特性进行Sql语句测试时,Sql所需要的块还是从NFS存储上读取,导致CPU Wait on OI再次飙升。
**