chengliangliang
作者chengliangliang·2021-03-09 09:35
系统架构师·某大型保险

某保险企业基于华为OceanStor面向Oracle数据库实践

字数 8797阅读 6246评论 0赞 3

1 概述

1.1 项目背景

因我保险企业数据库技术的广泛使用,企业信息系统产生大量的数据,数据库的读写、查询等操作受到了存储性能的制约,对存储的性能要求逐渐提高,如IOPS要大于300000、磁盘响应时间小于5毫秒。老旧存储设备在性能方面已经无法满足现有业务需求,因此需要替换华为高端全闪存储提供存储服务。

OceanStor F V5 系列存储系统是华为技术有限公司(以下简称华为)根据存储产品应用现状和存储技术未来发展趋势,推出的新一代中高端全闪存存储产品,完全能够满足本公司对海量数据存储、高速数据存取、高可用性、高利用率、绿色环保和易于使用的要求。

结合我公司实际使用经验,接下来主要介绍下生产环境基于华为 OceanStor F V5 存储系统,部署 Oracle 12c RAC 数据库的生产配置过程,供有需要的同行朋友们参考借鉴。

1.2 业务场景

我司数据库业务同样分为两类:联机事务处理 OLTP(On-line Transaction Processing)和联机分析处理 OLAP(On-line Analytical Processing)。其中,OLTP 是传统的关系型数据库的主要应用,主要是基本、日常的事务处理,如证券交易、银行交易等;OLAP 是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,提供直观易懂的查询结果给决策人员,以便准确掌握企业的经营状况,从而制定正确的方案,如数据仓库系统。

Oracle 数据库作为当前生产环境中最常用的数据库,也是存储设备的最重要应用场景,将Oracle 数据库 OLAP 应用部署在华为 OceanStor F V5 系列存储系统上,可以保障业务的可靠性,有效提升数据库查询分析的性能,为企业的发展做出正确的决策。

2 华为技术与产品

2.1 OceanStor F V5 产品介绍

华为 OceanStor F V5 全闪存存储(下文简称 F V5 系列存储)是面向企业级应用的新一代融合存储产品。在功能、性能、效率、可靠性和易用性上都达到业界领先水平,很好的满足了大型数据库 OLTP/OLAP、文件共享、云计算等各种应用下的数据存储需求.

图2-1 华为 OceanStore V5 融合存储

  • OceanStor 5300F/5500F/5600F/5800F V5 全闪存存储系统
  • OceanStor 6800F V5 高端全闪存存储系统
  • OceanStor 18500F/18800F V5 高端全闪存存储系统

3 Oracle 数据库架构介绍

Oracle 数据库是应用最为广泛的关系型数据库之一, Oracle 数据库是与存储系统关系最为密切的应用。Oracle 12c聚焦与多租户相关的组件和特性:RAC(Real Application Cluster)、ASM(Automatic Storage Management)、多租户、数据文

Oracle 系统架构

如上图所示数据库使用包含两部分,SGA(System Global Area)和 PGA(Program Global Area),其中 SGA 用于存放系统信息和页面缓存,而 PGA 用于存放会话信息。

SGA 主要包含如下几部分:

  • Buffer Cache:用于缓存数据块
  • Redo Log Buffer:用于缓存日志记录,是一个循环数组
  • Share Pool:用于缓存数据字典、共享 SQL 信息等

Oracle 的数据文件包含如下几种类型:

  • Control File:记录数据库的结构、参数和其他数据文件的位置。
  • Data File:存放用户数据和临时数据。
  • Online Log:存放数据块更改记录,由若干个日志组组成,日志组内的文件互为镜像,某个日志组写满之后切换到下一个日志组继续写入,最后一个日志组写满之后切换到第一个日志组。
  • Archive Log:当数据库处于归档模式时,数据库将写满的日志组拷贝到归档区,用于数据异常时恢复。

4 生产环境架构规划

本章将主要介绍我司生产环境基于华为 OceanStor F V5 存储系统,部署 Oracle 12c RAC 数据库的生产配置过程。包括组网、存储配置、主机设置等。

4.1 SAN 组网

由于Oracle 数据库承载着企业核心业务系统,为保证业务连续性,使用 Oracle RAC 集群,组网使用冗余架构。如下图所示,SAN(Storage Area Network)组网

中,使用两个物理上独立的交换平面(每个交换平面包括一个交换机或多个相互级联的交换机),每个数据库节点与两个交换平面相连,每个存储控制器和两个交换平面相连。

图4-1 Oracle RAC 组网示意图

4.1.1 划分 Zone 或 vLAN

通过划分 Zone 或 vLAN,可以实现如下目的:

  • 在生产 IT 系统中,一台高端存储承载多个业务系统,通过划分 Zone 或 vLAN,避免各业务系统相互影响。
  • 主机路径数过多,会增加系统管理的复杂度,也会增加运维过程中网络变更的难度,通过划分 Zone 或 vLAN,可以基础IT 基础架构的灵活性。
    划分 Zone 或 vLAN 的总体策略是保证双交换组网,即在每个交换平面上,每个数据库节点与每个存储控制器均有逻辑通道。按照下图方式划分,保证每个 Zone 或VLAN 仅为一个主机端口和一个存储端口的对应。

图4-3 Zone 或 vLAN 的划分

4.2 存储配置

在使用 OceanStor F V5 存储之前,我们首先分析清楚了业务性能和容量需求,做好存储系统的硬盘数规划,从而降低运维风险。 在引入 RAID2.0+技术之后,根据业务性能和容量需求评估硬盘数变得非常困难,华为 UniSTAR eDesigner 方案设计工具中,包含两款针对存储系统的评估工具,使用这两款工具为 Oracle 数据库规划硬盘数。

  • 产品能力评估:根据特定的存储配置,评估存储系统可提供的性能和容量
  • 存储配置向导:根据特定的业务需求,评估存储型号和硬盘配置

4.2.1 硬盘域

硬盘域(Disk Domain)即多个硬盘的组合,将硬盘整合并预留热备容量后统一向存储池提供存储资源。

  • 存储可以配置一个或多个硬盘域。
  • 一个硬盘域上可以创建多个存储池(Storage Pool)。
  • 不同硬盘域之间是完全隔离的,包括故障域、性能和存储资源等。
  • 一个硬盘域的硬盘都在一个硬盘框内。

硬盘域的热备容量比例与热备策略和硬盘的类型和数量相关,该比例关系由存储系统根据可靠性工程方法自动维护。若需要规划存储容量和性能,使用华为 UniSTAR eDesigner 工具进行配置。

热备策略的选择跟上层应用系统的类型有关。

  • OLTP 业务类型,大量用户在线处理业务,I/O 多为随机小 I/O(4K/8K),建议选择高热备策略。
  • OLAP 业务类型,少量用户在线执行复杂的分析查询,I/O 为多路顺序大 I/O(上百 KB),写比例低,建议选择低热备策略。

OceanStor F V5 系列存储系统的硬盘域可以包含多达上千块硬盘,但基于性能和可靠性考虑,硬盘域每存储层的硬盘数不超过 100 个。

4.2.2 存储池

存储池(Storage Pool),是存放存储空间资源的容器,创建于硬盘域内,可以从硬盘域上动态分配资源,并定义每个存储层级的“RAID 级别”。

OceanStor F V5 系列存储支持 RAID6、RAID10、RAID5、RAID3、RAID50、RAID1六种 RAID 级别,最常用的 RAID 级别为 RAID6、RAID10、RAID5。按如下策略为 Oracle 数据库配置 RAID 级别。

  • 核心数据库业务等可靠性要求高的场景,选择 RAID6。
  • 容量的重要性高于可靠性时,选择 RAID5。
  • 如果 Oracle OLAP 数据库配置了“容量层”,将容量层配置为 RAID6。

创建存储池时,允许设置容量分配比的告警阈值,默认是 80(百分比)。在使用 Thin LUN、快照、远程复制、克隆等增值业务时,容量告警尤其重要,可以根据业务数据量增长的速度设置合理的告警阈值,避免业务因为存储池容量不足而造成服务中断。

4.2.3 多租户

多租户是存储系统的一种特性。使用多租户特性可以在一套物理存储系统中创建多个虚拟存储系统,让多个租户既能共享相同的存储硬件资源,又不影响相互的数据安全性和隐私。借助该租户特性,可以在多协议统一存储架构中实现更加灵活、更易于管理、部署成本更低的共享存储。 启用多租户特性,在 Oracle 租户下创建 LUN。

4.2.4 LUN

为 Oracle 数据库创建 LUN 时,为了能使存储系统的性能达到最优状态,需要根据实际的数据存储情况,为 LUN 选择合适的 LUN 策略。主要参数的推荐配置策略如下。

  • 归属控制器(owner_controller):在数据库负载较高时,建议将 LUN 平均分配到多个控制器上,以保证控制器的负载均衡。
  • 预取策略(prefetch_policy):提供 4 种预取策略(不预取、固定预取、可变预取、智能预取)。对于 Oracle OLAP 数据库场景,其负载特征为多路顺序大 I/O,建议并发量高时设置“不预取”,并发量低时设置“智能预取”。
  • 重删压缩(Deduplication and Compression):使用 OceanStor F V5 存储时开启重删和压缩特性,通过删除重复数据并对数据进行压缩存储,减少数据的实际占用空间和数据写入次数。V5 默认的重删粒度为 8KB,Oracle 数据库的每个 8KB 页面都包含具有唯一字段的标头,所以开启重删并不会减少数据的存储空间。只开启压缩,关闭重删。
  • LUN 类型(lun_type):提供“厚置备(Thick)”和“精简置备(Thin)”两种类型,根据性能和容量的重要性进行权衡,如果性能更为关键(如核心生产系统),设置为“Thick”,如果容量更为关键(如测试开发系统),设置为“Thin”。
  • LUN 的容量和个数:与最多仅包含十几块硬盘的传统 RAID 组不同,基于RAID2.0+机制的存储池,LUN 会跨越硬盘域内的所有硬盘,而硬盘域内的硬盘数多达几十甚至上百个。为了使硬盘的性能充分发挥,按如下策略配置 LUN 的个数和容量。

− 硬盘域内 LUN 的总数:不小于“硬盘数×4÷32”。(4 是单个硬盘的合理并发数,32 是 LUN 的默认最高队列深度)。使用 8-16 个数据 LUN(存储 Oracle 业务数据文件),4-8 个日志 LUN(存储 Oracle 归档日志文件),可满足最大 32TB 的容量的数据库。对于更大容量的数据库,根据实际情况调整LUN 的数量。

− LUN 容量:满足上面条件的前提下,使用尽量大的 LUN,以简化管理开销。但需要注意,LUN 的最大容量还需考虑操作系统和 Oracle 数据库的限制,在 Oracle 12.1 及以上版本中,放宽了对 ASM 磁盘的限制,单盘最大可以达到 4PB。但是由于已知 Bug(6453944)的存在,导致实际上单盘大于 2T 时会报错。建议单个 LUN 的容量小于 2TB。

4.2.5 映射视图

映射视图定义了 LUN、阵列端口、主机端口之间的逻辑映射。创建映射视图,按如下策略。

  • LUN 组是为了便于 LUN 资源管理而设计的一个对象。一般情况下,将同一种业务的 LUN 加入到一个 LUN 组内,如 Oracle RAC 的各数据区域。
  • 主机组是一组需要共享存储资源的“主机”,每个“主机”包含多个启动器(主机端口)。为每一个服务器创建一个“主机”,将该服务器的所有启动器添加到该“主机”内。
  • 端口组可以更精细化的控制存储端口的分配。端口组不是必须的,为 Oracle OLAP 业务分配端口组,以增加运维的灵活性,并降低业务之间的性能影响。为避免单点故障,一个端口组应至少包含来自于每个控制器的一个端口。

4.3 主机配置

4.3.1 队列深度

对于 Oracle 数据库来说,I/O 队列深度是影响性能的重要参数。操作系统层存在两个参数影响到 I/O 队列深度:块设备队列深度和 HBA 卡队列深度。按照如下策略配置块设备队列深度和 HBA 卡队列深度。

  • 对于 Linux 操作系统,块设备最大队列深度为 128,华为不建议修改参数。而HBA 卡的队列参数与卡类型和驱动程序相关,请参考 HBA 厂商给出的规格值,如 Qlogic 8Gbps FC 双口 HBA 卡,限制每个 LUN 的最大队列深度为 32。
  • 对于 AIX 操作系统,安装 UltraPath 多路径,不使用系统多路径或第三方多路径。安装了华为 UltraPath 多路径,块设备最大队列深度被调整为 32,不对此值进行修改。若不使用华为 UltraPath,系统默认块设备最大队列深度为 5,将此值修改为 32 或更高。AIX 的 HBA 卡最大队列深度默认值为 200,可根据实际业务需求进行调整。
  • 对于 Windows 操作系统,单个 LUN 的最大 I/O 队列深度同样取决于 HBA 卡厂商给出的规格值。
  • 对于其他操作系统,请参考操作系统用户手册进行调整。

4.3.2 I/O 对齐

在 Linux 操作系统中使用 MBR 格式创建分区时,会将磁盘的最开始 63 个扇区预留给主引导记录和分区表,第一个分区默认从第 64 扇区开始。这就造成了主机的数据块(数据库或文件系统)与存储数据块不对齐,造成 I/O 处理效率降低。

在 Linux 系统中使用 MBR 格式创建分区时,进入 fdisk 命令的专家模式,设置首分区的开始位置为 LUN 的第二个 Extent 的开始位置(Extent 大小默认是 4MB)。下面是一条快速命令,用于在/dev/sdb 上使用 MBR 格式创建 1 个分区,使用/dev/sdb 的全部空间,开始扇区设置为 8192,即 4MB。
printf "n\np\n1\n\n\nx\nb\n1\n 8192\nw\n" | fdisk /dev/sdb

在 Linux 系统中解决分区不对齐的另一种方法是采用 GPT 格式的分区。下面是一条快速命令,用于在/dev/sdb 上使用 GPT 格式创建 1 个分区,使用/dev/sdb 的全部空间,开始扇区设置为 8192,即 4MB。

parted -s -- /dev/sdb "mklabel gpt" "unit s" "mkpart primary 8192 -1" "print"

4.3.3 块设备调度算法

Linux 2.6 内核支持四种块设备调度算法:noop,anticipatory,deadline 和 cfq。OLTP/OLAP 应用中对 I/O 延迟要求较为苛刻,对于传统硬盘,调度算法选择 deadline,对于 SSD,选择 noop。

在 RHEL6 以及之后的版本中,可以针对每块磁盘制定 I/O Scheduler,修改完毕立刻生效,命令如下。

使用以上命令修改 I/O 调度算法,只是临时修改,系统重启后修改就会失效。永久修改默认的 I/O 调度算法,使用以下命令,系统重启后生效。

4.3.4 绑定盘符

在 Linux 环境下配置 Oracle 数据库时,使用 UDEV 策略绑定设备编号 UUID,以免后续维护过程中发生盘符改变造成数据库无法启动。查询 LUN 的 UUID 及配置 UDEV 策略文件的脚本如下。

5 基于OceanStor F V5存储Oracle 生产环境性能测试

本章主要描述华为 OceanStor 18500F V5 存储在 OLAP 数据仓库场景下的生产业务压测结果,重点查看过程中存储系统的带宽、时延等性能指标,整体衡量 V5存储在此场景下的表现,针对生产业务证实验证。

5.1 压力测试过程

5.1.1 加载测试数据

使用工具 TPC-H,自动完成生成数据、创建数据库、执行数据加载过程。生成规模为 2000 的测试数据(约 2TB)。

cd /opt/oracle/data/txt/tpch/ora12c/
nohup sh 00.load.sh pdb1 2000 +DATA/ |tee load.log &

说明:数据加载脚本参数: 00.load.sh PDB SCALE TARGET_DIR
PDB:创建 pdb 的名称
SCALE:数据规模,每单位约 1GB
TARGET_DIR:创建数据文件的目录

5.1.2 压力测试步骤

生产中一般有俩种场景:全表扫描和 Power顺序执行 ,综合评估性能指标。

步骤 1 全表扫描

启动 4 个并发进程执行全表扫描任务,统计 LINEITEM、ORDERS、CUSTOMER 表的总记录数。完成后记录执行时间,并观察性能数据。

sh 01.scan.sh pdb1 4 256

说明:USAGE: $0 PDB STREAM PARALLEL
PDB:PDB 名称
STREAM:并发进程数
PARALLEL:sql 语句执行并发度

过程中主要性能指标如以下所示。

图5-1 存储侧性能监控 - 块带宽

每控制器带宽约为 6.2GB/s,存储总带宽在 12 GB/s 以上。

图5-2 存储侧性能监控 - 平均响应时延

执行期间,存储平均响应时延小于 1.8ms。

图5-3 AWR 报告 - 应用带宽

过程中 IO 带宽平均值约为 12GB/s。业务类型基本为直接读取数据文件,其他操作占比较小。

图5-4 主机 CPU 利用率

主机上 CPU 利用率在 40%左右。

图5-5 全表扫描执行时间

计算耗时最长的一个流的执行时间,约为 11 分钟。

步骤 2 Power 顺序执行

Power顺序执行加载新数据、调用 22 个查询语句、删除旧数据,用来衡量单个分析任务的最佳执行效率。

执行以下命令,启动 Power 测试。

sh 03.power.sh pdb1 2000

说明:
USAGE: $0 PDB SCALE
PDB:PDB 名称
SCALE:数据量大小,本方案中取 2000

整个执行过程包含 22 个查询语句,在各查询语句的解析过程、执行间隙,Oracle 不会直接读取存储数据,IO 会有大幅跌落,因此最终的平均值会较低。

图5-6 存储侧性能监控 - 块带宽

在业务执行的平稳期,每控制器带宽约为 3.1GB/s,存储总带宽在 6.2 GB/s。

图5-7 存储侧性能监控 - 平均响应时延

测试执行期间,在业务执行的平稳期,存储平均响应时延在 3ms 左右。在 SQL 执行的间隔中,时延、带宽指标会突降,说明此时间段内应用没有直接读取存储的数据。图5-8 AWR 报告 –执行过程中应用带宽

Power 测试完整执行过程中,抓取稳定期的 AWR 报告计算 I/O 带宽,如上图所示,带宽平均值约为 4.8G。

说明:整个执行过程包含 22 个查询语句,在各查询语句的解析过程、执行间隙,Oracle 不会直接读取存储数据,IO 会有大幅跌落,因此最终测试的平均值会较低。上图仅节点 1 有数据,也说明Power 测试的脚本仅在节点 1 执行。

图5-9 主机 CPU 利用率

主机上 CPU 利用率 60%以上。

图5-10 Power 测试执行时间

从 Power 日志可以看出,整个执行过程耗时约 35 分钟。

----结束

5.2 生产压测结论

通过以上测试结果可以看出,华为 OceanStor F V5 存储系统在 OLAP 数据仓库系统场景下,IO 带宽可以达到12GB/s。环境使用 32 块 1.92TB 硬盘,平均每盘带宽在 300MB/s 以上。在过程中发现,主机资源消耗并不高,带宽指标主要受限于链路个数、端口速率以及硬盘数量。当前的测试结果已经完全可以满足我公司对存储设备的性能要求。

5.3 友商存储性能对比

友商存储性能截图IOPS、IO大小、带宽和时延

华为存储性能截图IOPS、IO大小、带宽和时延

性能分析说明:

A)使用华为存储后,依托于全闪阵列,读写时延优化较为显著,常稳时延降低到1ms以内,性能波动明显降低。

B)基于读写时延的下降,IOPS和带宽获得较为明显的提升。

6 总结

本文结合我公司实际经验,介绍了生产环境中基于华为 OceanStor F V5 存储系统部署 Oracle 数据库 OLAP 场景的规划配置方案,并提供经验证的规划配置参考架构。大家在使用 F V5 存储阵列规划、部署 Oracle 数据库时可以利用本文档提供的组网、参数设置、压测方法等信息,避免实施过程中的风险。

总结一下生产环境需要关注的要点,供广大同行借鉴。

- 合理的主机配置
− 足够的主机链路,并合理组网、划分 zone。16G FC 端口能达到的理论带宽值约 1.6G,需要根据实际需求配置端口数。
− 设置 I/O 对齐。
− 对于 SSD 硬盘,调度算法改为 noop。
− 配置 HugePage,并关闭动态分配。

- 合理的存储规划
− 尽量不要跨硬盘框创建硬盘域。
− 根据应用场景选择 RAID 策略,优选 RAID 5,分条深度选择 512KB。
− LUN 平均分配到每个控制器上,单个 LUN 容量不要超过 2T。开启压缩。关闭预取策略。

- 数据库关键参数调整
− 使用 ASM 磁盘组管理。
− 开启归档,调整 redolog、临时表空间、UNDO 表空间。
− 数据块(db_block_size)选择 32KB,适当调整 PGA 大小。
− 在复杂的查询 SQL 语句中使用并行操作。
− 以此为标准配置生产环境中其他数据库关键参数。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

3

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广