原文链接: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