建议单一实例模式下的所有 Oracle 数据库版本都使用 ZFS。当 ZFS 作为 NFS 共享文件系统提供时,可以与 Oracle RAC 数据库结合使用。
要为 Oracle 数据库进行 ZFS 调优,请查看以下建议:
验证是否运行的是最新的 Oracle Solaris 发行版
从最新的 Oracle Solaris 10 或 Oracle Solaris 11 发行版开始,将 Solaris 10 9/10 发行版作为最低起点。
为 ZFS 存储池创建 LUN(如果需要)
使用存储阵列工具创建要向 ZFS 存储池提供的 LUN。或者,考虑对镜像 ZFS 存储池使用整个磁盘。有关更多信息,请参见在 Oracle Solaris 11.2 中管理 ZFS 文件系统 中的第 3 章 管理 Oracle Solaris ZFS 存储池。
为表、索引、撤消和临时数据的数据文件创建存储池
考虑创建一个镜像存储池以提供更高级别的数据冗余。例如:
# zpool status dbpool pool: dbpool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM dbpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C500335F95E3d0 ONLINE 0 0 0 c0t5000C500335F907Fd0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c0t5000C500335BD117d0 ONLINE 0 0 0 c0t5000C500335DC60Fd0 ONLINE 0 0 0 errors: No known data errors
对于恢复日志活动较多的数据库(如提交次数较多的典型的 OLTP 数据库),请对单独日志设备使用单独 LUN。
为归档日志创建存储池
如果可用,系统的内部磁盘即可处理此类负载。archivelog 文件系统也可以是 dbpool 中的文件系统。
# zpool create archivepool c0t5000C500335E106Bd0
使用以下原则创建 ZFS 文件系统和设置特定的文件系统属性
使用以下记录大小为重做、归档、撤消和临时数据库组件创建单独的文件系统:
Oracle Solaris 11 和更早的发行版-128K
Oracle Solaris 11.1 和更晚的发行版-1M
一般规则是将包含 Oracle 数据文件的文件系统设置为 recordsize = db_block_size。对于表数据和索引组件,创建一个记录大小为 8 KB 的文件系统。同时,考虑使用 primarycache 属性向数据库文件系统提供元数据高速缓存提示。有关 ZFS 文件系统属性的更多信息,请参见在 Oracle Solaris 11.2 中管理 ZFS 文件系统 中的介绍 ZFS 属性。
为表数据文件和索引数据文件创建文件系统,其中 recordsize 为 8 KB。使用 primarycache 的缺省值。
# zfs create -o recordsize=8k -o mountpoint=/my_db_path/index dbpool/index # zfs set logbias=throughput dbpool/index # zfs get primarycache,recordsize,logbias dbpool/index NAME PROPERTY VALUE SOURCE dbpool/index primarycache all default dbpool/index recordsize 8K local dbpool/index logbias throughput local
为临时表空间和撤消表空间创建文件系统
对于 Oracle Solaris 11 及更早的发行版,请使用缺省的 recordsize 和 primarycache 值。
# zfs create -o mountpoint=/my_db_path/temp dbpool/temp # zfs set logbias=throughput dbpool/temp # zfs create -o mountpoint=/my_db_path/undo dbpool/undo # zfs set logbias=throughput dbpool/undo
对于 Oracle Solaris 11.1 及更晚的发行版,请使用以下 recordsize 值和缺省的 primarycache 值。
# zfs create -o recordsize=1m -o mountpoint=/my_db_path/temp dbpool/temp # zfs set logbias=throughput dbpool/temp # zfs create -o recordsize=1m -o mountpoint=/my_db_path/undo dbpool/undo # zfs set logbias=throughput dbpool/undo
使用单独的日志设备为恢复日志创建一个存储池。对于恢复日志活动较多的数据库(如提交次数较多的典型的 OLTP 数据库),请使用单独的日志设备 LUN。
将磁盘分区为两个分片,小分片 s0,大小范围介于 64 到 150 MB 之间,用于单独的日志设备。分片 s1 包含剩余的磁盘空间,用于恢复日志。
# zpool create redopool c0t50015179594B6F11d0s1 log c0t50015179594B6F11d0s0 # zpool status redopool pool: redopool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM redopool ONLINE 0 0 0 c0t50015179594B6F11d0s1 ONLINE 0 0 0 logs c0t50015179594B6F11d0s0 ONLINE 0 0 0 errors: No known data errors
为恢复池中的恢复日志创建文件系统。
对于 Oracle Solaris 11 及更早的发行版,请使用 recordsize 和 primarycache 的缺省文件系统值。
# zfs create -o mountpoint=/my_db_path/redo redopool/redo # zfs set logbias=latency redopool/redo
对于 Solaris 11.1 及更早的发行版,请使用以下 recordsize 和缺省 primarycache 值。
# zfs create -o recordsize=1m -o mountpoint=/my_db_path/redo redopool/redo # zfs set logbias=latency redopool/redo
为归档池中的归档日志文件创建文件系统。
对于 Oracle Solaris 11 和更早的发行版,使用 recordsize 的缺省值设置压缩,并将 primarycache 设置为 metadata
# zfs create -o compression=on -o primarycache=metadata -o mountpoint= /my_db_admin_path/archive archivepool/archive # zfs get primarycache,recordsize,compressratio,compression,available, used,quota archivepool/archive NAME PROPERTY VALUE SOURCE archivepool/archive primarycache metadata local archivepool/archive recordsize 128K default archivepool/archive compressratio 1.32x - archivepool/archive compression on local archivepool/archive available 40.0G - archivepool/archive used 10.0G - archivepool/archive quota 50G local
对于 Solaris 11.1 及更晚的发行版-启用压缩,将 primarycache 设置为元数据并使用以下 recordsize 值:
# zfs create -o compression=on –o recordsize=1M \ -o mountpoint=/my_db_admin_path/archive archivepool/archive # zfs get primarycache,recordsize,compressratio,compression,\ available,used,quota archivepool/archive NAME PROPERTY VALUE SOURCE archivepool/archive primarycache all local archivepool/archive recordsize 1M local archivepool/archive compressratio 1.32x - archivepool/archive compression on local archivepool/archive available 40.0G - archivepool/archive used 10.0G - archivepool/archive quota 50G local
请考虑设置配额,使数据库文件系统具有足够的磁盘空间来运行,并生成数据库文件系统的快照。此外,在伪文件系统上设置一个保留,以便保留 10-20% 的池空间来保持池性能。
# zfs set reservation=20gb dbpool/freespace
有关存储阵列和内存资源调优的其他信息,请参阅白皮书 http://www.oracle.com/technetwork/server-storage/solaris/config-solaris-zfs-wp-167894.pdf。
其他 Oracle 数据库配置建议
以下白皮书中的“Configuring Your Oracle Database on ZFS File Systems”:
http://www.oracle.com/technetwork/server-storage/solaris/config-solaris-zfs-wp-167894.pdf
《Dynamic SGA Tuning of Oracle Database on Oracle Solaris with DISM》白皮书:
Oracle 11g 安装指南系列
《Oracle Database Quick Installation Guide 11g Release 2 (11.2) for Oracle Solaris on SPARC (64-Bit)》
http://docs.oracle.com/cd/E11882_01/install.112/e24349/toc.htm
《Oracle Database Quick Installation Guide 11g Release 2 (11.2) for Oracle Solaris on x86-64 (64-Bit)》
http://docs.oracle.com/cd/E11882_01/install.112/e24351/toc.htm