联系:QQ(5163721)
标题:Smart Flash Cache on Exadata(2)—Write through
作者:Lunar©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]
每个Exadata配备的Flash disk,这些flash disk可以创建flash grid disks来存放频繁访问的数据,也可以做成Exadata Smart Flash Cache,然后将频繁访问的数据cache在Exadata Smart Flash Cache。
缺省情况下,Create Cell命令会创建create flash cell disks,然后在这些flash celldisk上创建Exadata Smart Flash Cache。下面是使用onecommand安装过程中创建celldisk和griddisk的步骤,缺省是将flash disk创建为 Exadata Smart Flash Cache(不同版本的onecommand执行情况稍有不同):
INFO: Running /usr/local/bin/dcli -g /opt/oracle.SupportTools/onecommand/cell_group -l root "cellcli -e create celldisk all " to create all celldisks...
INFO: Running /usr/local/bin/dcli -g /opt/oracle.SupportTools/onecommand/cell_group -l root "cellcli -e create flashlog all " to create flashlog on cells...
然后创建 flashcache:
INFO: Running /usr/local/bin/dcli -g /opt/oracle.SupportTools/onecommand/cell_group -l root "cellcli -e create flashcache all " to create flashcache
当然,你可以根据情况创建为FlashDisk(而非Flash Cache):
一般情况下,我们有这样的对比数据(多次测试对比的结果和个人经验值):
Disk的IO: 168块600G的光线盘, 容量大概 100TB, 吞吐量在 25GB/sec,左右
Flash的IO: 56 PCI Cards,每块96G,容量大概 22.4TB, 吞吐量在 100GB/sec 左右
固态盘的IO: 16块256MB的 DIMM, 容量大概 4TB, 吞吐量在 200GB/sec 左右
当然具体场景要根据很多因素,比如性价比、应用场景,等等。
Flash PCI卡的作用就是消除磁盘控制器的瓶颈。根据Oracle官方的说明,Exadata上对Flash cache的使用对应用透明,且使用了比普通LRU更为优化的算法,他会自动判断哪些都像会被缓存,当然,也可以手工指定:
ALTER TABLE <表名> STORAGE (CELL_FLASH_CACHE KEEP)
ALTER INDEX <索引名> STORAGE (CELL_FLASH_CACHE KEEP)
Exadata Smart Flash Cache不能缓存的IO有如下类型:
ASM的镜像的I/O
Rman Backup、
DataPump I/O
表空间的格式化
全表扫描(表没有被Keep的情况下)
Exadata Smart Flash Cache自动缓存的IO有如下类型:
控制文件的Read/Write I/O
文件头的Read/Write I/O
Data Block与Index Block
Exadata Smart Flash Cache的读写流程(Write Through模式):
1.缓存对象时的Write动作
2.不缓存对象时的Write动作
1)写入Disk
2)写完后返回ACK
(比如全表扫描的大表等等)
3.缓存数据的Read动作
4.已缓存到Flash的数据Read动作
通过上述流程,不难发现,Flash的使用特点:
1)Flash Cache不需要考虑数据的冗余,因为所有数据都在磁盘上保留了一份
2)Flash Cache可以结合磁盘扫表一起完成查询
3)考虑一下,如果压缩率为10:1,那么X3-2的Exadata 1/4Rack包含5.6T的闪存容量,可以总共可以缓存50T的数据
待续……
Pingback 引用通告: Smart Flash Cache on Exadata(3)—Write back | Lunar