Off May Not Be Totally Off: Is Oracle In-Memory Database 12c (188.8.131.52.0) Faster?
Most Oracle 12c installations will NOT be using the awesome Oracle Database in-memory features available starting in version 184.108.40.206.0. This experiment is about the performance impact of upgrading to 12c but disabling the in-memory features.
Every experiment I have performed comparing buffer processing rates, clearly shows any version of 12c performs better than 11g. However, in my previous post, my experiment clearly showed a performance decrease after upgrading from 220.127.116.11.0 to 18.104.22.168.0.
This posting is about why this occurred and what to do about it. The bottom line is this: make sure "off" is "totally off."
Turn it totally off, not partially off
What I discovered is by default the in-memory column store feature is not "totally disabled." My experiment clearly indicates that unless the DBA takes action, not only could they be a license agreement violation but a partially disabled in-memory column store slightly slows logical IO processing compared to the 12c non in-memory column store option. Still, any 12c version processes buffer faster than 11g.
My experiment: specific and targeted
This is important: The results I published are based on a very specific and targeted test and not on a real production load. Do not use my results in making a "should I upgrade decision." That would be stupid and an inappropriate use of the my experimental results. But because I publish every aspect of my experiment and it is easily reproducible it is a valid data point with which to have a discussion and also highlight various situations that DBAs need to know about.
You can DOWNLOAD all my experimental results HERE. This includes the raw sqlplus output, the data values, the free R statistics package commands, spreadsheet with data nicely formatted and lots of histograms.
The instance parameter settings and results
Let me explain this by first showing the instance parameters and then the experimental results. There are some good lessons to learn!
Pay close attention to the inmemory_force and inmemory_size instance parameters.
SQL> show parameter inmemory NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ inmemory_clause_default string inmemory_force string DEFAULT inmemory_max_populate_servers integer 0 inmemory_query string ENABLE inmemory_size big integer 0 inmemory_trickle_repopulate_servers_ integer 1 percent optimizer_inmemory_aware boolean TRUE SQL> show sga Total System Global Area 7600078848 bytes Fixed Size 3728544 bytes Variable Size 1409289056 bytes Database Buffers 6174015488 bytes Redo Buffers 13045760 bytes
In my experiment using the above settings the median buffers processing rate was 549.4 LIO/ms. Looking at the inmemory_size and the SGA contents, I assumed the in-memory column store was disabled. If you look at the actual experimental result file "Full ds2-v12-1-0-2-ON.txt", which contain the explain plan of the SQL used in the experiment, there is no mention of the in-memory column store being used. My assumption, which I think is a fair one, was that the in-memory column store had been disabled.
As you'll see I was correct, but only partially correct.
The parameter settings below are when the in-memory column store was totally disabled. They key is changing the default inmemory_force parameter value from DEFAULT to OFF.
SQL> show parameter inmemory NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ inmemory_clause_default string inmemory_force string OFF inmemory_max_populate_servers integer 0 inmemory_query string ENABLE inmemory_size big integer 0 inmemory_trickle_repopulate_servers_ integer 1 percent optimizer_inmemory_aware boolean TRUE SQL> show sga Total System Global Area 7600078848 bytes Fixed Size 3728544 bytes Variable Size 1291848544 bytes Database Buffers 6291456000 bytes Redo Buffers 13045760 bytes
Again, the SGA does not show any in-memory memory space. In my experiment with the above "totally off" settings, the median buffers processing rate was 573.5 LIO/ms compared to "partially off" 549.4 LIO/ms. Lesson: Make sure off is truly off.
It is an unfair comparison!
It is not fair to compare the "partially off" with the "totally off" test results. Now that I know the default inmemory_force must be changed to OFF, the real comparison should be made with the non in-memory column store version 22.214.171.124.0 and the "totally disabled" in-memory column store version 126.96.36.199.0. This is what I will summarize below. And don't forget all 12c versions showed a significant buffer processing increase compared to 11g.
The key question: Should I upgrade?
You may be thinking, if I'm NOT going to license and use the in-memory column store, should I upgrade to version 188.8.131.52.0? Below is a summary of my experimental results followed by the key points.
1. The non column store version 184.108.40.206.0 was able to process 1.1% more buffers/ms (median: 581.7 vs 573.5) compared to to "totally disabled" in-memory column store version 220.127.116.11.0. While this is statistically significant, a 1.1% buffer processing difference is probably not going to make-or-break your upgrade.
2. Oracle Corporation, I'm told, knows about this situation and is working on a fix. But even if they don't fix it, in my opinion my experimental "data point" would not warrant not upgrading to the in-memory column store version 18.104.22.168.0 even if you are NOT going to use the in-memory features.
3. Visually (see below) the non in-memory version 22.214.171.124.0 and the "totally off" in-memory version 126.96.36.199.0 samples sets look different. But they are pretty close. And as I mentioned above, statistically they are "different."
Note for the statistically curious: The red color 188.8.131.52.0 non in-memory version data set is highly variable. I don't like to see this in my experiments. Usually this occurs when a mixed workload sometimes impacts performance, I don't take enough samples or my sample time duration is too short. To counteract this, in this experiment I captured 31 samples. I also performed the experiment multiple times and the results where similar. What I could have done was used more application data to increase the sample duration time. Perhaps that would have made the data clearer. I could have also used another SQL statement and method to create the logical IO load.
What I learned from this experiment
To summarize this experiment, four things come to mind:
1. If you are not using an Oracle Database feature, completely disable it. My mistake was thinking the in-memory column store was disabled when I set it's memory size to zero and "confirmed" it was off by looking at the SGA contents.
2. All versions of 12c I have tested are clearly faster at processing buffers than any version of 11g.
3. There is a very slight performance decrease when upgrading from Oracle Database version 184.108.40.206.0 to 220.127.116.11.0.
4. It is amazing to me that with all the new features poured into each new Oracle Database version the developers have been able to keep the core buffer processing rate nearly at or below the previous version. That is an incredible accomplishment. While some people may view this posting as a negative hit against the Oracle Database, it is actually a confirmation about how awesome the product is.
All the best in your Oracle performance tuning work!
Start my FREE 18 lesson Machine Learning For Oracle Professionals E-Course here.
Craig Shallahamer is a long time Oracle DBA who specializes in predictive analytics, machine learning and Oracle performance tuning. Craig is a performance researcher and blogger, consultant, author of two books, an enthusiastic conference speaker a passionate teacher and an Oracle ACE Director. More about Craig Shallahamer...
If you have any questions or comments, feel free to email me directly at craig at orapub.com.
|Where Does Oracle Database View v$osstat Get It's Data? Trustworthy?||OracleDatabase Parallelism Introduces Limits-Part 3||How To Use An AWR Report To Create Correct Wait Event Based Histograms|