你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 上的 Oracle Database Enterprise Edition 的体系结构
适用于:✔️ Linux VM
所有 Oracle 工作负载(包括那些在 Azure 中需要继续使用 Oracle 以最佳方式运行的工作负载)都在 Azure 上。 如果有 Oracle 诊断包或自动工作负载存储库 (AWR),则可以收集有关工作负载的数据。 使用此数据来评估 Oracle 工作负载、调整资源需求,并将工作负载迁移到 Azure。 通过这些报告中由 Oracle 提供的各种指标,可以了解应用程序性能和平台使用情况。
本文将帮助你了解如何准备 Oracle 工作负载以便在 Azure 中运行,并探索最佳体系结构解决方案,以提供最佳云性能。 Oracle 在 Statspack 中提供的数据(甚至是在其后代 AWR 中提供的数据)可帮助你制定明确的预期。 这些预期包括对体系结构进行物理优化的局限性、数据库代码的逻辑优化优势以及整体数据库设计。
两个环境之间的差异
在将本地应用程序迁移到 Azure 时,务必要记住两种环境之间的一些重要区别。
其中的一个重要区别是,在 Azure 实现中与其他客户端共享虚拟机、磁盘和虚拟网络等资源。 此外,还可按需限制资源。 Azure 更注重从故障中恢复,而不是关注避免故障。 第一种方法尝试增加平均无故障时间 (MTBF),第二种方法尝试减少平均恢复时间 (MTTR)。
下表列出了 Oracle 数据库的本地实现和 Azure 实现之间的一些区别。
本地实现 | Azure 实现 | |
---|---|---|
联网 | LAN/WAN | 软件定义的网络 (SDN) |
安全组 | IP/端口限制工具 | 网络安全组 (NSG) |
复原能力 | MTBF | MTTR |
计划内维护 | 修补/升级 | 可用性集,含由 Azure 管理的修补/升级 |
资源 | 专用 | 与其他客户端共享 |
区域 | 数据中心 | 区域对 |
存储 | SAN/物理磁盘 | Azure 托管的存储 |
缩放 | 垂直缩放 | 横向缩放 |
要求
在开始迁移之前,请考虑以下要求:
- 确定实际 CPU 使用率。 Oracle 按核心进行许可,这意味着调整 vCPU 需求对于帮助你降低成本至关重要。
- 确定数据库大小、备份存储和增长率。
- 确定 I/O 需求,你可以基于 Oracle Statspack 和 AWR 报告进行估计。 还可以通过操作系统中提供的存储监视工具来估计需求。
配置选项
最好生成一个 AWR 报告,并从中获得一些指标,以帮助你做出有关配置的决策。 然后,在 Azure 环境中,可以优化四个潜在区域来提高性能:
- 虚拟机大小
- 网络吞吐量
- 磁盘类型和配置
- 磁盘缓存设置
生成 AWR 报表
如果你已有一个 Oracle Enterprise Edition 数据库并打算将其迁移到 Azure,可以使用多个选项。 如果你有适用于 Oracle 实例的诊断包,则可以运行 Oracle AWR 报告来获取指标(例如 IOPS、Mbps 和 GiB)。 对于没有诊断包许可证的数据库或者对于 Oracle Standard Edition 数据库,可以在收集手动快照后,使用 Statspack 报告收集相同的重要指标。 这两种报告方法之间的主要区别在于,AWR 是自动收集的,而且与 StatSpack 相比,AWR 提供了更多有关数据库的信息。
请考虑分别在正常工作负载与峰值工作负载期间运行 AWR 报告,以便进行比较。 为了收集更准确的工作负载,可以考虑一周的延长窗口报告,而不是一天。 AWR 在报告中提供了平均值作为其计算的一部分。 默认情况下,AWR 存储库保留八天的数据,并每隔一小时创建快照。
对于数据中心迁移,应收集报告以便在生产系统上进行规模调整。 估算用于用户测试、测试和开发的剩余数据库副本的百分比。 例如,估计 50% 的生产大小调整。
要从命令行运行 AWR 报表,请使用以下命令:
sqlplus / as sysdba
@$ORACLE_HOME/rdbms/admin/awrrpt.sql;
关键指标
该报表将提示你输入以下信息:
- 报表类型:HTML 或文本。 HTML 类型提供了详细信息。
- 显示快照的天数。 例如,对于一小时的间隔,一周的报告会产生 168 个快照 ID。
- 报表窗口的开始
SnapshotID
。 - 报表窗口的结束
SnapshotID
。 - AWR 脚本创建的报告的名称。
如果在真实应用程序群集 (RAC) 上运行 AWR 报表,则命令行报告是 awrgrpt.sql 而不是 awrrpt.sql。 g
报告在一个报告中为 RAC 数据库中的所有节点创建一个报告。 有了这个报表,便无需对每个 RAC 节点运行一次报表。
可以从 AWR 报表获取以下指标:
- 数据库名、实例名和主机名
- Oracle 支持的数据库版本
- CPU/核心
- SGA/PGA 以及大小不足时告知这一情况的顾问消息
- 总内存 (GB)
- CPU 繁忙程度百分比
- 数据库 CPU
- IOPs(读/写)
- MBPs(读/写)
- 网络吞吐量
- 网络延迟率(低/高)
- 排名靠前的等待事件
- 数据库的参数设置
- 数据库是 RAC、Exadata,还是使用高级功能或配置
虚拟机大小
可以采取以下步骤来配置虚拟机大小以获得最佳性能。
根据 AWR 报表提供的 CPU、内存和 I/O 使用情况估计虚拟机的大小
了解超时最严重的五大前景事件,这些事件指明了系统的瓶颈所在。 例如,在下图中,日志文件同步在最顶部。 它指示日志编写器将日志缓冲区写入重做日志文件前需要等待的数量。 这些结果指示存储区或磁盘的性能需要提高。 此外,此图还显示了 CPU 内核数和内存大小。
下图显示了读写的 I/O 总数。 在报表生成期间,读取了 59 GB 的数据,写入了 247.3 GB 的数据。
选择虚拟机
从 AWR 报表收集信息后,应根据该信息选择一个虚拟机,其大小应大致可满足需求。 有关可用虚拟机的详细信息,请参阅内存优化虚拟机大小。
根据 ACU 微调相似虚拟机系列的虚拟机大小
选择虚拟机后,请注意虚拟机的 Azure 计算单元 (ACU)。 可根据 ACU 值选择不同的虚拟机,以便更好地满足需求。 有关详细信息,请参阅 Azure 计算单元。
网络吞吐量
下图显示了吞吐量与 IOPS 之间的关系:
总网络吞吐量的估算以下列信息为基础:
- SQL*Net 流量
- MBps 乘以服务器数量(出站流,如 Oracle Data Guard)
- 其他因素,如应用程序复制
基于网络带宽要求,有多种网关类型可供选择。 这些类型包括 Basic、VpnGw 和 Azure ExpressRoute。 有关详细信息,请参阅 VPN 网关定价。
建议
- 与本地部署相比,网络延迟更高。 减少网络往返次数可显著提高性能。
- 若要减少网络往返,可在同一虚拟机上合并事务繁多的应用或“聊天式”应用。
- 使用具有加速网络的虚拟机实现更好的网络性能。
- 对于某些 Linux 发行版,请考虑启用 TRIM/UNMAP 支持。
- 在单独的虚拟机上安装 Oracle Enterprise Manager。
- 默认情况下不会在 Linux 上启用巨页。 请考虑启用巨页并在 Oracle DB 中设置
use_large_pages = ONLY
。 此方法可能有助于提高性能。 有关详细信息,请参阅 USE_LARGE_PAGES。
磁盘类型和配置
在考虑磁盘时,一些技巧如下。
默认 OS 磁盘:这些磁盘类型提供永久性数据和缓存。 它们针对启动时的操作系统访问进行了优化,不适用于事务性或数据仓库(分析)工作负荷。
托管磁盘:由 Azure 管理用于 VM 磁盘的存储帐户。 需要指定所需的磁盘类型和磁盘大小。 对于 Oracle 工作负载,类型通常是高级 (SSD)。 Azure 将创建和管理该磁盘。 高级 SSD 托管磁盘仅适用于已经过内存优化和精心设计的虚拟机系列。 选择特定虚拟机大小后,菜单将只显示以此虚拟机大小为基础的可用高级存储 SKU。
在虚拟机上配置存储后,可能需要在创建数据库前先对磁盘进行负载测试。 了解延迟和吞吐量的 I/O 速率有助于判断 VM 是否支持预计的吞吐量,并实现预期延迟目标。 有许多工具可用于应用程序负载测试,包括 Oracle Orion、Sysbench、SLOB 和 Fio。
部署 Oracle 数据库后重新运行负载测试。 启动正常工作负荷与峰值工作负荷,结果将显示所在环境的基线。 工作负载测试应与现实贴合。 运行一个你在现实中完全不会在虚拟机上运行的工作负载没有任何意义。
因为 Oracle 可能是 IO 密集型数据库,因此根据 IOPS 速率(而不是存储大小)来调整存储大小相当重要。 例如,如果要求的 IOPS 值是 5,000,但是你只需 200 GB,则即使 P30 级别高级磁盘的存储空间大于 200 GB,你可能仍会使用它。
可以获取 AWR 报表的 IOPS 速率。 重做日志、物理读取和写入速率决定了 IOPS 速率。 请始终验证所选虚拟机系列是否能够处理工作负载的 IO 需求。 如果虚拟机的 I/O 限制低于存储,则虚拟机会设置最大限制。
例如,恢复大小是每秒 12,200,000 字节,相当于 11.63 MBP。 IOPS 值为 12,200,000 / 2,358 = 5,174。
在明确 I/O 要求后,可选择最适合的驱动器组合以满足这些要求。
磁盘类型建议
- 对于数据表空间,请使用托管存储或 Oracle 自动存储管理 (ASM) 将 I/O 工作负载分布在多个磁盘上。
- 使用 Oracle 高级压缩来降低数据和索引的 I/O。
- 将重做日志、Temp 和 Undo 表空间分隔在不同的数据磁盘上。
- 不要将任何应用程序文件放在默认的操作系统磁盘上。 这些磁盘未针对快速 VM 启动时间进行优化,可能无法为应用程序提供良好的性能。
- 在高级存储上使用 M 系列 VM 时,请在重做日志磁盘上启用写入加速器。
- 考虑将延迟较高的重做日志移到超级磁盘。
磁盘缓存设置
尽管有三个用于主机缓存的选项,但对于 Oracle 数据库上的数据库工作负载,只建议使用只读缓存。 “读/写”可能会在数据文件中引入严重的漏洞,因为数据库写入的目的是将信息记录到数据文件,而不是缓存信息。 如果采用只读,将缓存所有请求,供将来读取。 所有写入内容将继续写入到磁盘。
磁盘缓存建议
为了最大限度地提高吞吐量,请尽可能为主机缓存启动只读。 请注意,对于高级存储,在使用“只读”选项来装载文件系统时,必须禁用“屏障”。 用磁盘的通用唯一标识符更新 /etc/fstab 文件。
- 对于操作系统磁盘,请使用带有读写主机缓存的高级 SSD。
- 对于包含以下内容的数据磁盘,请使用拥有只读主机缓存的高级 SSD:Oracle 数据文件、临时文件、控制文件、块更改跟踪文件、BFILE、适用于外部表的文件和闪回日志。
- 对于包含 Oracle 联网重做日志文件的数据磁盘,请使用没有主机缓存的高级 SSD 或超级磁盘,即“无”选项。 已归档的 Oracle 重做日志文件和 Oracle 恢复管理器备份集也可以驻留在联机重做日志文件中。 主机缓存限制为 4095 GiB,因此,请不要将大于 P50 的高级 SSD 分配到主机缓存。 如果需要超过 4 TiB 的存储空间,请使用 RAID-0 对几个高级 SSD 进行分条。 使用 Linux LVM2 或 Oracle 自动存储管理。
如果工作负载在白天和夜晚的差异很大,并且 I/O 工作负载能够支持具有突发功能的 P1-P20 高级 SSD,则此类 SSD 可以在夜间运行批处理负载或者在 I/O 需求有限期间提供所需的性能。
安全性
设置并配置 Azure 环境后,便需要保护网络的安全。 以下是一些建议:
NSG 策略:你可以通过子网或网络接口卡来定义你的 NSG。 可以在子网级别更轻松地控制访问,以确保安全性并为应用程序防火墙实现强制路由。
Jumpbox:为了提高访问的安全性,管理员不应直接连接到应用程序服务或数据库。 使用 Jumpbox 来隔离管理员计算机与 Azure 资源。
应将管理员计算机的 IP 限制为仅允许访问 jumpbox。 Jumpbox 应有权访问应用程序和数据库。
专用网络(子网):将应用程序服务和数据库放在单独的子网上是个不错的方法,这样就可以设置更好地控制 NSG 策略。