Re: Sizing SGA

  • From: Tim Gorman <tim@xxxxxxxxx>
  • Date: Sat, 8 Oct 2016 09:13:20 -0600

A little history...

Back in Oracle8i and previous, when RAC was known as OPS (Oracle Parallel Server), accessing a block held in another instance's buffer cache required a forced write-down by that instance's DBWR process followed by a read-up by the requesting process, a procedure also known as "pinging". Thus, inter-process communication was accomplished through the I/O subsystem. The Distributed Lock Manager (DLM) was a separate OS-provided utility (in one instance written by Oracle and distributed with HP-UX by HP, a completely unsupportable deal) which stored a database of buffer locks in memory, requiring a sizing calculation which included "number of cluster nodes" as a prominent factor.

Then, sometime in the 1990s, someone realized that latency for I/O was measured in milliseconds while latency on network was measured in microseconds.

With Oracle9i in the 2002 timeframe, RAC introduced cache fusion, where the cluster interconnect is used to fetch copies of buffers between instances, eliminating the separate DLM utility altogether, and the tracking of instance ownership of buffers became part of the Buffer Cache using far less memory.

I am guessing that most of the concern about increased memory demands for larger numbers of cluster nodes is rooted in OPS, and should be considered less relevant with RAC.




On 10/8/16 08:48, Martin Berger wrote:

Hi Niall,

the number of incances might affect the Global Resource Directory - but I did not find any formula how to calculate it's size.
Beside that I agree with Franck: shared pool will be equal for every instance, as every tatement will hit all the instances over time.
Buffer cache should not decrease as well, unleass the load is really sahrded between instances. It might happen every intance has one (or more) copies of the same (busy) block in its buffer cache.

regards,
 Martin



2016-10-06 20:39 GMT+02:00 Franck Pachot <franck@xxxxxxxxxx <mailto:franck@xxxxxxxxxx>>:

    Hi Niall,
    IMO if the service is load balanced, the size of SGA do not depend
    on the number of nodes.
    Only when service distribution read very different data (buffer
    cache) or run different code (shared pool) you may need to
    increase the SGA when removing one node.
    I've no confidence at all in the advisors. Use them only when
    people wants me to give a number, it's still better than a random
    function...
    Regards,
    Franck.

    On Thu, Oct 6, 2016 at 3:52 PM Niall Litchfield
    <niall.litchfield@xxxxxxxxx <mailto:niall.litchfield@xxxxxxxxx>>
    wrote:

        A colleague asked me a question yesterday to which I don't
        really have a good answer; so I thought I'd crowdsource it.

        Given a RAC database of N instances each with an SGA of M gb
        in size. When changing the instance count N how, if at all, do
        you modify the value of M? What metrics do you look at, and
        what is the rationale behind that.

        I'm aware that "let it run for a while and use the memory
        advisors" is an approach - I can't say I have a lot of
        confidence in the memory advisors from past experience.

-- Niall Litchfield
        Oracle DBA
        http://www.orawin.info




--
Martin Berger martin.a.berger@xxxxxxxxx <mailto:martin.a.berger@xxxxxxxxx>
+43 660 2978929 <tel:+436602978929>
@martinberx <https://twitter.com/martinberxhttp://berxblog.blogspot.com

Other related posts: