Exadata Smart Flash Logging工作原理

Exadata在V2时代,ORACLE为了进一步拓宽客户人群,除了宣称Exadata适用OLAP系统,同时也适用于OLTP系统,那怎么才能满足OLTP系统的高IOPS要求呢?于是Exadata引入了闪存卡,但当时的闪存卡一是价格昂贵,二是存储空间较小,才几十G的大小,如何充分利用这些闪存卡就成了一项艺术,最开始是将这些闪存卡创建成flashcache,但发现flashcache对数据文件的读取有非常大的帮助,此时日志文件写性能问题开始成为Exadata做为OLTP架构的障碍。

于是,从存储软件版本11.2.2.4开始,Exadata引入了Exadata Smart Flash Logging的新特性,该特性的主要优化思想是从存储节点的闪存卡中开辟出一小块区域作为redo log的辅助重做日志目的地,当接收到写redo log的请求时,Exadata允许LGWR进程将redo同时并行写入flash log 和 disk controller 中的在线日志文件, 只要在flash log 和 disk controller中的在线日志文件 有任意一个率先写完成就会通知RDBMS数据库继续工作, 该特性着眼于改善了Exadata对Redo写入的响应时间和吞吐量。

需要注意的是,flashlog并不是永久的redo日志存放目的地,它仅仅是一个临时的redo日志存放地,目的是为了提供快速的重做日志写的响应时间,以改善整个数据库的性能。Flashlog会一直存放着这些redo日志,直到这些redo日志被安全地写回到了在线日志文件中。

Smart Flash Logging处理所有的实例崩溃和恢复场景,而不需要数据库管理员进行任何额外或特殊干预,像传统数据库从redo log进行实例恢复一样,从最终用户的角度来看,临时在flashlog中的redo缓存如果帮助实例恢复,是一个完全透明的过程。

如下图所示,Smart Flash Logging特性的工作原理:

 

第1步:

数据库向Exadata单元发出重做日志写入请求

第2步:

CELLSRV同时向Flashlog和磁盘发出写入请求

第3步:

一旦磁盘写入或闪存写入的完成更快,CELLSRV就会确认重做日志写入数据库完成,继续后续工作。

 

注意:

重做日志永久存储在磁盘上,并且只能临时存储在闪存中。

 

从Smart Flash Logging的工作原理可以看出,Smart Flash Logging特性可以防止偶尔缓慢的硬盘,或者偶尔缓慢的闪存盘给数据库带来的性能问题,但二者不能出现同时缓慢,但同时出现缓慢也是一个极其罕见的事件。如下图所示,为Smart Flash Logging特性关闭和开启的日志文件写性能响应对比。

 

Flashlog空间,有如下特点:

(1)、在一组闪存磁盘中均匀分配(默认为512MB。在X2-2环境中,flashlog分布为16个闪存磁盘上的32MB块;而后期的X5-2,则flashlog是分布在4块闪存磁盘上)。

(2)、像一个巨大的循环缓冲区(每个闪存盘一个)。

(3)、在将相应的重做数据写入磁盘后重新使用。

(4)、flashlog空间不是日志文件的镜像(mirror),它并不是日志文件的完全拷贝,它只是临时地存放最新的redo log 条目,这种方式需要的flashlog空间会比较小,可以剩余更多的闪存空间给flashcache使用。

在默认情况下,会从flash闪存卡中分配512 MB的空间来做为Smart Flash Logging。相对于在每个Exadata存储节点 384 gb(注意:X2-2的每个存储节点闪存空间为384GB,而后面几代Exadata的闪存空间将会成倍或几十倍地增长)的闪存空间来说,这是一个微不足道的投入,但会对数据库带来巨大的性能提升。

对于大多数情况下,每个存储节点默认分配的512M闪存空间就已经足够了,但对于一些极少数的系统,例如:数据库的redo产生率非常高,或者许多数据库实例整合到同一台Exadata上 等等情况,此时512MB的闪存空间可能不足以支撑redo write,这种情况下,需要手动修改flashlog的大小。

除此之外,对于一台整合后的Exadata,Exadata的IO资源器(IORM)有所增强,它足够控制不同数据库的Smart Flash Logging特性是否关闭或开启,将flashlog的宝贵空间留给那些非常非常重要的核心生产库使用,例如:

CellCLI> ALTER IORMPLAN -

dbPlan=( -

(name=prod, flashcache=on, flashLog=on), -

(name=dw, flashcache=on, flashLog=on), -

(name=prod_test, flashcache=off, flashLog=off), -

(name=prod_dev, flashcache=off, flashLog=off) -

(name=other, flashcache=on, flashLog=on))

 

--列出各个cell节点中的flashlog:

[root@sddxdb01 onecommand]# dcli -g ./cell_group -l root cellcli -e list flashlog attributes name,size,status

sddxcel01: sddxcel01_FLASHLOG 512M normal

sddxcel02: sddxcel02_FLASHLOG 512M normal

sddxcel03: sddxcel03_FLASHLOG 512M normal

[root@sddxdb01 onecommand]#

 

--删除cell节点1的flashlog:

[root@sddxcel01 ~]# cellcli -e drop flashlog all

Flash log sddxcel01_FLASHLOG successfully dropped

[root@sddxcel01 ~]#

[root@sddxdb01 onecommand]# dcli -g ./cell_group -l root cellcli -e list flashlog attributes name,size,status

sddxcel02: sddxcel02_FLASHLOG 512M normal

sddxcel03: sddxcel03_FLASHLOG 512M normal

[root@sddxdb01 onecommand]#

 

--如果打算创建flashcache和flashlog,则必须先创建flashlog,然后再创建flashcache。如果先创建flashcache,则会将全部空间使用光。

[root@sddxcel01 ~]# cellcli -e create flashlog all

Flash log sddxcel01_FLASHLOG successfully created

[root@sddxcel01 ~]#

[root@sddxcel01 ~]# cellcli -e create flashcache all

Flash cache sddxcel01_FLASHCACHE successfully created

 

--查看flashlog详情:

[root@dm02celadm01 ~]# cellcli -e list flashlog detail

name: dm02celadm01_FLASHLOG

cellDisk: FD_00_dm02celadm01,FD_01_dm02celadm01,FD_02_dm02celadm01,FD_03_dm02celadm01

creationTime: 2016-10-19T18:28:02+08:00

degradedCelldisks:

effectiveSize: 512M

efficiency: 99.99785580691346

id: ea422489-a82e-4fa7-877a-16b1c57ee63c

size: 512M

status: normal

[root@dm02celadm01 ~]#

 

--创建大小为1GB的flashlog:

[root@dm02celadm01 ~]# cellcli -e CREATE FLASHLOG ALL SIZE=1G

 

关闭Smart Flash Logging特性:

Smart Flash Logging特性可以从存储软件层面,或从数据库层面进行关闭:

(1)、数据库层面:

数据库版本从11.2.0.2BP9之后,就默认自动地开启了Smart Flash Logging特性,但可以通过修改数据库隐含参数的方式来手动关闭Smart Flash Logging特性:

11.2.0.2版本:

Alter system set "_third_spare_parameter"=0 scope=spfile sid='*';

 

11.2.0.3及之后版本:

Alter system set "_enable_flash_logging"=false scope=spfile sid='*';

 

(2)、存储软件层面:

1、直接删除flashlog,但这种方式将导致整个Exadata上的所有数据库都无法使用Smart Flash Logging特性。

2、使用IORM来控制Smart Flash Logging特性的开启或关闭。

 

说明:

对于绝大部分的系统而言,强烈建议开启Smart Flash Logging特性,只有那种只读的数据库或测试数据库,才可以尝试关闭Smart Flash Logging特性。

posted @ 2017-03-08 00:42  石云华  阅读(546)  评论(0编辑  收藏  举报