Oracle 智能闪存缓存特性最初是在 Oracle 数据库的 11gR2 版本中引入的。它作为系统全局区域 (SGA) 中缓冲区缓存的扩展。使用此功能,Oracle 数据库不会从 SGA 缓冲区缓存中删除最近最少使用 (LRU) 数据缓冲区,而是将这些 LRU 缓冲区卸载到数据库服务器上的本地闪存缓存中。
本地闪存缓存的最佳候选者是 SSD/NVMe。它们直接连接到服务器,而不是通过 SAN/NAS 设备连接。作为低延迟本地磁盘,这有助于显着加快读取工作负载。在云平台上尤其如此,在那里,您需要为具有更高预置 IOPS(每秒输入/输出操作)的磁盘收取更高的价格。
例如,在 AWS 中,每个类型为 gp2、io1 或 io2 的 EBS(弹性块存储)存储卷在它们可以提供的 IOPS 方面具有不同的存储特性。IOPS 越高,价格就越高。1 TB 的 gp2 卷每月费用约为 100 美元,可提供 3000 IOPS。gp2 卷的 IOPS 与卷相关联。如果需要更高的IOPS,则需要切换到io1。对于类似的 IOPS,它的成本几乎是 gp2 容量的三倍,但您可以选择以更高的成本扩展到更高的 IOPS。
最近,AWS 发布了 gp3 卷,它以比 gp2 卷更便宜的价格提供了 io1 卷的特性。关键是,我们可以使用 Oracle Smart Flash Cache 将一些读取 IOPS 从这些存储卷转移到本地 NVMe 磁盘。这将有助于减少使用更高 IOPS 卷类型(如 io1/io2)的需求,这些类型非常昂贵。
智能闪存缓存的一个限制是 Oracle 数据库仅在 Oracle Linux (OL) 平台上启用了此功能。尽管 OL 源自 Red Hat Enterprise Linux (RHEL),但此功能在 RHEL 和其他基于 RHEL 的 Linux 版本(如 CentOS)上被禁用。如果您尝试,您将收到以下错误消息:
[oracle@cenos7-test ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed May 5 00:11:03 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-00439: feature not enabled: Server Flash Cache
SQL>
在进一步研究以确定在 Red Hat Linux 上启用此功能是否可行之后,我发现了 2013 年的这篇旧博客文章,其中讨论了在 Red Hat 上启用此功能。对于较新版本的 Linux 和 Oracle 数据库,它所指的 rpms 和 rpm 签名已更改。在 s-tracing 和查看日志之后,我设法使相同的修复程序再次适用于 Red Hat/Centos 7 和 Oracle Database 19c。请按照以下步骤使其再次工作:
# rename rpm exe and create a wrapper around it trick oracle to think oraclelinux-release rpm is installed
[root@cenos7-test bin]# pwd
/bin
[root@cenos7-test bin]# mv rpm rpm.bin
[root@cenos7-test bin]# vi rpm
[root@cenos7-test bin]# cat rpm
#!/bin/bash
if [ "$3" = "oraclelinux-release" ]
then
echo 72f97b74ec551f03
else
exec /bin/rpm.bin "$*"
fi
[root@cenos7-test bin]# chmod +x rpm
# create below file as well
[root@cenos7-test bin]# vi /etc/oracle-release
Oracle Linux Server release 7.9
[root@cenos7-test bin]#
我打算创建一个名为 oraclelinux-release 的自定义 rpm,它在 rpm 信息输出中提到了 72f97b74ec551f03。这将消除对上述手动修复的需要。
原创文章:https://blog.pythian.com/enable-oracle-flash-cache-on-red-hat-linux/