专栏首页沃趣科技Oracle 12c 多租户专题|12cR2中PDB内存资源管理

Oracle 12c 多租户专题|12cR2中PDB内存资源管理

原文链接 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级别进行设置:

  • 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、内存)。每个视图包含相同的信息,只是保留时间不同。

  • V$RSRCPDBMETRIC:一个PDB对应一条记录,只保留最近一分钟的数据
  • V$RSRCPDBMETRIC_HISTORY:一个PDB对应61行记录,保留最近60分钟的数据
  • DBA_HIST_RSRC_PDB_METRIC:AWR快照,保留时间基于AWR的保留时间

例子如下:

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,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.sga_bytes,
       r.pga_bytes,
       r.buffer_cache_bytes,
       r.shared_pool_bytesFROM   v$rsrcpdbmetric r,
       cdb_pdbs pWHERE  r.con_id = p.con_idORDER BY p.pdb_name;-- Last hours samples for PDB1SELECT 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_bytesFROM   v$rsrcpdbmetric_history r,
       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,
       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_bytesFROM   dba_hist_rsrc_pdb_metric r,
       cdb_pdbs pWHERE  r.con_id = p.con_idAND    p.pdb_name = 'PDB1'ORDER BY r.begin_time;

本文分享自微信公众号 - 沃趣科技(woqutech),作者:周天鹏(译)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle 12c系列(四)|资源隔离之IO、内存、CPU

    作者 姚崇 出品 沃趣技术 服务器主机提供IO、内存、CPU、存储空间等资源为数据库使用,Oracle使用Flex Diskgroup为数据库提供存储空...

    沃趣科技
  • 产品|QData Cloud 完美兼容 Oracle 12c 容器数据库

    QData Cloud 高性能数据库云平台,不仅标志着沃趣科技云产品时代的开启,同时也是一次在数据库领域的重大技术创新,凭借强大的研发实力、创新技术、精益求精的...

    沃趣科技
  • Oracle 12c系列(二)|PDB的创建

    作者 杨禹航 出品 沃趣技术 PDB数据库的创建可以从现存的数据库中复制数据文件,包括种子容器、可插拔数据库、non-CDB数据库,创建时可以使用CRE...

    沃趣科技
  • 利用Python程序实现某OA系统的自动定位

    本文介绍了笔者通过python程序实现某OA系统自动考勤打卡功能及相关逻辑原理的解析。

    FB客服
  • kubernetes-issue-1:ephemeral-storage引发的pod驱逐问题

    A.0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.

    千里行走
  • MySQL优化总结

    存储引擎:MySQL中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。

    KEN DO EVERTHING
  • ESLint报错解决方案(error: No ESLint configuration found)

    在项目部署中出现报错error: No ESLint configuration found,编辑器vscode。

    从入门到进错门
  • emWin洗衣机简易操作界面,含uCOS-III和FreeRTOS两个版本

    配套例子: V6-904_STemWin提高篇实验_洗衣机简易操作界面(uCOS-III) V6-905_STemWin提高篇实验_洗衣机简易操作界面(Fre...

    armfly
  • 数据库性能优化(MySQL)

    序: 即使有较长的缓存有效期和较理想的缓存命中率,但是缓存的创建和缓存过期后的重建都是需要访问数据库的。对数据库写操作不是很容易引入缓存策略。 11.1...

    李海彬
  • 简述 HTTP 首部字段.

    HTTP 首部字段是构成 HTTP 报文的要素之一。在客户端与服务器之间以 HTTP 协议进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外...

    JMCui

扫码关注云+社区

领取腾讯云代金券