Loading...

在 Amazon RDS for Oracle 中设置数据库资源管理器 数据库博客

2026-01-27 13:27:28

在 Amazon RDS for Oracle 中设置数据库资源管理器

关键要点

在将 Oracle 数据库迁移至 Amazon RDS for Oracle 后,您可能希望对 CPU 及其他资源进行更高的控制。可以使用 Oracle 资源数据库管理器来优先分配特定应用程序或用户的 CPU 资源,以确保高优先级应用程序具有一致的性能。本帖将指导您如何在 RDS for Oracle 数据库中实现 Oracle 数据库资源管理器的配置,主要聚焦于 CPU 使用率属性。

在将 Oracle 数据库迁移至 Amazon Relational Database Service (Amazon RDS) for Oracle 后,您可能希望对 CPU 和其他资源有更多控制。对此,您可以使用 Oracle 资源数据库管理器,以优先分配某些应用程序或用户的 CPU,确保高优先级应用程序的性能保持一致。此功能在 Oracle 8i 中首次引入,所有后续版本的 Oracle 企业版均可使用。Oracle 资源数据库管理器为数据库会话分配优先级,从而确保最重要的事务获得系统资源的主要份额。它根据配置时定义的属性值优先利用数据库资源,跨多个定义的消费者组应用程序、用户等。

您可以使用 SQLPlus 客户端连接到托管在本地服务器上的 Oracle 数据库,并运行以下查询以选择现有的服务:

以下是使用资源管理器的一些常见用例: 分配 CPU 时间百分比给不同的用户和应用程序,以分配可用的 CPU。 限制用户组中成员执行的任何操作的并行度。 限制不同用户和应用程序的最大 CPU 利用率。 隔离资源占用过高的查询。

缺乏适当的控制机制和资源规划可能导致关键的数据库后台进程因 CPU 短缺而受影响。这种情况可能发生在前台进程由于调度造成系统负载过高的事件中。另一个潜在问题是某些作业或应用程序互相竞争资源,导致性能问题。

在本文中,我们将展示如何使用 CPU 利用率属性在 RDS for Oracle 数据库中实现 Oracle 数据库资源管理器。这些标准可以用于在高优先级基于网络的 OLTP 事务和低优先级批处理之间分配和限制资源。

解决方案概述

下图演示了数据库中资源管理器配置的一个示例,其中为多个消费者组分配 CPU。您可以使用不同的设置和选项配置资源管理器。要了解更多信息,请参考 使用 Oracle 数据库资源管理器管理资源。您可以使用 Oracle 企业管理器 (OEM) 基于多个数据库服务的 CPU 分配报告,也可以查询 Oracle 数据字典视图以确定用于配置这些设置的值。

下图展示了资源管理器架构。

完成以下步骤,以在您的 RDS for Oracle 数据库中配置资源管理器:

创建数据库服务。创建待处理区域和消费者组。创建资源计划和计划指令。验证并提交待处理区域。更新数据库参数和应用程序连接字符串。

先决条件

您需要以下先决条件: Amazon RDS for Oracle 数据库企业版 SQL 开发工具 拥有所需权限的数据库用户: 系统权限:ADMINISTERRESOURCEMANAGER 或 由资源管理器管理员通过 DBMSRESOURCEMANAGERGRANTSYSTEMPRIVILEGE 授予该权限。更多详情,请参考 2713 关于资源管理器管理权限

创建数据库服务

Amazon RDS for Oracle 是单实例数据库。要基于您的数据库服务配置资源管理器,请在 RDS for Oracle 数据库中创建这些服务。

使用 SQLPlus 客户端连接到托管在本地服务器上的 Oracle 数据库,并运行以下查询以选择已在数据库中设置的服务: sql SELECT name FROM dbaservices

ORCLASYSBACKGROUNDSYSUSERS

使用 DBMSSERVICE 包在 Amazon RDS for Oracle 中创建所需的数据库服务。在以下示例中,我们创建两个服务作为说明,但您可以根据需要创建任意数量的服务。 sql BEGIN DBMSSERVICEcreateservice( servicename =gt mynewservice1 networkname =gt mynewservice1 ) END /

BEGIN DBMSSERVICEcreateservice( servicename =gt mynewservice2 networkname =gt mynewservice2 )END/

验证在 RDS for Oracle 数据库中创建的新服务: sql SELECT name networkname FROM dbaservices ORDER BY 1

ORCLA ORCLASYSBACKGROUND SYSUSERSmynewservice mynewservicemynewservice1 mynewservice1mynewservice2 mynewservice2

创建数据库服务后,您必须手动启动它们: sql BEGIN DBMSSERVICEstartservice( servicename =gt mynewservice2 ) END /

BEGIN DBMSSERVICEstartservice( servicename =gt mynewservice1 )END/

SELECT name networknameFROM vactiveservicesORDER BY 1

ORCLA ORCLASYSBACKGROUND SYSUSERSmynewservice1 mynewservice1mynewservice2 mynewservice2

创建待处理区域和消费者组

您需要一个待处理区域来与资源管理器协作,并将会话分类到多个消费者组中。数据库会话根据所选标准如数据库服务名称映射到这些消费者组。

创建待处理区域,待处理区域充当定义和验证资源计划的暂存区: sql EXECUTE DBMSRESOURCEMANAGERCREATEPENDINGAREA()

创建消费者组以分类会话: sql EXECUTE DBMSRESOURCEMANAGERCREATECONSUMERGROUP(Grpsev 资源消费者组/连接到 mynewservice 服务的方法) EXECUTE DBMSRESOURCEMANAGERCREATECONSUMERGROUP(Grpsev1 资源消费者组/连接到 mynewservice1 服务的方法) EXECUTE DBMSRESOURCEMANAGERCREATECONSUMERGROUP(Grpsev2 资源消费者组/连接到 mynewservice2 服务的方法)

根据连接到数据库时使用的数据库服务名称,将会话映射到消费者组。为了说明,使用数据库服务作为映射标准,但您可以使用其他 属性 进行这些映射。 sql BEGIN DBMSRESOURCEMANAGERsetconsumergroupmapping ( attribute =gt DBMSRESOURCEMANAGERservicename value =gt mynewservice consumergroup =gt Grpsev ) END /

BEGIN DBMSRESOURCEMANAGERsetconsumergroupmapping ( attribute =gt DBMSRESOURCEMANAGERservicename value =gt mynewservice1 consumergroup =gt Grpsev1 )END/

BEGIN DBMSRESOURCEMANAGERsetconsumergroupmapping ( attribute =gt DBMSRESOURCEMANAGERservicename value =gt mynewservice2 consumergroup =gt Grpsev2 )END/

创建资源计划和计划指令

资源计划plan是计划指令directive的容器,用于指定如何分配资源。资源计划指令用于将 CPU 资源分配给多个消费者组。

完成以下步骤:

创建一个资源计划,该资源计划将通过资源计划指令定义高优先级和低优先级任务: sql EXECUTE DBMSRESOURCEMANAGERCREATEPLAN(PLAN =gt ResourcePlan COMMENT =gt 最高级别计划)

创建资源计划指令: sql EXECUTE DBMSRESOURCEMANAGERCREATEPLANDIRECTIVE(PLAN =gt ResourcePlan GROUPORSUBPLAN =gt Grpsev1 COMMENT =gt Grp sev1 资源计划 MGMTP1 =gt 80) EXECUTE DBMSRESOURCEMANAGERCREATEPLANDIRECTIVE(PLAN =gt ResourcePlan GROUPORSUBPLAN =gt Grpsev2 COMMENT =gt Grp sev2 资源计划 MGMTP1 =gt 15) EXECUTE DBMSRESOURCEMANAGERCREATEPLANDIRECTIVE(PLAN =gt ResourcePlan GROUPORSUBPLAN =gt OTHERGROUPS COMMENT =gt 其他用户 MGMTP1 =gt 5)

如果与数据库建立的会话不属于任何预定义的消费者组,则将其视为 OTHERGROUPS 的一部分。因此,必须为 OTHERGROUPS 添加计划指令。

验证计划指令已创建。这是为了验证为不同消费者组定义的 CPU 分配百分比。 sql SELECT plan grouporsubplan type cpup1 cpup2 cpup3 cpup4 status FROM dbarsrcplandirectives WHERE plan LIKE RESOURCEPLAN

RESOURCEPLAN GRPSEV1 CONSUMERGROUP 80 0 0 0 PENDINGRESOURCEPLAN GRPSEV2 CONSUMERGROUP 15 0 0 0 PENDINGRESOURCEPLAN OTHERGROUPS CONSUMERGROUP 5 0 0 0 PENDING

如有需要,您可以管理超出指定限制的 CPU、物理 I/O 或逻辑 I/O 使用资源的会话或调用。当您为消费者组创建资源计划指令时,可以指定 CPU、物理 I/O 或逻辑 I/O 资源消耗的限制。您可以分别为物理 I/O 和逻辑 I/O 指定限制。您还可以指定经过时间的限制。

验证并提交待处理区域

上述对待处理区域所做的更改需要被验证和提交,以使其生效。

完成以下步骤:

验证待处理区域以识别任何错误: sql EXECUTE DBMSRESOURCEMANAGERVALIDATEPENDINGAREA()

提交待处理区域以将计划应用于数据库: sql EXECUTE DBMSRESOURCEMANAGERSUBMITPENDINGAREA()

更新数据库参数和应用程序连接字符串

需要在数据库级别激活上述创建的资源计划。同样,客户端上的 tnsnamesora 文件也需要进行修改,以便链接到服务名称。这确保了对数据库的连接通过服务进行,资源管理器可以实施指令。

完成以下步骤:

在初始化参数文件中更新以下参数,以便在数据库启动时激活资源管理器,并将顶级计划设置为 ResourcePlan: sql RESOURCEMANAGERPLAN = ResourcePlan

重启数据库并验证参数: sql SHOW PARAMETER RESOURCE

在 Amazon RDS for Oracle 中设置数据库资源管理器 数据库博客

SID NAME TYPE VALUE resourcelimit boolean TRUE resourcemanagegoldengate boolean resourcemanagercpuallocation integer 1 resourcemanagerplan string ResourcePlan

数据库重启后手动启动数据库服务: sql BEGIN DBMSSERVICEstartservice( servicename =gt mynewservice2 ) END /

BEGIN DBMSSERVICEstartservice( servicename =gt mynewservice1 )END

要连接用户或应用程序会话到数据库,编辑 tnsnamesora 或连接字符串,以使用之前在应用程序或其他客户端中创建的服务名称: sql servicename=myservice1 CONNECTION = mynewservice1 host=ltltHostnamegtgt port= 1521 servicename=mynewservice2 CONNECTION = mynewservice2 host=ltltHostnamegtgt port= 1521

运行以下 SQL 查询以确保连接通过数据库服务建立,并创建的资源计划处于活动状态: sql SELECT sid serial# servicename FROM vsession WHERE servicename LIKE my

642 13346 mynewservice11261 12930 mynewservice2

sqlSELECT name istopplan FROM vrsrcplan

Name IsTopPlanRESOURCEPLAN TRUE

注意事项

资源的分配以百分比的方式进行。如果一个消费者组的资源分配被更改,将影响其他消费者组。有一些已知问题与 Oracle 数据库资源管理器相关,这些问题请参考 已知问题。

清理

要清理资源,请完成以下步骤:

将 resourcemanagerplan 设置为 NULL: sql ALTER SYSTEM SET resourcemanagerplan=

清除待处理区域: sql BEGIN DBMSRESOURCEMANAGERCLEARPENDINGAREA() END /

飞兔云加速器下载

创建待处理区域并删除计划: sql BEGIN DBMSRESOURCEMANAGERCREATEPENDINGAREA() END /

BEGIN DBMSRESOURCEMANAGERDELETEPLAN( plan =gt ResourcePlan ) END /

删除消费者组: sql BEGIN DBMSRESOURCEMANAGERDELETECONSUMERGROUP( consumergroup =gt Grpsev ) DBMSRESOURCEMANAGERDELETECONSUMERGROUP( consumergroup =gt Grpsev1 ) DBMSRESOURCEMANAGERDELETECONSUMERGROUP( consumergroup =gt Grpsev2 ) END /

提交待处理区域: sql BEGIN DBMSRESOURCEMANAGERSUBMITPENDINGAREA() END /

这项清理操作会关闭资源管理器,也重置相关数据字典表中的存储值。如果您不再使用此 RDS 实例,可以删除它。有关详细信息,请参考 删除 RDS 实例。

结论

在本帖中,我们演示了如何使用 Oracle 数据库资源管理器在 RDS for Oracle 数据库中跨不同服务分配数据库资源。您可以使用此方法在高优先级和低优先级应用程序之间优先分配资源。

如果您对本帖有任何问题或意见,请使用评论区反馈。

作者介绍

Abhishek Kumar Verma 是 Amazon Web Services ProServe 团队的高级首席顾问。在 Amazon RDS for Oracle、Amazon RDS for PostgreSQL 和 Amazon Aurora PostgreSQL 数据库方面具备深厚的数据库迁移和管理专长。他也是 AWS DMS、Oracle Goldengate 和 Oracle Exadata 的主题专家。他每天与客户紧密合作,帮助他们迁移和现代化其数据库和应用程序到 AWS。

Puja Audhya 是 Amazon Web Services 数据库迁移和现代化团队的高级首席顾问。她帮助 AWS 客户迁移到 AWS 云数据库服务。

僧侣通过使用 Amazon SageMaker 和 AWS Inferentia2 提高实时扩散 A
僧侣通过使用 Amazon SageMaker 和 AWS Inferentia2 提高实时扩散 A

Monks 利用 Amazon SageMaker 和 AWS Inferentia2 将实时扩散 AI 图像生成的处理速度提升至四倍关键要点在本篇文章中,我们将探讨 Monks 如何通过使用 AWS...

在流式时间序列数据中进行异常检测的在线学习,使用亚马逊托管的 Apache Flink 服务 机器学
在流式时间序列数据中进行异常检测的在线学习,使用亚马逊托管的 Apache Flink 服务 机器学

实时流数据中的异常检测与在线学习关键要点时间序列数据分类:时间序列数据以时间为基础,展示趋势、季节变化等模式。异常检测定义:识别时间序列中意外的模式或数据点。解决方案架构:利用Amazon Apach...