Don’t preallocate many gigs of ram in Oracle Database 12c

memoryoracle-12c

I've just installed Oracle Database 12c Enterprise for Windows. The first thing I've noticed is it preallocates almost 10GB ram. How can I configure Oracle to only allocate and deallocate ram as needed to hold indexes and to perform normal database operations?

To be clear, I am happy for Oracle to use 10GB ram when it's actually needed, so I don't just want to set a lower value on SGA_TARGET and have Oracle struggle to work in the confines of a much smaller limit when a big index is created.

Edit: (answers to comments)

@a_horse_with_no_name I tried disabling pre_page_sga and restarting Oracle but I'm still seeing "Oracle RDBMS Kernel Executable" using up 10GB of RAM after the restart.

The RAM is used for offline scientific scripts whose performance scale according to the amount of free RAM. These scripts are run manually and they must be run on this server as it's the only high performance server we can afford right now.

This wasn't a problem on our old server, it just seems that Oracle 12c allocates 10GB RAM off the bat and never releases it.

Best Answer

You probably have pre_page_sga set to true. To disable this, change the value of pre_page_sga to false:

alter system set pre_page_sga=false scope=spfile;

then restart Oracle.