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
Similar Messages
-
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 muchWhy 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 -
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
SHi 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; -
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. -
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을 수행하면 생성된다. -
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...
Markusthis 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 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 -
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. -
How can i determine the candidates for keep and recycle buffer pool. Is there any query to find the candidates
ThanksHi,
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 -
How to configure params for buffer pool for named data cache?
when create a named data cache on ase 12.5, it will setup 2K I/O buffer pool by default with Configured size=0, wash size = 60M
1. if 2K can be changed to 8K for this buffer pool?
2. If add another 16k buffer pool, should Affected Pool be changed to the right pool?
3. How to decide then pagesize, configured size and wash size for a buffer pool? Are they part of total memory size allocated for this cache?> 1. if 2K can be changed to 8K for this buffer pool?
You should be able to create an 8K i/o pool, then drop the 2k pool by setting its size to 0.
> 2. If add another 16k buffer pool, should Affected Pool be changed to the right pool?
If you don't specify the Affected Pool (when calling sp_poolconfig), the procedure uses the pool with the smallest i/o. So if you had an 8k but not had dropped the 2k, the space for the new 16k pool would come from the 8k pool.
> 3. How to decide then pagesize, configured size and wash size for a buffer pool? Are they part of total memory size allocated for this cache?
The wash is included in the pool. I don't think it usually needs to be adjusted.
Which page size pools to have will depend on how the cache is used. Tables with a clustered index that have a lot of range queries will benefit from larger page size pools, as will text/image/java. Syslogs is said to do well on a 4k pool.
-bret -
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
Maybe you are looking for
-
Report to file and email (excel or pdf)
Hi! I have a report where I list financial data about a company. The report is only one pivot table! There is a dashboard prompt, where you can choose the company you want to see. I need to save the report in excel or pdf for ALL the listed companies
-
Hi. I currently have both my iPhone's and iPad's on one Apple ID and I was hoping to use one iPhone and one iPad with another Apple ID, does anyone know if this is possible and how I would do it. Thanks TMM39
-
My MacBook will no longer connect to my wireless printer.
My MacBook (circa 2010 - it's not a MacBook Pro) stopped connecting wirelessly to my HP printer (3050 J610). I get a message, "Printer is offline." The printer is on and I have no trouble printing from my iMac. I appreciate any advice/insights. Thank
-
How to find error details when getting 500 Internal Server Error
Hi Everyone, I get 500 Internal Server Error on b2b order main page after modified tabstrip.inc.jsp. I want to see the detail error messages, but don't know how to. Any advises? Thanks, Jin
-
This crops up as the default application whenever I attempt to send Email via a website I'm looking at, and I have to copy the address and paste it into my regular Email server (Charter.net). Can I just delete the application from my hard drive?