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/martinberx> http://berxblog.blogspot.com