查看: 256|回复: 0

[Oracle数据库] Oracle 12c 多租户专题|12cR2中PDB内存资源管理

发表于 2017-11-12 08:00:00
太阳http代理AD
沃趣科技 周天鹏
原文链接 https://oracle-base.com/articles/12c/multitenant-memory-resource-management-for-pdbs-12cr2



在12.2之前的版本,我们根本没有办法控制一个单独的PDB能使用的内存总量。导致的结果就是“一个糟糕的邻居”可能占用大量内存从而导致同一个实例下其他PDB的性能下降。在Oracle 12.2中,你可以控制某单个PDB能使用的内存总量。

如果你的CDB中只有一个PDB,那么你就不需要做这些限制,因为你本来就想让这个单独的PDB用掉实例的所有内存。


PDB内存参数

下列参数都可以在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),总结如下:


设置PDB内存参数

设置PDB内存参数的过程和设置一个普通实例的存储参数并没有什么区别。下面的例子是修改SGA_TARGET参数。

检查CDB的当前设置:

  1. CONN / AS SYSDBA
  2. SHOW PARAMETER sga_target;
  3. NAME TYPE VALUE
  4. ------------------------------------ ----------- ------------------------------
  5. sga_target big integer 2544M
  6. SQL>
复制代码

检查PDB的当前设置:

  1. CONN / AS SYSDBA
  2. ALTER SESSION SET CONTAINER=pdb1;
  3. SHOW PARAMETER sga_target;
  4. NAME TYPE VALUE
  5. ------------------------------------ ----------- ------------------------------
  6. sga_target big integer 0
  7. SQL>
复制代码

设置PDB的SGA_TARGET参数:

  1. SQL> ALTER SYSTEM SET sga_target=1G SCOPE=BOTH;System altered.
  2. SQL> SHOW PARAMETER sga_target;
  3. NAME TYPE VALUE
  4. ------------------------------------ ----------- ------------------------------
  5. sga_target big integer 1G
  6. SQL>
复制代码

当我们尝试给PDB制定一个比所处的CDB更大的SGA时将会报如下的错误:

  1. SQL> ALTER SYSTEM SET sga_target=3G SCOPE=BOTH;
  2. ALTER SYSTEM SET sga_target=3G SCOPE=BOTH
  3. *ERROR at line 1:
  4. ORA-02097: parameter cannot be modified because specified value is invalid
  5. ORA-56747: invalid value 3221225472 for parameter sga_target; must be smaller
  6. than parameter sga_target of the root container
  7. SQL>
复制代码

如果你不再想控制这个参数的值,你可以把它设置为0或者reset掉。

  1. ALTER SYSTEM SET sga_target=0 SCOPE=BOTH;
  2. ALTER SYSTEM RESET sga_target;
复制代码


监控PDB的内存使用

Oracle提供了一些视图来监控PDB的资源使用(例如CPU、I/O、内存)。每个视图包含相同的信息,只是保留时间不同。

例子如下:

  1. CONN / AS SYSDBASET LINESIZE 150COLUMN pdb_name FORMAT A10COLUMN begin_time FORMAT A26COLUMN end_time FORMAT A26ALTER 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,
  2. p.pdb_name,
  3. r.begin_time,
  4. r.end_time,
  5. r.sga_bytes,
  6. r.pga_bytes,
  7. r.buffer_cache_bytes,
  8. r.shared_pool_bytesFROM v$rsrcpdbmetric r,
  9. cdb_pdbs pWHERE r.con_id = p.con_idORDER BY p.pdb_name;-- Last hours samples for PDB1SELECT r.con_id,
  10. p.pdb_name,
  11. r.begin_time,
  12. r.end_time,
  13. r.sga_bytes,
  14. r.pga_bytes,
  15. r.buffer_cache_bytes,
  16. r.shared_pool_bytesFROM v$rsrcpdbmetric_history r,
  17. cdb_pdbs pWHERE r.con_id = p.con_idAND p.pdb_name = 'PDB1'ORDER BY r.begin_time;-- All AWR snapshot information for PDB1.SELECT r.snap_id,
  18. r.con_id,
  19. p.pdb_name,
  20. r.begin_time,
  21. r.end_time,
  22. r.sga_bytes,
  23. r.pga_bytes,
  24. r.buffer_cache_bytes,
  25. r.shared_pool_bytesFROM dba_hist_rsrc_pdb_metric r,
  26. cdb_pdbs pWHERE r.con_id = p.con_idAND p.pdb_name = 'PDB1'ORDER BY r.begin_time;
复制代码




太阳http代理AD
回复

使用道具 举报