因我保险企业数据库技术的广泛使用,企业信息系统产生大量的数据,数据库的读写、查询等操作受到了存储性能的制约,对存储的性能要求逐渐提高,如IOPS要大于300000、磁盘响应时间小于5毫秒。老旧存储设备在性能方面已经无法满足现有业务需求,因此需要替换华为高端全闪存储提供存储服务。
OceanStor F V5 系列存储系统是华为技术有限公司(以下简称华为)根据存储产品应用现状和存储技术未来发展趋势,推出的新一代中高端全闪存存储产品,完全能够满足本公司对海量数据存储、高速数据存取、高可用性、高利用率、绿色环保和易于使用的要求。
结合我公司实际使用经验,接下来主要介绍下生产环境基于华为 OceanStor F V5 存储系统,部署 Oracle 12c RAC 数据库的生产配置过程,供有需要的同行朋友们参考借鉴。
我司数据库业务同样分为两类:联机事务处理 OLTP(On-line Transaction Processing)和联机分析处理 OLAP(On-line Analytical Processing)。其中,OLTP 是传统的关系型数据库的主要应用,主要是基本、日常的事务处理,如证券交易、银行交易等;OLAP 是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,提供直观易懂的查询结果给决策人员,以便准确掌握企业的经营状况,从而制定正确的方案,如数据仓库系统。
Oracle 数据库作为当前生产环境中最常用的数据库,也是存储设备的最重要应用场景,将Oracle 数据库 OLAP 应用部署在华为 OceanStor F V5 系列存储系统上,可以保障业务的可靠性,有效提升数据库查询分析的性能,为企业的发展做出正确的决策。
华为 OceanStor F V5 全闪存存储(下文简称 F V5 系列存储)是面向企业级应用的新一代融合存储产品。在功能、性能、效率、可靠性和易用性上都达到业界领先水平,很好的满足了大型数据库 OLTP/OLAP、文件共享、云计算等各种应用下的数据存储需求.
Oracle 数据库是应用最为广泛的关系型数据库之一, Oracle 数据库是与存储系统关系最为密切的应用。Oracle 12c聚焦与多租户相关的组件和特性:RAC(Real Application Cluster)、ASM(Automatic Storage Management)、多租户、数据文
如上图所示数据库使用包含两部分,SGA(System Global Area)和 PGA(Program Global Area),其中 SGA 用于存放系统信息和页面缓存,而 PGA 用于存放会话信息。
SGA 主要包含如下几部分:
Oracle 的数据文件包含如下几种类型:
本章将主要介绍我司生产环境基于华为 OceanStor F V5 存储系统,部署 Oracle 12c RAC 数据库的生产配置过程。包括组网、存储配置、主机设置等。
由于Oracle 数据库承载着企业核心业务系统,为保证业务连续性,使用 Oracle RAC 集群,组网使用冗余架构。如下图所示,SAN(Storage Area Network)组网
中,使用两个物理上独立的交换平面(每个交换平面包括一个交换机或多个相互级联的交换机),每个数据库节点与两个交换平面相连,每个存储控制器和两个交换平面相连。
通过划分 Zone 或 vLAN,可以实现如下目的:
在使用 OceanStor F V5 存储之前,我们首先分析清楚了业务性能和容量需求,做好存储系统的硬盘数规划,从而降低运维风险。 在引入 RAID2.0+技术之后,根据业务性能和容量需求评估硬盘数变得非常困难,华为 UniSTAR eDesigner 方案设计工具中,包含两款针对存储系统的评估工具,使用这两款工具为 Oracle 数据库规划硬盘数。
硬盘域(Disk Domain)即多个硬盘的组合,将硬盘整合并预留热备容量后统一向存储池提供存储资源。
硬盘域的热备容量比例与热备策略和硬盘的类型和数量相关,该比例关系由存储系统根据可靠性工程方法自动维护。若需要规划存储容量和性能,使用华为 UniSTAR eDesigner 工具进行配置。
热备策略的选择跟上层应用系统的类型有关。
OceanStor F V5 系列存储系统的硬盘域可以包含多达上千块硬盘,但基于性能和可靠性考虑,硬盘域每存储层的硬盘数不超过 100 个。
存储池(Storage Pool),是存放存储空间资源的容器,创建于硬盘域内,可以从硬盘域上动态分配资源,并定义每个存储层级的“RAID 级别”。
OceanStor F V5 系列存储支持 RAID6、RAID10、RAID5、RAID3、RAID50、RAID1六种 RAID 级别,最常用的 RAID 级别为 RAID6、RAID10、RAID5。按如下策略为 Oracle 数据库配置 RAID 级别。
创建存储池时,允许设置容量分配比的告警阈值,默认是 80(百分比)。在使用 Thin LUN、快照、远程复制、克隆等增值业务时,容量告警尤其重要,可以根据业务数据量增长的速度设置合理的告警阈值,避免业务因为存储池容量不足而造成服务中断。
多租户是存储系统的一种特性。使用多租户特性可以在一套物理存储系统中创建多个虚拟存储系统,让多个租户既能共享相同的存储硬件资源,又不影响相互的数据安全性和隐私。借助该租户特性,可以在多协议统一存储架构中实现更加灵活、更易于管理、部署成本更低的共享存储。 启用多租户特性,在 Oracle 租户下创建 LUN。
为 Oracle 数据库创建 LUN 时,为了能使存储系统的性能达到最优状态,需要根据实际的数据存储情况,为 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。
映射视图定义了 LUN、阵列端口、主机端口之间的逻辑映射。创建映射视图,按如下策略。
对于 Oracle 数据库来说,I/O 队列深度是影响性能的重要参数。操作系统层存在两个参数影响到 I/O 队列深度:块设备队列深度和 HBA 卡队列深度。按照如下策略配置块设备队列深度和 HBA 卡队列深度。
在 Linux 操作系统中使用 MBR 格式创建分区时,会将磁盘的最开始 63 个扇区预留给主引导记录和分区表,第一个分区默认从第 64 扇区开始。这就造成了主机的数据块(数据库或文件系统)与存储数据块不对齐,造成 I/O 处理效率降低。
在 Linux 系统中使用 MBR 格式创建分区时,进入 fdisk 命令的专家模式,设置首分区的开始位置为 LUN 的第二个 Extent 的开始位置(Extent 大小默认是 4MB)。下面是一条快速命令,用于在/dev/sdb 上使用 MBR 格式创建 1 个分区,使用/dev/sdb 的全部空间,开始扇区设置为 8192,即 4MB。
printf "nnpn1nnnxnbn1n 8192nwn" | 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"
Linux 2.6 内核支持四种块设备调度算法:noop,anticipatory,deadline 和 cfq。OLTP/OLAP 应用中对 I/O 延迟要求较为苛刻,对于传统硬盘,调度算法选择 deadline,对于 SSD,选择 noop。
在 RHEL6 以及之后的版本中,可以针对每块磁盘制定 I/O Scheduler,修改完毕立刻生效,命令如下。
使用以上命令修改 I/O 调度算法,只是临时修改,系统重启后修改就会失效。永久修改默认的 I/O 调度算法,使用以下命令,系统重启后生效。
在 Linux 环境下配置 Oracle 数据库时,使用 UDEV 策略绑定设备编号 UUID,以免后续维护过程中发生盘符改变造成数据库无法启动。查询 LUN 的 UUID 及配置 UDEV 策略文件的脚本如下。
本章主要描述华为 OceanStor 18500F V5 存储在 OLAP 数据仓库场景下的生产业务压测结果,重点查看过程中存储系统的带宽、时延等性能指标,整体衡量 V5存储在此场景下的表现,针对生产业务证实验证。
使用工具 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:创建数据文件的目录
生产中一般有俩种场景:全表扫描和 Power顺序执行 ,综合评估性能指标。
步骤 1 全表扫描
启动 4 个并发进程执行全表扫描任务,统计 LINEITEM、ORDERS、CUSTOMER 表的总记录数。完成后记录执行时间,并观察性能数据。
sh 01.scan.sh pdb1 4 256
说明:USAGE: $0 PDB STREAM PARALLEL
PDB:PDB 名称
STREAM:并发进程数
PARALLEL:sql 语句执行并发度
过程中主要性能指标如以下所示。
每控制器带宽约为 6.2GB/s,存储总带宽在 12 GB/s 以上。
执行期间,存储平均响应时延小于 1.8ms。
过程中 IO 带宽平均值约为 12GB/s。业务类型基本为直接读取数据文件,其他操作占比较小。
主机上 CPU 利用率在 40%左右。
计算耗时最长的一个流的执行时间,约为 11 分钟。
步骤 2 Power 顺序执行
Power顺序执行加载新数据、调用 22 个查询语句、删除旧数据,用来衡量单个分析任务的最佳执行效率。
执行以下命令,启动 Power 测试。
sh 03.power.sh pdb1 2000
说明:
USAGE: $0 PDB SCALE
PDB:PDB 名称
SCALE:数据量大小,本方案中取 2000
整个执行过程包含 22 个查询语句,在各查询语句的解析过程、执行间隙,Oracle 不会直接读取存储数据,IO 会有大幅跌落,因此最终的平均值会较低。
在业务执行的平稳期,每控制器带宽约为 3.1GB/s,存储总带宽在 6.2 GB/s。
测试执行期间,在业务执行的平稳期,存储平均响应时延在 3ms 左右。在 SQL 执行的间隔中,时延、带宽指标会突降,说明此时间段内应用没有直接读取存储的数据。图5-8 AWR 报告 –执行过程中应用带宽
Power 测试完整执行过程中,抓取稳定期的 AWR 报告计算 I/O 带宽,如上图所示,带宽平均值约为 4.8G。
说明:整个执行过程包含 22 个查询语句,在各查询语句的解析过程、执行间隙,Oracle 不会直接读取存储数据,IO 会有大幅跌落,因此最终测试的平均值会较低。上图仅节点 1 有数据,也说明Power 测试的脚本仅在节点 1 执行。
主机上 CPU 利用率 60%以上。
从 Power 日志可以看出,整个执行过程耗时约 35 分钟。
----结束
通过以上测试结果可以看出,华为 OceanStor F V5 存储系统在 OLAP 数据仓库系统场景下,IO 带宽可以达到12GB/s。环境使用 32 块 1.92TB 硬盘,平均每盘带宽在 300MB/s 以上。在过程中发现,主机资源消耗并不高,带宽指标主要受限于链路个数、端口速率以及硬盘数量。当前的测试结果已经完全可以满足我公司对存储设备的性能要求。
性能分析说明:
A)使用华为存储后,依托于全闪阵列,读写时延优化较为显著,常稳时延降低到1ms以内,性能波动明显降低。
B)基于读写时延的下降,IOPS和带宽获得较为明显的提升。
本文结合我公司实际经验,介绍了生产环境中基于华为 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 条评论