跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11.1 可调参数参考手册 Oracle Solaris 11.1 Information Library (简体中文) |
在将 ZFS 与数据库产品结合使用之前,请注意以下事项。
如果数据库针对 I/O 使用固定磁盘块或记录大小,请相应地设置 ZFS recordsize 属性以与该大小相匹配。您可以根据每个文件系统完成上述操作,即使多个文件系统可能共享一个池。
ZFS 会对存储在磁盘上的每个块计算校验和。这将减少数据库层额外计算数据校验和的需求。如果使用 ZFS 计算校验和而不是在数据库层中计算校验和,则可在数据返回到应用程序前捕获并修复所有差异。
UFS 直接 I/O 可用于克服 UFS 的一些设计缺陷,并消除数据的双缓冲。在 ZFS 中不存在任何 UFS 设计缺陷,ZFS 使用 primarycache 和 secondarycache属性管理 ARC 中的缓冲数据。请注意,使用 secondarycache (L2ARC) 属性改善随机读取时需要启用 primarycache 属性。
将池空间的使用率保持在 90% 以下,以便维护池性能。
建议单一实例模式下的所有 Oracle 数据库版本都使用 ZFS。当 ZFS 作为 NFS 共享文件系统提供时,可以与 Oracle RAC 数据库结合使用。
要为 Oracle 数据库进行 ZFS 调优,请查看以下建议:
验证是否运行的是最新的 Solaris 发行版
从最新的 Solaris 10 或 Solaris 11 发行版开始,将 Solaris 10 9/10 发行版作为最低起点。
为 ZFS 存储池创建 LUN(如果需要)
使用存储阵列工具创建要向 ZFS 存储池提供的 LUN。或者,考虑对镜像 ZFS 存储池使用整个磁盘。有关更多信息,请参见《Oracle Solaris 11.1 管理: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 文件系统和设置特定的文件系统属性。
使用缺省记录大小 (128 KB) 为恢复、归档、撤消和临时数据库组件创建单独的文件系统。一般规则是将包含 Oracle 数据文件的文件系统设置为 recordsize = db_block_size。对于表数据和索引组件,创建一个记录大小为 8 KB 的文件系统。同时,考虑使用 primarycache 属性向数据库文件系统提供元数据高速缓存提示。有关 ZFS 文件系统属性的更多信息,请参见《Oracle Solaris 11.1 管理: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
使用缺省的 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
使用单独的日志设备为恢复日志创建一个存储池。对于恢复日志活动较多的数据库(如提交次数较多的典型的 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
为恢复池中的恢复日志创建文件系统。使用 recordsize 和 primarycache 的缺省文件系统值。
# zfs create -o mountpoint=/my_db_path/redo redopool/redo # zfs set logbias=latency redopool/redo
在归档池中为归档日志文件创建文件系统,启用压缩,使用 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
考虑调优存储阵列 I/O 队列(对于采用 HDS 或 EMC 存储阵列的系统)
ZFS 将聚合读取和写入 I/O,并在将其发送到驱动程序级别(其处理设备)之前管理 I/O 的优先级。zfs_vdev_max_pending 参数定义 ZFS 可发送到任何存储池设备的最大 I/O 数。
在传统存储环境中,ssd_max_throttle 和 sd_max_throttle 参数定义驱动程序可发送到存储器的最大并发 I/O 数。通过将 zfs_vdev_max_pending 缺省值设置为等于 [s]sd_max_throttle 参数的值,可以防止 ZFS 将 I/O 排队到其他不必要的 SD 层。
如果现有环境中的 /etc/system 文件具有 ssd:ssd_max_throttle 或 sd:sd_max_throttle,请将 zfs:zfs_vdev_max_pending 设置为相同的值。例如,如果存储阵列管理员要求以下设置:
set ssd:ssd_max_throttle=20
请按如下所示设置该参数:
set ssd:ssd_max_throttle=20 set zfs:zfs_vdev_max_pending=20
通过设置该参数,ZFS 可控制每个 LUN 队列。这意味着存储中的总待处理 I/O 数可按如下所示进行增长:
number of LUNs * ZFS_VDEV_MAX_PENDING
分配足够的内存和交换资源
通过将 zfs_arc_max 参数调整到一个较低的值,可降低 ZFS 内存消耗,但我们仍建议为数据库使用较活跃的部分置备足够的内存,以便高速缓存元数据,对于 8 KB ZFS 记录大小估计为 1.5%,对于较大或较小的记录按比例减小或增大。存放索引文件的文件系统是文件系统高速缓存的最大受益对象,因为在内存不足的情况下它将最后一个失效。zfs_arc_max 参数以字节为单位,接受十进制或十六进制值。以下示例可将该参数设置为 2 GB:
set zfs:zfs_arc_max=2147483648 or set zfs:zfs_arc_max=0x80000000
为防止应用程序因内存不足而失败,必须配置一些交换空间量。出于上述目的,将交换量配置为等于系统内存总量可始终满足需要。预期不会使用此交换空间,但需要将其作为预留区。有关增加交换空间的信息,请参见《Oracle Solaris 11.1 管理:ZFS 文件系统》中的"管理 ZFS 交换和转储设备"。
其他 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
在将 ZFS 与 MySQL 结合使用之前,请注意以下事项。
ZFS recordsize
使 ZFS recordsize 属性与存储引擎块大小匹配,以获得更好的 OLTP 性能。
InnoDB
通过已知应用程序内存资源占用(例如,用于数据库应用程序),可以限定 ARC 的大小,这样,应用程序将不需要从 ZFS 高速缓存回收其所需的内存。
为日志创建单独的池。
为 my.cnf 文件中的数据和日志设置不同的路径。
创建数据文件之前,将 InnoDB 数据文件的 ZFS recordsize 属性设置为 16K,并使用 InnoDB 日志的缺省 recordsize 值。