Re: buffer advisor

  • From: "Gaja Krishna Vaidyanatha" <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "gajav@xxxxxxxxx" for DMARC)
  • To: "exriscer@xxxxxxxxx" <exriscer@xxxxxxxxx>, Seth Miller <sethmiller.sm@xxxxxxxxx>
  • Date: Sat, 6 Sep 2014 23:41:19 -0700

Dear Oracle-L,

This is an interesting discussion and from what has transpired thus far, it is 
pretty obvious that there are no draconian "rights or wrongs" here. 
Nevertheless, I wanted to share something relevant to the subject, as I have 
been dealing with this issue for over a year. Here it is:

1) At the outset, I'd like to address Cheng's question on the usability of the 
db advisor. I find the data (not the recommendations) useful and here is how I 
use it. I look at the AWR section - "Advisory Statistics" and within that 
"Buffer Pool Advisory". I then compare the Estimated Phys Read & Est %DBTime 
for Rds with the Size Factor values (11.2.0.4). The Size Factor value of 1.0 is 
the current allocation and it is very useful to compare this to 1.5 (50% 
increase in allocation) or even 1.98/2.0 (doubling existing allocation). I have 
used this successfully from the 10g days, when it was first introduced. The 
data has consistently given me valid points on over/under allocation of the 
various pools. I then generate the perspective and recommendation on my own.

Basically, the data allows me to determine at a high-level, whether increasing 
a given buffer pool will result in any significant benefit. On the flip side, 
it also allows me to make reasonable data-driven conclusions on whether 
"overallocation" has occurred for any of the pools. This is again done by 
comparing the values of 1.0 to say0.5. In this case, if the Phys Read and DB 
Time numbers are not significantly different, then it can be concluded that 
overallocation has in fact occurred and shrinking the pool and re-purposing the 
memory to another pool, can be done. 

***It is very important that the above method be utilized across multiple 
heavy-load time AWR reports. It is never a good idea to make any significant 
decision/change, based on a single data point from one AWR report. *** 

So for the aforementioned reasons, I keep db_cache_advice ON, as I find the 
data that it provides relevant and useful. I use the above to make my own 
decisions for resizing and ignore the recommendations from Advisor(in OEM), as 
I have found the recommendations to be unreliable. To be fair, the Advisor has 
no application knowledge or context and that is exactly where we as DBAs come 
into the picture.

2) Like some of you, I have had to turn off ASMM completely, due to the nature 
of the application's SQL generation, in an effort to avoid unnecessary resize 
operations. I personally would rather have a static slightly over-sized shared 
pool, than MMAN doing its own thing and causing overhead on a very 
latency-sensitive application.

I'm sure you folks know that just setting SGA_TARGET=0 does not turn the 
feature off, as ASMM will kick in, unbeknownst to you for "immediate" memory 
requests. We found this the hard way, as one day our db_cache was resized to 
automatically resized to 256MB and the shared_pool was also resized to 9GB, by 
these immediate requests. The original values for db_cache_size was 8GB and 
shared_pool_size was 512MB respectively. This was with SGA_TARGET set to 0.

You can tell how much of immediate vs. deferred requests are being processed, 
by looking at v$sga_resize_ops. To turn off ASMM completely, you will have to 
set _memory_imm_mode_without_autosga to FALSE. When you do that, you 
potentially open yourself up for ORA-4031s, but if you size your shared pool 
correctly (using the Shared Pool Advisory in AWR), you can avoid the error for 
most part.

Last year, at a customer project, ORA-4031s were occurring due to DDLs on 
interval-partitioned tables not being aged out (the last thing Oracle should 
cache in the shared pool are DDLs, but that was in fact happening). So, when a 
batch job generated a bunch of "alter table xxxx truncate partition for 
(yyyy);", the ORA-4031s showed up. We first reduced the number of sub-pools to 
2 (_kghdsidx_count = 2), as the default number of sub-pools was 
shared_pool_size/512MB. The ORA-4031 occurred always on sub-pool #1. This was 
logged as a bug last year (Bug#16864042) on 11.2.0.3 and was supposed to be 
fixed in 11.2.0.4. Regrettably, the bug re-surfaced in the past few weeks on 
11.2.0.4 and the new Bug#19461270 has been assigned.

We are currently working with Oracle Development to resolve this, but in the 
interim we have set our shared_pool_size temporarily to 8GB and set 
_enable_shared_pool_durations=FALSE, basically having 1 sub-pool for all object 
types (instance, session, execution & cursor). As a precautionary measure, we 
also have a flush cron job that flushes the shared pool when free memory goes 
below a certain threshold. 

Non of this is pretty, but we'd rather pay a little extra in hard parsing, than 
run the risk of ASMM engaging in re-sizing operations when it shouldn't have. 
More often than not, the cost of additional hard parses are minuscule compared 
to valid/frequently used data and index blocks not present in the database 
buffer cache (due to resize operations). That fundamentally is the rationale 
behind this whole workaround. As soon as the bug related to caching DDLs is 
fixed, we will revert our shared_pool_size back to something reasonable (1GB) 
and we can turn off the flush cron job. I am an optimist and I hope that day 
will dawn soon :)

Will keep you posted as things develop on our end!

Cheers,

Gaja


Gaja Krishna Vaidyanatha,

CEO & Founder, DBPerfMan LLC
http://www.dbperfman.com
http://www.dbcloudman.com

Phone - +1 (650) 743-6060
LinkedIn - http://www.linkedin.com/in/gajakrishnavaidyanatha

Co-author: Oracle Insights:Tales of the Oak Table - 
http://www.apress.com/9781590593875
Primary Author: Oracle Performance Tuning 101 - http://www.amzn.com/0072131454
Enabling Exadata, Big Data and Cloud Deployment & Management for Oracle


________________________________
 From: Ls Cheng <exriscer@xxxxxxxxx>
To: Seth Miller <sethmiller.sm@xxxxxxxxx> 
Cc: Chris Taylor <christopherdtaylor1994@xxxxxxxxx>; Oracle-L Freelists 
<oracle-l@xxxxxxxxxxxxx> 
Sent: Sunday, September 7, 2014 2:45 AM
Subject: Re: buffer advisor
 


Hi Seth

If an app does not use bind variables then no matter how shared pool is sized 
(we can set 1TB and hard parsing is still going on) hard parsing will always 
occur so have larger shared pool means hard parsing will not be reduced so I 
dont think ASMM should favor in such drastic way the shared pool. AMM and ASMM 
are features to simplify management so Oracle can tell customer that the 
database is easier to manage but I dont think experienced DBA should rely on 
them. Dont you think so?

Thanks






On Fri, Sep 5, 2014 at 7:22 PM, Seth Miller <sethmiller.sm@xxxxxxxxx> wrote:

Chris,
>
>
>I believe "a few situations" qualify as exceptions. The developers have to 
>write these tools to work with the majority of cases, not the exceptions. This 
>is why the DBA still has the ability to set a minimum size for each of the 
>managed pools.
>
>
>Hard parsing is extremely expensive so it doesn't surprise me that ASMM would 
>favor the shared pool over the buffer cache, especially when you consider that 
>there are alternatives to the buffer cache like the keep pool. There is no 
>such in-memory alternative for the library cache.
>
>
>Seth Miller
>
>
>
>On Thu, Sep 4, 2014 at 5:50 PM, Chris Taylor 
><christopherdtaylor1994@xxxxxxxxx> wrote:
>
>Seth, 
>>
>>
>>Really?  I have run into a  few situations where the advisor undersizes the 
>>buffer cache significantly in favor of the shared pool because of the 
>>workload of the application.
>>I've got a db right _now_ that has a 128MB buffer cache and a 20GB shared 
>>pool that AMM resized because of the workload :)
>>
>>
>>Obviously, the solution to this is to set floor (minimum) values for 
>>shared_pool_size and db_cache_size but it still amazes me that ASMM/AMM will 
>>significantly undersize the buffer cache when the workload uses a lot of SQL 
>>that isn't reuseable.
>>
>>
>>And I clearly recognize that the workload is suboptimal (lots of SQL with 
>>literals and a few other things) that favor a large shared pool, and my only 
>>point is that it isn't uncommon for the automatic memory resizing to size the 
>>buffer cache to an absurd size :)
>>
>>
>>Chris
>>
>>
>>
>>On Thu, Sep 4, 2014 at 4:56 PM, Seth Miller <sethmiller.sm@xxxxxxxxx> wrote:
>>
>>Ls,
>>>I have found with very few exceptions that ASMM (SGA_TARGET) is very good at 
>>>sizing the buffer cache. Have you tried this? 
>>>Seth Miller
>>>
>>>On Sep 4, 2014 3:38 PM, "Ls Cheng" <exriscer@xxxxxxxxx> wrote:
>>>
>>>Hi all
>>>>
>>>>Has anyone used buffer cache advisory in 10g or 11g to size a production 
>>>>buffer cache? If so how good is the advisor recommending the cache size? 
>>>>Did the recommended cache size meet the ohysical reads reduction goal?
>>>>
>>>>TIA
>>>>
>>>>
>>>>
>>
>

Other related posts: