For most systems, a single default buffer pool is generally adequate. However, database administrators with detailed knowledge of an application's buffer pool may benefit from configuring multiple buffer pools.
For segments that have atypical access patterns, consider storing blocks from these segments in two separate buffer pools: the KEEP pool and the RECYCLE pool. A segment's access pattern may be atypical if it is constantly accessed (sometimes referred to as hot) or infrequently accessed (such as a large segment that is accessed by a batch job only once a day).
You don't point an application to a pool.
>> so we have to specify any segement to use KEEP pool ? as by default ALL application connect to recycle pool ?
Yes, you need to pin objects in the pools. Applications do not "connect" to the pool. It requests data blocks. Those data blocks are in one of the pools.
>> and all application by default will use recycle pool then ... ?
All connections use the same SGA. What database blocks are in what pools is up to the DBA based on application usage.
Personally, I've NEVER used KEEP or RECYCLE. I've let Oracle do what it deems best in the SGA.
Whenever you try to out think Oracle, you normally make things worse.
>> create more than one pool for different application can improvement
It "can". Everything depends on the data and how the applications access the data. Understanding about the different pools and what they do is just another tool available to use.
I've been doing Oracle for over 25 years and have never used them.
>> but we don't know and anyway to check this out ?
There are queries I've seen that claim to show pool usage,
>> ASMM right?
Correct.
>> but still only \KEEP and recycle pool right?
Yes.
>> how?
It's in the docs. Have you look in the doc link posted above?
Using Multiple Buffer Pools
To define a default buffer pool for an object, use the
BUFFER_POOL
keyword of theSTORAGE
clause. This clause is valid for the following SQL statements:
CREATE TABLE
CREATE CLUSTER
CREATE INDEX
ALTER TABLE
ALTER CLUSTER
ALTER INDEX
>> this also means more than one pool for application?
No. You cannot create buffer pools. Applications don't get a pool.
The three pools handle database block storage in different ways. That is all. They all relate to how long the read database blocks reside in memory. Nothing else.
Again, everything you need is in the docs:
https://docs.oracle.com/database/121/TGDBA/tune_buffer_cache.htm#TGDBA95405
To improve database performance for table scans and LOB data access, especially for workloads that are limited by I/O throughput or response time, consider using force full database caching mode whenever the size of the database buffer cache is greater than the size of the database.
>> checked that but the complete pool create statement seems not included, is it ?
I don't understand what you are asking. If you are asking how to create a pool, you don't. We have already covered this.
>>I mean I don't the full command to create/alter/manager the buffer pool.
You don't create/alter pools. The only thing you can do is set the memory sizes for those pools.
>>and you are saying ASMM will handle it for us and we
Everything you need to know is in the docs...
https://docs.oracle.com/database/121/ADMIN/memory.htm#ADMIN00207
Pay attention to the word "Manually":
Table 6-3 Manually Sized SGA Components that Use SGA_TARGET Space
>>and application do not even know how it use and which pool we are using at all ?
Exactly!
>> depreciated and need to do in that way anymore?
It is a tool still available to you. You need to understand the pros and cons. We really cannot say if you should use it or not. Every database is different.
I do agree with Franck and mentioned it above: I've never messed with them in over 25 years of doing this. You probably shouldn't need to worry about them either.
You now know they exist. You should know the purpose for each one. Now forget about them and move on to another Oracle subject area. You probably won't ever use them.
The only thing you can do is set the memory sizes
To change to automatic shared memory management if manual shared memory management is currently enabled:
If manual shared memory management is currently enabled, but you would like Oracle Database to help you determine optimal sizes of the SGA and instance PGA, you can disable manual shared memory management and enable automatic shared memory management.
It can only use up to MEMORY_TARGET.
To change between manual memory management and ASMM:
Ref: https://docs.oracle.com/en/database/oracle/oracle-database/20/admqs/managing-the-oracle-instance.html#GUID-5740E372-F950-4A99-A3F8-4D3FF5D0D62D
In SQL*Plus, run the following query in the database to obtain a value for SGA_TARGET:
SELECT (
(SELECT SUM(value) FROM V$SGA) -
(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)
) "SGA_TARGET"
FROM DUAL;
1. In EM Express, from the Configuration menu, select Initialization Parameters.
The Initialization Parameters page appears.
2. In the Search field, enter SGA_TARGET.
3. Select SGA_TARGET, and then click Set.
The Set Initialization Parameter page appears.
4. In the Value field, enter the SGA_TARGET value from step 1 above (354M in this example), specify a Scope of Memory, and then click OK.
A confirmation message appears.
5. From the Configuration menu, select Memory.
Note that in the SGA Memory subsection of the Memory Settings section, the Management Mode value is now Auto. This indicates that automatic shared memory management is enabled.
Enabling Manual Shared Memory Management
This section describes how to enabled manual shared memory management.
Follow these steps to enable manual shared memory management:
1. In Oracle Enterprise Manager Database Express (EM Express), from the Configuration menu, select Initialization Parameters.
The Initialization Parameters page appears.
2. In the Search field, enter SGA_TARGET.
3. Select SGA_TARGET, and then click Set.
The Set Initialization Parameter page appears.
4. In the Value field, enter 0, specify a Scope of Memory, and then click OK.
A confirmation message appears.
5. In the Search field, enter MEMORY_TARGET.
6. Select MEMORY_TARGET, and then click Set.
The Set Initialization Parameter page appears.
7. In the Value field, enter 0, specify a Scope of Memory, and then click OK.
A confirmation message appears.
From the Configuration menu, select Memory.
Note that under the SGA Memory section, the Management Mode value is now Manual. This indicates that manual shared memory management is enabled.
MEMORY_TARGET = SGA_TARGET + MAX(PGA_AGGREGATE_TARGET, MAXIMUM PGA ALLOCATED)
After startup, you can then dynamically change MEMORY_TARGET to a nonzero value, provided that it does not exceed the value of MEMORY_MAX_TARGET.
Then they can reduce the OS memory usage at will to free up memory for other programs on the server.
So, your DBA and developers should have already figured out what the correct setting of that parameter should be.
or one of the MANY queries out there. You also need to apply personal knowledge of the applications that use the system.If you monitor memory usage for 10 months starting in February and see the optimal memory setting is 10G and make it that and the Oracle Advisers don't know about the massive year-end processing that takes place every January, performance may suffer. That is where the personal knowledge is important. You don't tune a database in a vacuum. You need to understand the users and applications.
The advisers are a great place to start but they cannot replace common sense and personal knowledge of how the database works.
https://docs.oracle.com/database/121/TGDBA/tune_buffer_cache.htm#TGDBA538