【Oracle 12c 多租户专题】PDB的内存资源管理
2017-09-15 14:14
363 查看
原文链接:https://oracle-base.com/articles/12c/multitenant-memory-resource-management-for-pdbs-12cr2
在12.2之前的版本,我们根本没有办法控制一个单独的PDB能使用的内存总量。导致的结果就是“一个糟糕的邻居”可能占用大量内存从而导致同一个实例下其他PDB的性能下降。在Oracle 12.2中,你可以控制某单个PDB能使用的内存总量。
如果你的CDB中只有一个PDB,那么你就不需要做这些限制,因为你本来就想让这个单独的PDB用掉实例的所有内存。
* 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.
关于哪些值可以设置也有一些限制,官方文档中给出了详细的解释(http://docs.oracle.com/database/122/ADMIN/using-oracle-resource-manager-for-pdbs-with-sql-plus.htm#ADMIN-GUID-A3459A8B-A36A-44D4-9FCD-75CA0E3D3252),总结如下:
* CDB中的NONCDB_COMPATIBLE参数必须设为FALSE
* CDB中的MEMORY_TARGET参数未设置或者为0
* 独立的参数会有不同的最大值,来防止你给一个PDB分配过量的内存。如果你尝试设置一个错误的值将会报错。
检查CDB的当前设置:
检查PDB的当前设置:
设置PDB的SGA_TARGET参数:
当我们尝试给PDB制定一个比所处的CDB更大的SGA时将会报如下的错误:
如果你不再想控制这个参数的值,你可以把它设置为0或者reset掉。
* VRSRCPDBMETRIC:一个PDB对应一条记录,只保留最近一分钟的数据∗VRSRCPDBMETRIC_HISTORY:一个PDB对应61行记录,保留最近60分钟的数据
* DBA_HIST_RSRC_PDB_METRIC:AWR快照,保留时间基于AWR的保留时间
例子如下:
在12.2之前的版本,我们根本没有办法控制一个单独的PDB能使用的内存总量。导致的结果就是“一个糟糕的邻居”可能占用大量内存从而导致同一个实例下其他PDB的性能下降。在Oracle 12.2中,你可以控制某单个PDB能使用的内存总量。
如果你的CDB中只有一个PDB,那么你就不需要做这些限制,因为你本来就想让这个单独的PDB用掉实例的所有内存。
PDB内存参数
下列参数都可以在PDB级别进行设置:* 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.
关于哪些值可以设置也有一些限制,官方文档中给出了详细的解释(http://docs.oracle.com/database/122/ADMIN/using-oracle-resource-manager-for-pdbs-with-sql-plus.htm#ADMIN-GUID-A3459A8B-A36A-44D4-9FCD-75CA0E3D3252),总结如下:
* CDB中的NONCDB_COMPATIBLE参数必须设为FALSE
* CDB中的MEMORY_TARGET参数未设置或者为0
* 独立的参数会有不同的最大值,来防止你给一个PDB分配过量的内存。如果你尝试设置一个错误的值将会报错。
设置PDB内存参数
设置PDB内存参数的过程和设置一个普通实例的存储参数并没有什么区别。下面的例子是修改SGA_TARGET参数。检查CDB的当前设置:
CONN / AS SYSDBA SHOW PARAMETER sga_target; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sga_target big integer 2544M SQL>
检查PDB的当前设置:
CONN / AS SYSDBA ALTER SESSION SET CONTAINER=pdb1; SHOW PARAMETER sga_target; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sga_target big integer 0 SQL>
设置PDB的SGA_TARGET参数:
SQL> ALTER SYSTEM SET sga_target=1G SCOPE=BOTH; System altered. SQL> SHOW PARAMETER sga_target; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sga_target big integer 1G SQL>
当我们尝试给PDB制定一个比所处的CDB更大的SGA时将会报如下的错误:
SQL> ALTER SYSTEM SET sga_target=3G SCOPE=BOTH; ALTER SYSTEM SET sga_target=3G SCOPE=BOTH * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-56747: invalid value 3221225472 for parameter sga_target; must be smaller than parameter sga_target of the root container SQL>
如果你不再想控制这个参数的值,你可以把它设置为0或者reset掉。
ALTER SYSTEM SET sga_target=0 SCOPE=BOTH; ALTER SYSTEM RESET sga_target;
监控PDB的内存使用
Oracle提供了一些视图来监控PDB的资源使用(例如CPU、I/O、内存)。每个视图包含相同的信息,只是保留时间不同。* VRSRCPDBMETRIC:一个PDB对应一条记录,只保留最近一分钟的数据∗VRSRCPDBMETRIC_HISTORY:一个PDB对应61行记录,保留最近60分钟的数据
* DBA_HIST_RSRC_PDB_METRIC:AWR快照,保留时间基于AWR的保留时间
例子如下:
CONN / AS SYSDBA SET LINESIZE 150 COLUMN pdb_name FORMAT A10 COLUMN begin_time FORMAT A26 COLUMN end_time FORMAT A26 ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'; ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YYYY HH24:MI:SS.FF'; -- Last sample per PDB. SELECT r.con_id, p.pdb_name, r.begin_time, r.end_time, 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; -- Last hours samples for PDB1 SELECT r.con_id, p.pdb_name, r.begin_time, r.end_time, r.sga_bytes, r.pga_bytes, r.buffer_cache_bytes, r.shared_pool_bytes FROM v$rsrcpdbmetric_history r, cdb_pdbs p WHERE r.con_id = p.con_id AND p.pdb_name = 'PDB1' ORDER BY r.begin_time; -- All AWR snapshot information for PDB1. SELECT r.snap_id, r.con_id, p.pdb_name, r.begin_time, r.end_time, r.sga_bytes, r.pga_bytes, r.buffer_cache_bytes, r.shared_pool_bytes FROM dba_hist_rsrc_pdb_metric r, cdb_pdbs p WHERE r.con_id = p.con_id AND p.pdb_name = 'PDB1' ORDER BY r.begin_time;
相关文章推荐
- Oracle 12c CDB 和 PDB 表空间管理和配置 说明
- Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
- Oracle 12c 多租户在 CDB 中 Plug A PDB,Unplugging A PDB
- Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
- Oracle 12c 多租户在 CDB 中 Plug A PDB,Unplugging A PDB
- ORACLE 12C CDB中PDB参数管理机制
- Oracle 12c 多租户 CDB 与 PDB之 shared undo 与 Local undo 切换
- Oracle12c多租户如何连接到CDB或PDB、CDB与PDB容器切换
- Oracle 12c 多租户 CDB 与 PDB之 shared undo 与 Local undo 切换
- Oracle12c多租户如何连接到CDB或PDB、CDB与PDB容器切换
- Oracle12C多租户管理用户、角色、权限
- oracle 12c 多租户 pdb 恢复(单个pdb数据文件、非系统pdb表空间、整个pdb数据库)
- oracle12c之 控制pdb中sga 与 pga 内存使用
- oracle 12c 多租户 pdb 恢复(单个pdb数据文件、非系统pdb表空间、整个pdb数据库)
- oracle12c之 控制pdb中sga 与 pga 内存使用
- Oracle 12c 多租户 CDB 与 PDB 级别 expdb 与 impdb(表、用户、全库)
- Oracle 12c 多租户 CDB 与 PDB 备份
- Oracle 12c 多租户 CDB 与 PDB 级别 expdb 与 impdb(表、用户、全库)
- Oracle 12c 多租户专题|12cR2中PDB内存资源管理
- Oracle 12c 多租户专题|12cR2中PDB内存资源管理