ORACLE 12C探索之路06(PDB资源管理之内存)

PDB资源管理之内存

  1. 介绍

在Oracle 12c的多租户环境中,PDB的SGA使用情况可能会很不均衡,有些PDB占用了大量的SGA内存,导致某些PDB得不到足够的SGA,进而影响性能。在Oracle 12.2的多租户环境中,可以控制和监控每个PDB的主机资源使用情况。要控制每个PDB的主机资源使用,以下两个条件需要满足:
1). CDBROOT中初始化参数NONCDB_COMPATIBLE保持为默认的FALSE 2). CDBROOT中初始化参数MEMORY_TARGET没有设置或设置为0

  1. 管理PDB的SGA
1). SGA_TARGET参数控制PDB使用的最大SGA大小
   在PDB中,SGA_TARGET必须要小于或等于CDB$ROOT中的SGA_TARGET
2). SGA_MIN_SIZE参数控制PDB最小SGA大小
   SGA_MIN_SIZE参数的设置指导如下:
   SGA_MIN_SIZE设置的值必须要小于CDB$ROOT中SGA_TARGET的值50%
   SGA_MIN_SIZE设置的值必须要小于PDB中SGA_TARGET值的50%
   所有PDB的SGA_MIN_SIZE值总和必须要小于CDB$ROOT中SGA_TARGET的值50%

注意:只有当CDB$ROOT中SGA_TARGET为非0值时,PDB中的SGA_TARGET和SGA_MIN_SIZE才生效。
   alter session set container=pdbcndba;
   ALTER SYSTEM SET SGA_TARGET = 1500M SCOPE = BOTH;
   ALTER SYSTEM SET SGA_MIN_SIZE = 500M SCOPE = BOTH;

对于更细致的控制,可以设置PDB的DB_CACHE_SIZE和SHARED_POOL_SIZE。
  1. 管理PDB的PGA
在PDB级别上设置PGA_AGGREGATE_TARGET和PGA_AGGREGATE_LIMIT可以控制某个PDB的PGA使用情况。
PGA_AGGREGATE_TARGET是目标值,PGA_AGGREGATE_LIMIT是限制值。
如果PGA使用量达到PGA_AGGREGATE_LIMIT这个限制值,会话就会报错。
PGA_AGGREGATE_TARGET设置指导如下:
   必须小于或等于CDB$ROOT的PGA_AGGREGATE_TARGET
   必须小于或等于CDB$ROOT的PGA_AGGREGATE_LIMIT的50%
   必须小于或等于PDB的PGA_AGGREGATE_LIMIT的50%

PGA_AGGREGATE_LIMIT设置PDB的最大PGA使用量,设置指导如下:
   必须小于或等于CDB$ROOT的PGA_AGGREGATE_LIMIT
   必须大于或等于PDB的PGA_AGGREGATE_TARGET × 2

在PDB上设置PGA参数如下:
   alter session set container=pdbcndba;
   ALTER SYSTEM SET PGA_AGGREGATE_LIMIT = 500M SCOPE = BOTH;
   ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 100M SCOPE = BOTH;
  1. memory_target 跟 sga_target 的区别
memory_max_target/memory_target//sga_max_size/sga_target 
1、memory_max_target 就是oracle实例的最大的内存大小
2、memory_target   就是oracle实例实际内存的大小,最大值不能超过memory_max_target
3、 sga_max_size 系统全局区 最大值
4、sga_target  系统全局区 实际值 不能超过 sga_max_size
5、pag_aggregate_target  进程全局区)
如果memory_target=0 表示数据库不启用自动内存管理,那么sga_target(系统全局区) 跟pag_aggregate_target(进程全局区)
各自管理,互不干扰
如果memory_target 大于0 表示数据库启用自动内存管理,相当于sga_target(系统全局区) 跟pag_aggregate_target(进程全局区)
各自管理,互不干扰
如果 sga_target=0 表示数据库不使用 自动共享内存管理  那么
 db_buffer_cache_size,java_pool shared_pool,large_pool,stream_pool 都需要手动设置一个值
 如果 sga_target大于0 表示数据库使用 自动共享内存管理  那么
 db_buffer_cache_size,java_pool shared_pool,large_pool,stream_pool 不需要设置值,数据库会自动分配,内存使用率高
下面来讨论 一下 memory_target 跟sga_target 组合
  memory_target=0 && sga_target=0 不是自动共享内存管理  
那么  db_buffer_cache_size,java_pool shared_pool,large_pool,
stream_pool pag_aggregate_target 都需要手动设置一个值
 memory_target=0 && sga_target>0  是自动共享内存管理 那么  
db_buffer_cache_size,java_pool shared_pool,large_pool,stream_pool 可以设置也可以不设置 
pag_aggregate_target必须要设置一个值
sga_target=db_buffer_cache_size+java_pool+shared_pool+stream_pool
 memory_target>0 && sga_target>0  是自动内存管理 那么  sga_target 跟pag_aggregate_target 不需要设定值,
若设定了某个值,也表示 数据库启动的时候sga_target 跟pag_aggregate_target 最小不能低于设定的某个值
如 memory_target=1024 sga_target=800M 表示数据库最少要分配800M 给SGA
memory_target=sga_target+max(pag_aggregate_target,MAXIMUM PGA ALLOCATED)
当使用 dbca 创建默认创建实例的时候 如果系统内存小于4G 那么AMM 启用  大余4G AMM禁用 ASMM 启用,所以一般选择 高级安装
使用大表缓存 并行查询 在 RAC 或者单实例环境
DB_BIG_TABLE_CACHE_PERCENT_TARGET >0 &&PARALLEL_DEGREE_POLICY='AUTO' 或者PARALLEL_DEGREE_POLICY='ADAPTIVE'
使用大表缓存 窜行查询  只适用于单实例
DB_BIG_TABLE_CACHE_PERCENT_TARGET >0
监控 调优 内存管理, 就是说,内存管理设置那个值为最合理自动内存管理值建议
 select * from v$memory_target_advice order by memory_size;
  MEMORY_SIZE_FACTOR=1 表示当前数据库的内存, 通过ESTD_DB_TIME 来判断设置多大最合适
SGA 设置内存大小是按 颗粒度的整数倍 分配 查看数据库的颗粒度
  select * from v$sgainfo 
  自动共享内存管理值建议
  select * from v$sga_target_advice order by sga_size;
  1. 监控PDB的内存使用
以下两个视图用于监控PDB的资源使用
•  V$RSRCPDBMETRIC 
•  V$RSRCPDBMETRIC_HISTORY
SQL> show parameter NONCDB_COMPATIBLE
NAME     TYPE VALUE
------------------------------------ ----------- -------------------
noncdb_compatible     boolean FALSE
SQL> show parameter MEMORY_TARGET;
NAME     TYPE VALUE
------------------------------------ ----------- -------------------
memory_target     big integer 1520M
SQL> alter system set MEMORY_TARGET=0 SCOPE = BOTH;

System altered.
SQL> show parameter MEMORY_TARGET;

NAME     TYPE VALUE
------------------------------------ ----------- -------------------
memory_target     big integer 0

SQL> alter session set container=pdbcndba;

Session altered.

SQL> ALTER SYSTEM SET SGA_TARGET = 500M SCOPE = BOTH;

System altered.

SQL> ALTER SYSTEM SET SGA_MIN_SIZE = 100M SCOPE = BOTH;

System altered.

SQL>  ALTER SYSTEM SET PGA_AGGREGATE_LIMIT = 300M SCOPE = BOTH;

System altered.

SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 100M SCOPE = BOTH;

System altered.

SQL> COLUMN PDB_NAME FORMAT A10
SQL> SELECT r.CON_ID, p.PDB_NAME, 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;
  2  
    CON_ID PDB_NAME    SGA_BYTES  PGA_BYTES BUFFER_CACHE_BYTES SHARED_POOL_BYTES
---------- ---------- ---------- ---------- ------------------
 3 PDBCNDBA29335384    5145798      1327759316057790
 5 PDBCNDBA252131113  0      4190208010229033
SGA_BYTES – PDB当前SGA大小
BUFFER_CACHE_BYTES – PDB当前buffer cache大小
SHARED_POOL_BYTES – PDB当前shared pool大小
PGA_BYTES – PDB当前PGA大小
历史统计信息可以参考:DBA_HIST_RSRC_PDB_METRIC
  1. 控制PDB存储器的初始化参数
几个初始化参数可以控制PDB的内存使用情况。
当您使用PDB作为当前容器设置以下初始化参数时,这些参数将控制当前PDB的内存使用情况。当为PDB设置了一个或多个这些参数时,请确保CDB和其他PDB具有足够的内存用于其操作。
DB_CACHE_SIZE:
为PDB设置最小保证缓冲区缓存空间。
必须满足以下要求:
• 它必须小于或等于DB_CACHE_SIZECDB根目录设置的50%。
• DB_CACHE_SIZE所有PDB 的设置总和必须小于或等于DB_CACHE_SIZECDB根目录中设置的50%。
如果SGA_TARGET初始化参数在CDB根目录中设置为非零值,则这些要求不适用。
当SGA_TARGET初始化参数设置为非零,下列要求必须满足:
• DB_CACHE_SIZE的值加上SHARED_POOL_SIZE在PDB必须小于或等于该PDB的50%SGA_TARGET值。
• PDB中的DB_CACHE_SIZE加号值SHARED_POOL_SIZE必须小于或等于SGA_TARGETCDB级别值的50%。
• CDB中所有PDB 的DB_CACHE_SIZE加和总和SHARED_POOL_SIZE必须小于或等于SGA_TARGETCDB级别的50%。
SHARED_POOL_SIZE:
设置PDB的最小保证共享池空间。
必须满足以下要求:
•它必须小于或等于SHARED_POOL_SIZECDB根目录设置的50%。
•SHARED_POOL_SIZE所有PDB 的设置总和必须小于或等于SHARED_POOL_SIZECDB根目录中设置的50%。
如果SGA_TARGET初始化参数在CDB根目录中设置为非零值,则这些要求不适用。
当SGA_TARGET初始化参数设置为非零,下列要求必须满足:
•DB_CACHE_SIZE的值加上SHARED_POOL_SIZE在PDB必须小于或等于该PDB的50%SGA_TARGET值。
•PDB中的DB_CACHE_SIZE加号值SHARED_POOL_SIZE必须小于或等于SGA_TARGETCDB级别值的50%。
•CDB中所有PDB 的DB_CACHE_SIZE加和总和SHARED_POOL_SIZE必须小于或等于SGA_TARGETCDB级别的50%。
PGA_AGGREGATE_LIMIT:
设置PDB的最大PGA尺寸。
必须满足以下要求:
•它必须小于或等于PGA_AGGREGATE_LIMITCDB根目录中的设置。
•它必须大于或等于PGA_AGGREGATE_TARGETPDB中设置的两倍。
PGA_AGGREGATE_TARGET:
设置PDB的目标聚合PGA大小。
必须满足以下要求:
•它必须小于或等于PGA_AGGREGATE_TARGETCDB级别设定的值。
•它必须小于或等于PGA_AGGREGATE_LIMIT在CDB级设置的初始化参数值的50%。
•它必须小于或等于PGA_AGGREGATE_LIMITPDB中设置的值的50%。
SGA_MIN_SIZE:
设置PDB的最小SGA大小。
必须满足以下要求:
•它必须小于或等于SGA_TARGETCDB根目录设置的50%。
•它必须小于或等于SGA_TARGETPDB中设置的50%。
•SGA_MIN_SIZE所有PDB 的设置总和必须小于或等于SGA_TARGETCDB根目录中设置的50%。
如果SGA_TARGET初始化参数未设置或0在CDB根目录中设置为(零),则这些要求不适用。
最佳做法是将SGA_MIN_SIZE所有PDB 的值的总和限制为CDB的SGA大小的50%或更少。
SGA_TARGET:
设置PDB的最大SGA大小。
SGA_TARGET只有在SGA_TARGET初始化参数在CDB根目录中设置为非零值时,才会强制执行PDB中的设置。SGA_TARGETPDB中的设置必须小于或等于SGA_TARGETCDB根中的设置。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容