LAB – Multitenant Resource Management

09 jan

LAB – Multitenant Resource Management

Design sem nome (2)

Introduction

Oracle 12c Release 2 New Features:

Controlling Memory allocation and Disk I/O on individual PDB.

In the previous release (12.1) oracle introduced Multitenant Database, allowing better management of resources and cost reduction.

On oracle 12c release 1 there was no easy way to control the amount of disk I/O and memory usage on individual PDB. As a result a “Noise Neighbor” could use lots of Memory and I/O impacting the performance of other PDB in the same instance.

In oracle 12c release 2 we can restrict the amount of memory and disk I/O on PDB Level, as well as creating resource plans based on performance profiles, which defines the resource management for groups of PDBs.

Requirements

Oracle 12c release 2 onward.

Container Database (Multitenant).

PDB Memory Parameters

The following parameters can be set at the PDB level.

DB_CACHE_SIZE: The minimum buffer cache size for the PDB.
SHARED_POOL_SIZE: The minimum shared pool size for the PDB.
PGA_AGGREGATE_LIMIT: The maximum PGA size for the PDB.
PGA_AGGREGATE_TARGET: The target PGA size for the PDB.
SGA_MIN_SIZE: The minimum SGA size for the PDB.
SGA_TARGET: The maximum SGA size for the PDB.

These initialization parameters control the memory usage of PDBs only if the following conditions are met:

  • The NONCDB_COMPATIBLE initialization parameter is set to false in the CDB root.
  • The MEMORY_TARGET initialization parameter is not set or is set to 0 (zero) in the CDB root.
SQL> show parameter target

PARAMETER_NAME                                    TYPE         VALUE
------------------------------------------------------------ ----------- ------------------------------------------
memory_max_target                                 big integer 0
memory_target                                     big integer 0
pga_aggregate_target                              big integer 200M
sga_target                                        big integer 800M
SQL> show parameter NONCDB_COMPATIBLE

PARAMETER_NAME                                    TYPE          VALUE
------------------------------------------------------------ ----------- ------------------------------------------
noncdb_compatible                                 boolean       FALSE

Set PDB as current Container

SQL> alter session set container = WINTPDB;

Set SGA_TARGET for the current PDB

SQL> alter system set sga_target=300M scope=both;

Sistema alterado.

SQL> show parameter sga_target

PARAMETER_NAME                                   TYPE           VALUE
------------------------------------------------------------ ----------- -----------------------------
sga_target                                       big integer 300M

I/O Parameters

The following parameters can be set at the PDB level.

MAX_IOPS : The maximum I/O operations per second for the PDB.
MAX_MBPS : The maximum megabytes of I/O per second for the PDB.

View parameter on CDB level. (If set at the CDB level they become default values used on all PDBs)

SQL> show parameter max_iops

PARAMETER_NAME                                  TYPE           VALUE
------------------------------------------------------------ ----------- -------------------------------
max_iops                                        integer 0

Set PDB as current Container

SQL> alter session set container = WINTPDB;

Set MAX_IOPS for the current PDB

SQL> alter system set max_iops=100 scope=both;

Sistema alterado.

SQL> show parameter max_iops

PARAMETER_NAME                                  TYPE            VALUE
------------------------------------------------------------ ----------- -----------------------------
max_iops                                        integer 100

Monitoring Resources

The following views can be used to monitor PDB Resources (CPU, I/O, Parallel Execution, Memory).

V$RSRCPDBMETRIC : A single row per PDB, holding the last of the 1 minute samples.
V$RSRCPDBMETRIC_HISTORY : 61 rows per PDB, holding the last 60 minutes worth of samples from the V$RSRCPDBMETRIC view.
V$RSRC_PDB : Cumulative statistics since the CDB resource plan ws set.
DBA_HIST_RSRC_PDB_METRIC : AWR snaphots, retained based on the AWR retention period.

Monitor I/O and Memory Usage for PDBs (Last 1 minute samples)

COLUMN pdb_name FORMAT A10
COLUMN begin_time FORMAT A21
COLUMN end_time FORMAT A21
SELECT r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       round(r.iops ,3) iops,
       round(r.iombps ,3) iombps,
       round(r.iops_throttle_exempt ,3) iops_throttle_exempt,
       round(r.iombps_throttle_exempt ,3) iombps_throttle_exempt,
       r.avg_io_throttle,
       r.sga_bytes,
       r.pga_bytes,
       r.buffer_cache_bytes,
       r.shared_pool_bytes
FROM  v$rsrcpdbmetric r,
      cdb_pdbs p
WHERE r.con_id = p.con_id
ORDER BY p.pdb_name;

DB Performance Profiles

In Oracle 12c Release 2 is possible to create a resource plan based on performance profiles which defines the resource management for groups of PDBs.

Each profile directive is made up of the following elements:

profile : The profile the directive relates to.
shares : The proportion of the CDB resources available to the PDB.
utilization_limit : The percentage of the CDBs available CPU that is available to the PDB.
parallel_server_limit : The percentage of the CDBs available parallel servers (PARALLEL_SERVERS_TARGET initialization parameter) that are available to the PDB.

Creating CDB Resource Plan:

DECLARE
l_plan VARCHAR2(30) := 'CDB_PLAN_TESTE';
BEGIN
DBMS_RESOURCE_MANAGER.clear_pending_area;
DBMS_RESOURCE_MANAGER.create_pending_area;

DBMS_RESOURCE_MANAGER.create_cdb_plan(
plan => l_plan,
comment => 'Profile Plan para Testes');

DBMS_RESOURCE_MANAGER.create_cdb_profile_directive(
plan     => l_plan,
profile => 'gold',
shares => 3,
memory_min => 50);

DBMS_RESOURCE_MANAGER.create_cdb_profile_directive(
plan                    => l_plan,
profile                 => 'silver',
shares                  => 2,
utilization_limit       => 40,
memory_limit            => 25);

DBMS_RESOURCE_MANAGER.validate_pending_area;
DBMS_RESOURCE_MANAGER.submit_pending_area;
END;
/

Information about the available CDB resource plans can be queried using the DBA_CDB_RSRC_PLANS view.

col comments format a30
col plan format a30
col profile format a30
SELECT PLAN, PROFILE, SHARES, UTILIZATION_LIMIT, PARALLEL_SERVER_LIMIT, MEMORY_MIN, MEMORY_LIMIT, COMMENTS
FROM DBA_CDB_RSRC_PLAN_DIRECTIVES
WHERE PLAN = 'CDB_PLAN_TESTE';

View parameter on CDB level. (If set at the CDB level they become default values used on all PDBs)

SHOW PARAMETER RESOURCE_MANAGER_PLAN

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'CDB_PLAN_TESTE';

Setting performance profile on PDB

ALTER SESSION SET CONTAINER=WINTPDB;

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'CDB_PLAN_TESTE';
ALTER SYSTEM SET DB_PERFORMANCE_PROFILE=gold SCOPE=SPFILE;
ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE OPEN;

SHOW PARAMETER DB_PERFORMANCE_PROFILE;

References:

https://oracle-base.com/articles/12c/multitenant-disk-iops-mdps-resource-management-for-pdbs-12cr2
https://oracle-base.com/articles/12c/multitenant-memory-resource-management-for-pdbs-12cr2
https://oracle-base.com/articles/12c/multitenant-resource-manager-pdb-performance-profiles-12cr2
https://www.linkedin.com/pulse/oracle-12c-release-2-new-feature-controlling-memory-gavin-soorma/