滚雪球学Oracle[5.6讲]:资源管理与调优

devtools/2024/10/18 3:12:52/

全文目录:

    • 前言
    • 一、Oracle Resource Manager的配置与使用
      • 1.1 什么是Oracle Resource Manager
      • 1.2 Oracle Resource Manager的优势
      • 1.3 配置Oracle Resource Manager
        • 案例演示:配置Resource Manager
    • 二、基于服务的资源分配策略
      • 2.1 基于服务的资源管理
        • 典型场景
      • 2.2 基于服务的资源计划配置
        • 案例演示:为服务配置资源计划
    • 三、多租户环境中的资源管理
      • 3.1 什么是多租户架构
      • 3.2 多租户环境中的资源管理挑战
      • 3.3 多租户环境中的Resource Manager配置
        • 案例演示:为多租户环境中的PDB分配资源
    • 结语

前言

在上期内容中,我们详细探讨了日志与故障排查,介绍了如何通过分析数据库日志来解决故障问题,提升系统的稳定性和可维护性。通过日志管理,数据库管理员(DBA)可以追踪系统运行中的各种异常并快速响应,从而保障数据库的持续可用性。

本期,我们将转向资源管理调优的主题。在复杂的数据库环境中,不同应用和用户可能同时访问数据库,导致资源竞争和性能下降。为了解决这一问题,Oracle提供了Resource Manager,它可以帮助DBA根据不同的工作负载和业务需求,分配和优化系统资源,确保资源得到高效利用。本文将重点介绍如何配置和使用Oracle Resource Manager,基于服务的资源分配策略,以及如何在多租户环境中进行资源管理调优

在文章的最后,我们将预告下期内容——Oracle RAC技术概述

一、Oracle Resource Manager的配置与使用

1.1 什么是Oracle Resource Manager

Oracle Resource Manager是Oracle数据库中的一项强大工具,旨在管理和控制数据库的CPU、I/O、并发会话等资源分配。通过Resource Manager,DBA可以定义不同的资源计划(Resource Plan),为不同的工作负载分配特定比例的资源,从而确保关键任务优先获得足够的资源。

1.2 Oracle Resource Manager的优势

  • 资源控制:根据业务优先级为不同用户或应用分配CPU、I/O等资源,避免资源争夺。
  • 工作负载隔离:将低优先级任务限制在特定资源范围内,确保高优先级任务的稳定性。
  • 性能优化:通过优化资源利用率,提高系统整体性能。
  • 限制长时间运行的查询:自动终止超过时间限制的查询,防止长时间的资源占用。

1.3 配置Oracle Resource Manager

Oracle Resource Manager的配置主要包括创建资源消费者组(Consumer Group)、定义资源计划和分配资源计划指令

案例演示:配置Resource Manager

以下示例展示了如何为不同的用户组配置资源管理策略,以控制CPU使用情况。

  1. 创建资源消费者组

首先,创建两个资源消费者组,一个用于高优先级用户,另一个用于低优先级用户:

BEGINDBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'high_priority_users',COMMENT => 'Group for high priority users');DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'low_priority_users',COMMENT => 'Group for low priority users');
END;
/
  1. 创建资源计划

接下来,创建一个资源计划,为不同的用户组分配CPU资源。此示例为高优先级用户分配80%的CPU,为低优先级用户分配20%的CPU:

BEGINDBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'cpu_allocation_plan',COMMENT => 'CPU allocation for high and low priority users');DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'cpu_allocation_plan',GROUP_OR_SUBPLAN => 'high_priority_users',COMMENT => '80% CPU for high priority users',MGMT_P1 => 80);DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'cpu_allocation_plan',GROUP_OR_SUBPLAN => 'low_priority_users',COMMENT => '20% CPU for low priority users',MGMT_P1 => 20);
END;
/
  1. 激活资源计划

配置完成后,需要激活资源计划,使其生效:

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'cpu_allocation_plan';

通过上述步骤,Oracle Resource Manager根据不同的用户组分配CPU资源,从而避免资源争夺,确保关键任务优先获得足够的系统资源。

二、基于服务的资源分配策略

2.1 基于服务的资源管理

Oracle中的**服务(Service)**是数据库为不同工作负载定义的逻辑分组。基于服务的资源管理允许DBA根据不同的应用或工作负载,为其分配特定的资源配额。这种方式可以灵活管理不同业务场景的资源需求,提高整体系统效率。

典型场景
  • OLTP服务与OLAP服务的资源隔离:通过为在线事务处理(OLTP)服务和在线分析处理(OLAP)服务分配不同的资源,保证两者互不干扰。
  • 批处理任务的限制:限制批处理任务的资源消耗,避免其影响实时业务的响应时间。

2.2 基于服务的资源计划配置

Oracle Resource Manager允许将资源计划与服务绑定,以确保不同服务的工作负载可以获得适当的资源配额。

案例演示:为服务配置资源计划
  1. 创建服务

首先为OLTP和OLAP任务创建两个服务:

EXEC DBMS_SERVICE.CREATE_SERVICE('oltp_service', 'OLTP Workload Service');
EXEC DBMS_SERVICE.CREATE_SERVICE('olap_service', 'OLAP Workload Service');
  1. 将服务与消费者组绑定

然后将这些服务分配到不同的资源消费者组:

BEGINDBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'cpu_allocation_plan',GROUP_OR_SUBPLAN => 'oltp_service',COMMENT => '70% CPU for OLTP',MGMT_P1 => 70);DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'cpu_allocation_plan',GROUP_OR_SUBPLAN => 'olap_service',COMMENT => '30% CPU for OLAP',MGMT_P1 => 30);
END;
/
  1. 激活服务和资源计划

启动服务并激活资源计划:

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'cpu_allocation_plan';EXEC DBMS_SERVICE.START_SERVICE('oltp_service');
EXEC DBMS_SERVICE.START_SERVICE('olap_service');

通过这种基于服务的资源管理策略,DBA可以确保不同类型的工作负载(如OLTP与OLAP)在同一系统中得到合理分配的资源,避免彼此干扰。

三、多租户环境中的资源管理

3.1 什么是多租户架构

Oracle的多租户架构(Multitenant Architecture)允许在一个单一的容器数据库(CDB)中托管多个独立的插接式数据库(PDB)。每个PDB相当于独立的数据库实例,但它们共享CDB的硬件资源,如CPU、内存和I/O。

在多租户环境中,资源的竞争可能更加激烈,因此,如何合理分配和管理PDB之间的资源成为关键问题。

3.2 多租户环境中的资源管理挑战

在多租户环境中,常见的资源管理挑战包括:

  • 不同PDB的资源竞争:多个PDB可能同时进行高强度的操作,导致资源争夺。
  • 资源隔离:如何确保关键PDB优先获得资源,而不会因其他PDB的消耗导致性能下降。

3.3 多租户环境中的Resource Manager配置

Oracle多租户架构下,Resource Manager允许DBA为每个PDB分配特定的资源比例,确保资源的公平和合理使用。

案例演示:为多租户环境中的PDB分配资源
  1. 配置CDB级别的资源管理计划

首先,在CDB级别为不同PDB分配资源:

BEGINDBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(PLAN => 'pdb_resource_plan',COMMENT => 'Resource allocation for PDBs');DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(PLAN => 'pdb_resource_plan',PDB => 'PDB1',COMMENT => '60% resources for PDB1',SHARES => 60);DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(PLAN => 'pdb_resource_plan',PDB => 'PDB2',COMMENT => '40% resources for PDB2',SHARES => 40);
END;
/
  1. 激活CDB资源管理计划

激活多租户环境下的资源管理计划:

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'pdb_resource_plan';

通过这种方式,DBA可以为每个PDB定义合理的资源分配策略,确保不同租户的应用之间的资源不会相互争夺。

结语

本期内容详细讲解了资源管理调优,涵盖了Oracle Resource Manager的配置与使用、基于服务的资源分配策略以及在多租户环境中的资源管理方法。通过合理配置资源计划,DBA可以确保系统资源被合理、高效地利用,避免性能下降和资源浪费。

在下期内容中,我们将探讨Oracle RAC技术概述,揭示如何

通过RAC(Real Application Clusters)实现数据库的高可用性和可扩展性。敬请期待!

参考文献:

  • Oracle Resource Manager官方文档
  • 多租户架构与资源管理最佳实践

http://www.ppmy.cn/devtools/122088.html

相关文章

项目-坦克大战学习-控制人机发射子弹以及玩家受到攻击

控制人机发射子弹有几个条件,发射子弹的间隔以及攻击对象的筛选 我们前面已经将子弹生成程序写出来了,在子弹类中我们定义了枚举类型用来分辨是谁发射出来的子弹 玩家发射出来的子弹定义: duixiangweizhi.zidan(x, y, zidanen.wanjia, Fang…

助农小程序|助农扶贫系统|基于java的助农扶贫系统小程序设计与实现(源码+数据库+文档)

助农扶贫系统小程序 目录 基于java的助农扶贫系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 5.1.1 农户管理 5.1.2 用户管理 5.1.3 订单统计 5.2.1 商品信息管理 5.3.1 商品信息 5.3.2 订单信息 5.3.3 商品评价 5.3.4 商品退货 四、数据库设计 1、…

Hive数仓操作(二)

Hive 数据类型与连接 Hive 是一个用于处理大规模数据集的工具,支持多种数据类型以满足不同的需求。本文将详细介绍 Hive 的基本数据类型和集合数据类型。 一、Hive 基本数据类型 Hive 提供了多种基本数据类型,适用于不同的数据存储和处理需求&#xf…

KEYENCE Programming Contest 2024(AtCoder Beginner Contest 374) 题解

A - Takahashi san 2 Problem Statement KEYENCE has a culture of addressing everyone with the suffix “-san,” regardless of roles, age, or positions. You are given a string S consisting of lowercase English letters. If S ends with san, print Yes; otherwi…

【力扣 | SQL题 | 每日四题】力扣1783,1757,1747,1623,1468,1661

昨天晚上睡着了,今天把昨天的每日一题给补上。 1. 力扣1783:大满贯数量 1.1 题目: 表:Players ------------------------- | Column Name | Type | ------------------------- | player_id | int | | player_na…

C++ | Leetcode C++题解之第458题可怜的小猪

题目&#xff1a; 题解&#xff1a; class Solution { public:int poorPigs(int buckets, int minutesToDie, int minutesToTest) {if (buckets 1) {return 0;}vector<vector<int>> combinations(buckets 1,vector<int>(buckets 1));combinations[0][0] …

CentOS 7 系统中安装与配置 Telnet 服务详解(使用root登录)

目录 前言1. 安装 Telnet 服务端2. 配置 Telnet 服务允许 root 用户登录3. 启动与管理 Telnet 服务4. 配置防火墙允许 Telnet 通信5. 注册 Telnet 服务6. 添加 pts/0 终端7. 重启 xinetd 服务8. 在 Windows 本地终端安装 Telnet 客户端结语 前言 Telnet 是一种网络协议&#x…

vite学习教程04、vue集成axios封装request工具类及应用

文章目录 前言1、安装axios2、封装request工具类3、封装api请求工具4、实战&#xff1a;vue中使用api请求工具类资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技…