A reader, December 11, 2014 - 9:02 pm UTC
Multitenant requires additional licenses which we are not in a position to invest in right now. It will happen further down the road. At that stage, we will convert from non-CDB/PDB to CDB/PDB.
With multitenancy, I am still confused about less memory statement. If I have say 5 databases. Each database has a memory_target of say 4GB. If I plug all 5 databases into a container database, I would still need memory_target of 4GB for each database. So how do I save memory?
Thanks...
December 12, 2014 - 10:24 am UTC
If you have 5 databases, you have a minimum of 100 - if not 200 processes for the backgrounds and at least 150 if not more dedicated servers for your connection pools (assuming the app server uses a connection pool of 30 for each database - which is low as most people in middle ware land seem to like to create hundreds of connections for some unknown, illogical reason)
So you have ~350 processes with PGAs sitting out there (a few meg each)
Go multitenant. You have ~30 backgrounds, depending on how you configure it. If you have say 16 cores, you might set up a DRCP pool (that can be used by all PDB's) of 32 or 64. You'll have under 100 processes now. That much less PGA being used.
Also, the sum of the SGA's doesn't have to be your memory target, there are many redundant structures that won't be redundant anymore since you have a single SGA as well.
So no, you wouldn't need a memory target of 4gb for each database. You'll have less dedicated servers, far fewer backgrounds
A reader, December 12, 2014 - 4:05 pm UTC
Still confused. The databases have MEMORY_TARGET of 20GB+ each. Most of the memory goes towards buffer cache and PGA workarea. In the grand scheme of things, the memory taken up by redundant SGA structures and backgrounds would be small percentage of total memory required. The number of background processes would be drastically reduced, I agree but sizable impact on overall memory, I still do not understand.
Thanks...
December 17, 2014 - 6:29 pm UTC
I tried to do some math above...
You have 5 databases with 5 instances:
100-200 backgrounds
AT LEAST 150 dedicated servers (but we know there will be more - because middle tier people thing 30 connections is nothing, 300 is low, 3,000 is OK). So, lets just say 150 dedicated servers plus 200 backgrounds
350 processes each with PGA.
Now you have 5 databases with 1 instance:
say 40 backgrounds
you configure a database resident connection pool sized on the number of cores you have - say on an 8 core machine you might have between 1 and 80 processes in this pool. 80 at most. So say 80.
You have 120 processes - 1/3 the PGA.
and the sum of the SGA's would not be the size of the new SGA - there are redundancies.
As you go up in the number of databases - the numbers get even better. You are fixed at 120 processes with multitenant - regardless of how many databases you desire to open. With instance per database - every database you add adds a ton more processes. That not only consumes memory but kills the OS. OS takes more memory managing more processes.
restrict pdb memory usage
Michael, February 02, 2015 - 10:16 am UTC
short one:
is it possible to restrict PDB memory usage by setting memory parameters (memory_max_target) at PDB level?
thanks,
michael