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特性。
Exadata Smart Flash Logging工作原理的更多相关文章
- Nand Flash 控制器工作原理
对 Nand Flash 存储芯片进行操作, 必须通过 Nand Flash 控制器的专用寄存器才能完成.所以,不能对 Nand Flash 进行总线操作.而 Nand Flash 的写操作也必须块方 ...
- Nand flash 芯片工作原理
Nand flash 芯片型号为 Samsung K9F1208U0B,数据存储容量为 64MB,采用块页式存储管理.8 个 I/O 引脚充当数据.地址.命令的复用端口. 芯片内部存储布局及存储操作特 ...
- PHP底层工作原理
最近搭建服务器,突然感觉lamp之间到底是怎么工作的,或者是怎么联系起来?平时只是写程序,重来没有思考过他们之间的工作原理: PHP底层工作原理 图1 php结构 从图上可以看出,php从下到上是一个 ...
- SPI协议及工作原理分析
说明.文章摘自:SPI协议及其工作原理分析 http://blog.csdn.net/skyflying2012/article/details/11710801 一.概述. SPI, Serial ...
- PHP工作原理
文章一 :http://blog.csdn.net/21aspnet/article/details/6973405 简介 先看看下面这个过程: 我们从未手动开启过PHP的相关进程,它是随着Apach ...
- Orchard工作原理
概述 本文翻译仅供学习之用,了解Orchard工作原理设计思想.技术点及关键词,如有缺漏请不吝指正.鉴于能力有限定有诸多曲解或不完整的地方,请海涵.不定时完善整理. CMS不像常规的web程序,它更像 ...
- Android系统Recovery工作原理之使用update.zip升级过程分析(一)
通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是Android系统的启动 ...
- Java Web程序工作原理
Web开发的最重要的基本功能是HTTP:Java Web开发的最重要的基本功是Servlet Specification.HTTP和Servlet Specitication对于Web Server和 ...
- camera理论基础和工作原理
写在前面的话,本文是因为工作中需要编写摄像头程序,因为之前没有做过这类产品,所以网上搜索的资料,先整理如下,主要参考文章如下,如果有侵权,请联系我:另外,转载请注明出处.本文不一定全部正确,如果发现错 ...
随机推荐
- Java Modifiers
Private means this could only be seen within this class. Protected means "package private" ...
- 【Google】循环字符串里面的独立子串
转载自九章算法(地址) 题目: 假设s是一个无限循环的字符串”abcdefghijklmnopqrstuvwxyz”,s就是一个”...zabcdefghijklmnopqrstuvwxyza...” ...
- Poj 1860 Currency Exchange(Bellman-Ford,SPFA解单源最短路径问题)
一.题意 有多个货币交易点,每个只能互换两种货币,兑换的汇率不同,并收取相应的手续费.有N种货币,假定你拥有第S中,数量为V,有M个兑换点.问你能不能通过兑换操作使你最后拥有的S币比起始的时候多. 二 ...
- linux下 vi 命令大全
引用:http://www.cnblogs.com/88999660/articles/1581524.html 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi ...
- Python:正则表达式(三)*、+、?的用法
一.功能*——表示匹配前面的字符0个或多个:+——表示前面的字符1个或多个:?——(1)放在其他字符后面:表示匹配0次或1次: (2)放在*.+后面:表示匹配尽可能少的字符 二.例 字符串fooooo ...
- varnish安装和配置
实验环境:CentOS7 Varnish是高性能开源的反向代理服务器和HTTP缓存服务器. #varnish服务器:172.16.252.142 [root@varnish localhost]#yu ...
- Python-连接Redis并操作
首先开启redis的外连 sch01ar@ubuntu:~$ sudo vim /etc/redis/redis.conf 把bind 127.0.0.1这行注释掉 然后重启redis sudo /e ...
- Java探索之旅(17)——多线程(1)
1.多线程 1.1线程 线程是程序运行的基本执行单元.指的是一段相对独立的代码,执行指定的计算或操作.多操作系统执行一个程序时会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被 ...
- LDA与最小二乘法的关系及其变种详解
1 LDA与最小二乘法的关联 对于二值分类问题,令人惊奇的是最小二乘法和LDA分析是一致的.回顾之前的线性回归,给定N个d维特征的训练样例(i从1到N),每个对应一个类标签.我们之前令y=0表示一类, ...
- 微信 python搭建服务器
1. 搭建服务以web.py网络框,python,腾讯云服务器为例介绍. 1)安装/更新需要用到的软件 安装python2.7版本以上 安装web.py pip install web.py sudo ...