Basics of Automatic Memory Management in Oracle 12c
Memory management is an important component of working with instances in your database. Oracle 12c gives you three ways to manage the memory in your instance:
Automatically by letting Oracle do all the work
Manually by tuning individual parameters for the different memory areas
Combination of automatic and manual by using your knowledge of how things operate, employing Oracle’s advice infrastructure, and letting Oracle take over some areas
A quick note on Oracle automation. Through the last several releases of Oracle, the database has become more automated in areas that were previously manual and even tedious at times. This isn’t to say that soon it will take no special skill to manage an Oracle database. Exactly the opposite: When more mundane operations are automated, it frees you up as the DBA to focus on the more advanced features.
We’ve had great success implementing automated features for clients. It frees up our resources to focus on things such as high availability and security, areas that require near full-time attention. Thank goodness you don’t have to spend hours watching what SQL statements are aging out of the shared pool prematurely, resulting in performance problems.
We recommend that you manage memory automatically in Oracle 12c.
When you create your database, you can set one new parameter that takes nearly all memory tuning out of your hands: MEMORY_TARGET. By setting this parameter, all the memory areas are automatically sized and managed. After you type show parameter memory_target in SQL*Plus (the SQL command-line interface available in Oracle), you see this output on the screen:
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ memory_target big integer 756M
Automatic memory management lets you take hold of the amount of memory on the system and then decide how much you want to use for the database.
It’s never obvious what value you should choose as a starting point. Answer these questions to help set the value:
How much memory is available?
How many databases will ultimately be on the machine?
How many users will be on the machine? (If many, you allocate 4MB per user for process overhead.)
What other applications are running on the machine?
Before the users get on the machine, consider taking no more than 40 percent of the memory for Oracle databases. Use this formula:
(GB of memory × .40) / Number of Eventual Databases = GB for MEMORY_TARGET per database
For example, if your machine had 8GB of memory and will ultimately house two databases similar in nature and only 100 users each, you would have this equation: (8 × .40) / 2 = 1.6GB for MEMORY_TARGET per database.
To help determine whether you have enough memory, Oracle gives you some pointers if you know where to look. It’s called the Memory Target Advisor. Find it from the command line in the form of the view V$MEMORY_TARGET_ADVICE. You can find it in the Database Control home page by clicking Advisor Central>Memory Advisors>Advice.
Whatever you choose for the MEMORY_TARGET setting isn’t all the memory Oracle uses. That’s why you should have an idea of how many sessions there will be before you make the final determination.
For instance, this parameter covers only memory used by the SGA and PGA. Every single session that connects to the database requires memory associated with its OS or server process. This memory requirement adds up. One of our clients has nearly 3,000 simultaneous connections eating up about 16GB of memory outside the SGA and PGA. The client’s machine has 64GB of memory, and the MEMORY_TARGET is set at 16GB.