Keep buffer pool tuning

hello,
we have development database 10gR2
ASSM is ON...
and the system memory is
SQL> sho sga
Total System Global Area 293601280 bytes
Fixed Size 1290232 bytes
Variable Size 209715208 bytes
Database Buffers 79691776 bytes
Redo Buffers 2904064 bytes
SQL> sho parameter sga_
NAME TYPE VALUE
sga_max_size big integer 280M
sga_target big integer 280M
SQL> select component,current_size from v$sga_dynamic_components;
COMPONENT CURRENT_SIZE
shared pool 171966464
large pool 4194304
java pool 12582912
streams pool 20971520
DEFAULT buffer cache 79691776
KEEP buffer cache 0
RECYCLE buffer cache 0
DEFAULT 2K buffer cache 0
DEFAULT 4K buffer cache 0
DEFAULT 8K buffer cache 0
DEFAULT 16K buffer cache 0
DEFAULT 32K buffer cache 0
ASM Buffer Cache 0
i need to ping around 5 to 6 tables in keep buffer pool since they are frequently accessed ....so just need help on how can i properly configure the keep buffer pool sizewise...
thank you very much

Why do you need a keep pool?
Why would the default buffer cache not be sufficient?
See http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1590999000346302363
99.999999999999% of the world does not need, want, nor desire a keep and recycle pool, they add
to your administrative overhead and are for very special edge cases Edited by: Dom Brooks on Apr 19, 2011 12:00 PM

Similar Messages

  • Keep buffer pool after restart of the server

    Hi,
    What happens to the blocks in keep buffer pool when database is restarted. I was thinking that Oracle database will reload the object that I have declared storage as keep. But seems like that's not how how database behaves. How can I make sure when I restart the database server it reloads the objects into keep pool which I have declared storage as keep pool?
    Thanks
    S

    Hi S,
    What happens to the blocks in keep buffer pool when database is restarted.It gets flushed out, like the whole SGA!
    But fear not, it will populate itself without too much disk I/O!
    Remember, it's you job to make sure that the KEEP pool is always large enough to hold all objects assigned to the KEEP pool, plus a small fusge-factor to accommodate growth:
    http://www.oracle-training.cc/s49.htm
    Hope this helps . . .
    Donald K. Burleson
    Oracle Press author
    Author of "Oracle Tuning: The Definitive Reference"
    http://www.rampant-books.com/book_2005_1_awr_proactive_tuning.htm

  • Query about Keep Buffer Pool and Recycle Buffer Pool

    What will Keep Buffer Pool and Recycle Buffer Pool contains actually in Database Buffer Cache, specially what type of objects? I know the definitions but need to know the practical aspects about them.

    918868 wrote:
    What will Keep Buffer Pool and Recycle Buffer Pool contains actually in Database Buffer Cache, specially what type of objects? I know the definitions but need to know the practical aspects about them.I believe you have already got the answer from the experts. Just to echo the same, in any cache, either Buffer Cache(default), Keep or Recycle, its going to be data buffers which are actually the placeholders for the data blocks that are available on the disk. The default cache is going to throw away the lesser used buffers as fast as possible. And if you don't want this to happen, you can use either of the other two, indepandant caches-Recycle and Keep. The keep cache , as the name suggests would keep the buffers in it for a more loonger duration compared to the default cache. This probably would be a better idea when you know that some buffers are meant to be reused again and again. Recycle is going tobe for those, which are very seldom used and you don't want them to choke up the caches at all. For the buffers kept in the Recycle cache, they would be thrown out almost instantly.
    Read the link that's given to you. It contains a lot of stuff that would further make things clear.
    Aman....

  • Db_keep_cache_size shows 0 when i keep object in KEEP buffer pool !

    Dear Frineds ,
    I use Oracle 10g . Form the oracle 10g documentaiton, I get the following information regarding ASMM (Automatic Shared Memory Management) :
    The following pools are manually sized components and are not affected by Automatic Shared Memory Management:
    Log buffer
    Other buffer caches (such as KEEP, RECYCLE, and other non-default block size)
    Fixed SGA and other internal allocations
    Now plz see the following examle :
    1) SQL> select sum(bytes)/1024/1024 " SGA size used in MB" from v$sgastat where name!='free memory';
    SGA size used in MB
    247.09124
    2) SQL> show parameter keep_
    NAME TYPE VALUE
    db_keep_cache_size big integer 0 (Here db_keep_cache_size is 0 )
    3) Now I keep the scott's dept table to KEEP cache :
    SQL> select owner,segment_type,segment_name,buffer_pool from dba_segments where buffer_pool != 'DEFAULT';
    no rows selected
    SQL> alter table scott.dept storage(BUFFER_POOL KEEP);
    Table altered.
    SQL> select owner,segment_type,segment_name,buffer_pool from dba_segments where buffer_pool != 'DEFAULT';
    OWNER SEGMENT_TYPE SEGMENT_NAME
    SCOTT TABLE DEPT
    4)
    After doing this , I have to see the following parameter :
    SQL> show parameter keep
    NAME TYPE VALUE
    db_keep_cache_size big integer 0
    SQL> select sum(bytes)/1024/1024 " SGA size used in MB" from v$sgastat where name!='free memory';
    SGA size used in MB
    246.76825
    Here I see that my sga is used but "db_keep_cache_size" still shows the '0' .
    Can u plz explain why this parameter value shows '0' now ?
    Thx in advance ... ...

    Hi,
    I am not sure I have understood the question fully but if you are trying to monitor usage of the buffer pools you should use some of the dynamic views like in the example query below. If this is not what you are interested in let me know.
    SELECT NAME, BLOCK_SIZE, SUM(BUFFERS)
    FROM V$BUFFER_POOL
    GROUP BY NAME, BLOCK_SIZE
    HAVING SUM(BUFFERS) > 0;

  • Table in Keep Buffer Pool

    Hi DBAs,
    I need to identify the database tables and indexes which I can put in KEEP Pool. I need your hellp
    How can I identify the object which are good candidate for KEEP Pool ? ( I want to put all the tables/indexes which are more than 50% in db buffer)
    How can I cache these table and indexes in KEEP Pool ?
    Thanks
    -Samar-

    Hi,
    IMO tables in the KEEP pool should be relatively small, and they should fit in the pool in their entirety.
    Above all those tables should be lookup tables as opposed to fact tables.
    To get them in the pool
    issue
    alter table <table_name> storage (buffer pool keep)
    Sybrand Bakker
    Senior Oracle DBA

  • KEEP and RECYCLE buffer pools question...

    About the DB buffer cache's two optional buffer pools: KEEP and RECYCLE pools.
    If i want a table to be kept in KEEP buffer pool, can i specify that in CREATE TABLE or ALTER TABLE syntax? Or is it possible only at tablespace level?

    HI,
    You can keep tables at keep pool by specifying storage (buffer_pool keep) parameter.

  • Clearing Data Buffer Pools

    Is it possible to clear the buffer pool in Oracle without bouncing the database? We are configuring our database to use the keep buffer pools, and I wanted to test the performance improvements with pinning different tables into the keep buffer. Unfortunately the only way I can clear the buffer is to bounce the database, which disrupts several other people. I was hoping there was something like the "alter system flush shared_pool" to do this.
    Any help would be greatly appreciated...

    Is it possible to clear the buffer pool in Oracle without bouncing the database? We are configuring our database to use the keep buffer pools, and I wanted to test the performance improvements with pinning different tables into the keep buffer. Unfortunately the only way I can clear the buffer is to bounce the database, which disrupts several other people. I was hoping there was something like the "alter system flush shared_pool" to do this.
    Any help would be greatly appreciated... i guess there is no straight forward method like 'flush shared pool'
    maybe you can try running a full table scan or a cartesian join on two large tables
    which will flush the buffers of the tables that you are trying to tune.
    this is exactly the situation why you want to go for 'keep' buffer pool.

  • MULTIPLE BUFFER POOL의 개념 및 사용 방법 (ORACLE8)

    제품 : ORACLE SERVER
    작성날짜 : 1999-05-13
    Multiple Buffer Pool의 개념 및 사용 방법
    1. 필요성
    table이나 index 등 segment는 그 사용 빈도나 중요도 등에 따라 memory에
    buffering되는 것을 달리 할 필요가 있다. Oracle8에서는 buffer cache에 대해서
    multiple buffer pool이라는 새로운 특성의 개념을 제공하여 segment마다 다른
    buffer를 사용할 수 있도록 하고 있다.
    multiple buffer pool은 'keep', 'recycle', 그리고 'default' buffer pool로
    구성되며, 이것을 control하기 위한 internal algorithm은 하나의 buffer pool을
    사용할 때와 대부분 마찬가지다. 즉, 기존의 CACHE option이나 full table scan 시
    LRU end에 위치시키는 것 등은 모두 변함이 없으며, 단지 그러한 기법들이 각
    buffer마다 별도로 적용된다는 것 뿐이다.
    2. buffer의 종류
    multiple buffer pool의 주요 목적은 서로 다른 형태로 사용되는 것을 나누어 놓
    아 서로 방해가 되지 않도록 하는 것으로 정리할 수 있으며, 각각 다음과 같은
    경우에 사용하도록 한다.
    (1) KEEP buffer pool : 가능한 한 memory에 오랫동안 유지되어져야 하는
    segment를 위해 사용되어져야 한다. 자주 사용되어지고 cache size의 약 10%
    전후의 크기를 가진 segment가 이 pool을 사용하기에 적당하다.
    그러나, 여기에서도 Oracle7.3의 CACHE option과 마찬가지로 새로이 access
    되는 segment에 의해 LRU end 쪽으로 이동하는 것이 가능하므로 항상 cache
    된다고 보장할 수는 없다.
    적당한 크기로 지정하는 것이 중요한데 당연히, 동시에 memory에 올려지기를
    바라는 object들의 크기의 합보다는 커야 한다.
    (2) RECYCLE buffer pool : 자주 사용되어지지 않거나, buffer pool의 두배보다
    큰 정도의 큰 segment가 index search를 하는 작업 등에 사용되어지도록 한다.
    (3) DEFAULT buffer pool : 위의 두 buffer pool에 할당되지 않은 나머지는
    default buffer pool이 된다. 그러므로 KEEP이나 RECYCLE buffer pool은
    없어도 반드시 default buffer pool은 존재하게 된다.
    이 buffer pool은 Oracle7의 하나의 buffer pool과 같다.
    3. buffer pool을 설정하는 방법
    이러한 종류의 buffer pool을 지정하기 위해서 BUFFER_POOL_KEEP과
    BUFFER_POOL_RECYCLE이라는 parameter가 존재하며, DB_BLOCK_BUFFERS
    와 DB_BLOCK_LRU_LATCHES parameter도 함께 고려하여야 한다.
    syntax는 다음과 같다.
    BUFFER_POOL_KEEP=(buffers:<value>,lru_latches:<value>) 혹은
    BUFFER_POOL_KEEP=<value>
    BUFFER_POOL_RECYCLE=(buffers:<value>,lru_latches:<value>) 혹은
    BUFFER_POOL_RECYCLE=<value>
    위의 syntax에서 보는 바와 같이 각 pool에 대해서 buffer의 갯수 뿐 아니라
    LRU latch의 갯수도 지정할 수 있다. 만약 지정하지 않으면 그 pool에 대해서
    하나의 latch가 할당되는 것이다.
    DEFAULT pool에 대해서는 명시적으로 block의 갯수나 latch의 갯수를 지정할
    수 없고, 대신 전체 block의 갯수 (DB_BLOCK_BUFFERS)와 전체 LRU latch의
    갯수 (DB_BLOCK_LRU_LATCHES)에서 KEEP과 RECYCLE에 할당된 각각의
    값을 뺀 것만큼 default pool에 할당된다.
    간단한 예제로 설명하면 다음과 같다.
    예를 들어 initSID.ora file에 다음과 같이 parameter가 설정되어 있다고 가정한다.
    DB_BLOCK_BUFFERS=1000
    DB_BLOCK_LRU_LATCHES=6
    BUFFER_POOL_KEEP=(buffers:400,lru_latches:2)
    BUFFER_POOL_RECYCLE=100
    이러한 경우 KEEP pool에 대해서는 400개의 block과 2개의 LRU latch가 할당
    되고 RECYCLE pool에는 100개의 block과 1개의 LRU latch가 할당된다. 그리
    고 DEFAULT pool에는 500 (1000-400-100) 개의 block과 3 (6-2-1)개의 LRU latch
    가 할당되게 된다.
    각 LRU queue에 대해서 block은 균등하게 배분된다.
    즉, 이 예에서 DEFAULT queue는 LRU 1번이 167개의 block을 LRU2도 167개, 그리
    고 LRU3은 166개의 block을 가지게 되며, KEEP queue는 두개의 latch가 각각
    200개씩의 block을 그리고 RECYCLE queue는 100개의 block을 가지게 된다.
    이러한 정보는 v$buffer_pool을 통해 확인이 가능하며,
    이 예의 경우 다음과 같이 조회된다. 여기에서 set_count가 각 pool에 할당된
    latch의 갯수이며, lo_bnum과 hi_bnum이 buffer의 range이다.
    SQL> select * from v$buffer_pool;
    NAME      LO_SETID HI_SETID SET_COUNT BUFFERS LO_BNUM HI_BNUM
         0 0 0 0 0 0
    KEEP 4 5 2 400 0 399
    RECYCLE 6 6 1 100 400 499
    DEFAULT 1 3 3      500 500 999
    각 queue는 최소 50개의 block은 할당받아야 하며, 그렇지 않은 경우에는 오류
    가 발생한다. 즉 예를 들어, BUFFER_POOL_KEEP=(buffers:100, lru_latches:3)과
    같이 설정하면 alert.log file에 "Incorrect parameter specification for
    BUFFER_POOL_KEEP"이라는 오류 메시지가 적히게 되며, 100개의 block에 대해서
    최대 두개의 LRU latch만이 가능하게 된다.
    4. buffer pool을 지정하는 방법
    BUFFER_POOL이라는 Oracle8에서 새로 추가된 storage 절의 parameter를 이용
    하여 segment가 사용할 default pool을 지정할 수 있다. segment의 모든 block은
    지정된 pool을 사용하게 되며, 아래의 예제와 같이 사용하면 된다.
    CREATE TABLE keep_table(t NUMBER(10)) STORAGE (BUFFER_POOL KEEP);
    ALTER TABLE recycle_table storage(BUFFER_POOL RECYCLE);
    BUFFER_POOL은 tablespace나 rollback segment에 대해서는 지정할 수 없으며,
    clustered table에 대해서는 cluster level에서만 지정이 가능하다. partition
    table에 대해서는 각 partition별로 pool을 지정하는 것이 가능하다.
    일단 segments가 적당한 pool에 할당이 되고 난 후에는, logical hit ratio나
    free buffer waits와 같은 다양한 통계 정보가 확인 가능하다.
    이러한 통계 정보를 담고 있는 view는 v$buffer_pool_statistics이며,
    이 view는 $ORACLE_HOME/rdbms/admin/catperf.sql을 수행하면 생성된다.

  • Buffer pool keep and multiple db block sizes

    I have a tablespace with 8k block size (database default) and a tablespace with 16k block size. I have db_cache_size and db_16k_cache_size set (obviously).
    Also i have buffer cache keep set in the database.
    Question: If a table is placed in a tablespace with 16k block size, and it's buffer pool is keep, does it end up in the keep pool (like tables from 8k tablsepace and keep pool set), or it ends in 16k buffer?

    You can find in the following online manual
    http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14220/memory.htm#i16408

  • Script to find out table and index candidates to keep in the buffer pool

    I am looking for a script to find out tables and indexes to keep in the buffer pool.
    Could you help me on this ?
    thanks...
    Markus

    this is more of a open question. As you know ur data well. We do not know whats ur data. cachin tables in buffer pool is okay, but it might age out after not being used...instead you can use the KEEP POOL...to cache small tables/popular tables into the keep pool...as keep pool guarantees full caching .....
    here are some links on keep pool cacheing
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/memory.htm#sthref410
    http://www.dba-oracle.com/oracle_tips_cache_small_fts.htm
    http://www.dba-oracle.com/t_script_automate_keep_pool_tables_indexes.htm
    http://www.dba-oracle.com/oracle_news/news_caching_keep_pool_large_objects_clob_blob.htm
    Edited by: user630084 on Apr 8, 2009 5:48 AM

  • Buffer pool parameter vs LRU/MRU

    Dear Friends,
    I know that in the database buffer cache , the following parameters define the sizes of the caches for buffers :
    –     Default : DB_CACHE_SIZE
    –     Keep : DB_KEEP_CACHE_SIZE
    –     Recycle: DB_RECYCLE_CACHE_SIZE
    And also I know LRU and MRU also works in this regards .Now my ques is , when the "keep pool" and " the "buffer pool" is on then LRU and MRU are active ?
    Both the above 3 pools and (LRU+MRU) is working together ? I have confusion about that . plz help .. ..

    I am getting buffer busy waits on some tables.
    Users are not experiencing any problem.Looks like you got bit by the CTD troll while sleeping.
    Note also that (if I'm reading the report alright) out of 23 mins you have 6 seconds accounted to buffer busy waits.
    Read the sample chapter here.

  • Buffer Pool

    How can i determine the candidates for keep and recycle buffer pool. Is there any query to find the candidates
    Thanks

    Hi,
    If you study application running on your database, you will be able to find out which are tables are can be considered for keep pool. Generally master tables (read only kind), which are frequently getting used in queries to join with transaction tables.
    Dilipkumar Patel.

  • Keep Buffer Cache Not Large Enough

    What happens if I pin a table/index in the keep buffer cache but the keep buffer cache is not large enough? How does oracle determine what to initially put into the keep buffer cache and what to leave out?

    >
    Well, I got some of them directly from the Oracle docs:
    “A good candidate for a segment to put into the KEEP
    pool is a segment that is smaller than 10% of the
    size of the DEFAULT buffer pool and has incurred at
    least 1% of the total I/Os in the system”.
    But the rules you quoted in your previous post were - not the rule you got from Oracle !
    - Use the KEEP pool if the object consumes more than 10% of the total size of the data buffer.
    - Use the KEEP pool if more than 50% of the objects blocks already resides in the data buffer, according to an x$bh query.
    But I agree, I use my own set of decision rules, which vary by system.
    There is no "one size fits all" set of rules . . . . . But you just said you use the rules you got from Oracle in the previous post that:
    The placement criteria for tables and indexes into the KEEP buffer are straightforward:
    Please make up your mind.
    By the way, your script hot_buffers.sql from the page you mentioned above has a few errors in it. The join between x$bh and dba_objects should be on data_object_id, not on object_id; and by joining dba_objects to dba_segments on object_name = segment_name you've introduced a lot of errors relating to index-organised tables, partitioned tables, clusters etc.
    Please see Metalink note: 135223.1. Although it's got a couple of things in it that appeared back in the days of 8i (the original document was written in 1998 I believe) it has a better analysis of the issues.
    Jonathan Lewis
    http://jonathanlewis.wordpress.com
    http://www.jlcomp.demon.co.uk

  • Multiple Buffer Pools Feature

    Have somebody used it and what are your comments?
    I have very high activity for specific tables growing over 15-20 mnl of records. Many inserts and few select. very optimized SQL but still slower then the same code on DB2.
    I would like to separate may be temp tablespace, and a few tables I never select from - like log and audit tables.
    Will multiple Buffer Pools be beneficiary for me?
    Thanks,

    Thanks a lot - Yes, your assumption is absolutely right - the application always reports much higher time then I could see from the Oracle side even when I add all SQLNet waits. The same time on Db2 is approximatelly equal - again, the app reported time is a little bit higher, but it's not 250 times difference like in Oracle.
    The app is 3rd party and get a lot of data in and out. The app structure is: Reading XML file and inserting the values in common tables like Address, Name, etc. As a next step the application will check if these records already exist and will perform specific logic if previous entries are found. From Oracle point these are multiple selects and few possible updates and/or inserts. After all processing is done a record in a log table will be inserted and the transaction is commited. Then the app gets the next XML record. This is single threaded process repeating over and over again. The capacity is about 25,000 records inserted per minute with about 40 application instances running simultaneously. if I increase the number of app instances running against DB2 to 100, the insert rate jumps to 60-65,000/min. In Oracle is the opposite - the increase of the app processes more then 45-50 do not change the insert rate at all. Even on SQL server I can run about 70 processes... So, something is wrong with the way Oracle process runs. These results are not new and have been run on at least 30 different hardware setups for months -AIX, linux, Solaris, windows, and on differnet type of hardware. This is the result for all of them. Everybody who tried the app reports the same case. Most of this cases though do not have well tuned environment... That's why I'm trying to make it work better - could not be "just doesn't run!!!" - Oracle is a great scalable system!
    I've already thought to run the app locally on the server, but it's very hard as the usual set up takes about 3-4 hours and the app is very CPU consuming. But for a single app instance it'll work.
    I think your idea is great and I must do it. Let me do that first thing on Monday and I'll post the results.
    Thanks a lot,
    mj

  • Why should recyle cache should be smaller then buffer pool.

    Hi,
    I am going through a documnetaion, where i read that your recyle cahche should be smaller then your buffer pools and it should be use buffers more quickly then .the idea behiend having a recycle cache is that if the sql statment is tuned then put the large segmant in recycle cahche so it does not effect others segmant in cache to edge out more frequentlly then it should be?now i wanted to know that what is the reason of taknig recyle cache smaller then buffer pool and why it should use buffers more quickly then the default buffer pool?and am i putting the right picture of recycle cache ?
    thanks and regards
    Alok Kumar...

    Hi Alok,
    I asume you mean by buffer the default buffer cache, right ?
    The only idea why a recycle buffer cache should be smaller than another cache can be for memory reasons: not to spend to much memory for cache. But I cannot image this should be a general guide all all kind of application ...
    On the other I have the impression that your picture of the recycle cache is a little bit different to my's picture:
    I only will use different caches if have very different tables and indexes (not sql stmts). Each table and index will be assigned to a cache, e.g. the default cache and the recycle cache. The goal is, as you described, to prtend small tables and indexes from ageing out of the default cache. But the access to the recycle cache is as fast as to the default cache: both are in memory. The only diference is the administration of the blocks into the cache. The recycle cache has an administration of the blocks much easier and faster as the other one.
    I hope this will give you some answers (and porb. some new questions) ...
    greets,
    Rainer

Maybe you are looking for