This page has been permanently moved. Please
CLICK HERE to be redirected.
Thanks, Craig.
Off May Not Be Totally Off: Is Oracle In-Memory Database 12c (12.1.0.2.0) Faster?
Most Oracle 12c installations will NOT be using the awesome Oracle Database in-memory features available starting in version 12.1.0.2.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 12.1.0.1.0 to 12.1.0.2.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.
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 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 12.1.0.1.0 and the "totally disabled" in-memory column store version 12.1.0.2.0. This is what I will summarize below. And don't forget all 12c versions showed a significant buffer processing increase compared to 11g.
You may be thinking, if I'm NOT going to license and use the in-memory column store, should I upgrade to version 12.1.0.2.0? Below is a summary of my experimental results followed by the key points.
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 12.1.0.1.0 and the "totally disabled" in-memory column store version 12.1.0.2.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 12.1.0.2.0? Below is a summary of my experimental results followed by the key points.
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 12.1.0.2.0 even if you are NOT going to use the in-memory features.
3. Visually (see below) the non in-memory version 12.1.0.1.0 and the "totally off" in-memory version 12.1.0.2.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 12.1.0.1.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 12.1.0.1.0 to 12.1.0.2.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!
Craig.




Hi Craig
ReplyDeleteDid you perform tests with optimizer_inmemory_aware=FALSE and/or inmemory_query=DISABLE?
Thank you,
Chris
Craig,
ReplyDeleteUsing LIO/ms as the metric of choice for DBIM seems rather strange and DBIM does not do equivalent logical reads. Wouldn't rows processed/ms be a much better metric?
Or even execution times?
Thank you very much for posting and sharing this great Blog And Good Information.carry on your posting.
ReplyDeleteBest bca college in noida
Top bca colleges in noida
The best iOS development course offers expert instruction.It focuses on industry practices.This best iOS development course ensures quality education.It is reliable.
ReplyDeleteComprehensive Java Full Stack training covering backend, frontend, databases, and hands-on project development.java coaching online
ReplyDeleteiOS app development class provides structured learning guided by industry experts. It focuses on real-time development experience. This ios app development class strengthens coding fundamentals. Learners create working applications. Interface design is included. App testing is covered. Practice exercises are provided. It enhances development confidence.
ReplyDeleteSalesforce administrator classes provide structured learning on data management and security controls. It explains report generation and dashboard customization clearly. This salesforce administrator classes enhance practical CRM administration skills. Learners work on live organizational scenarios. Assignments are included. Expert support is provided. It builds confident admin professionals.
ReplyDeleteServiceNow administrator training helps you master platform configuration, ITSM workflows, and real-time administration skills required to succeed as a ServiceNow admin.servicenow administrator training
ReplyDeleteServicenow admin training best course .servicenow admin training
ReplyDelete
ReplyDeleteA ServiceNow course is the perfect way to learn ITSM fundamentals, automate business workflows, and build the practical skills needed for a successful ServiceNow career.servicenow course
Very informative post! ServiceNow training is a smart investment for professionals who want to streamline IT operations, automate workflows, and stay competitive in today’s cloud-driven IT landscape.servicenow training
ReplyDeleteGreat insights! Our devops online training
ReplyDeletehelps you master automation, CI/CD, and cloud workflows.
Excellent post! Anyone looking to improve their integration knowledge should definitely explore Mulesoft training courses. These courses are very useful for learning API integration and enterprise connectivity.mulesoft training courses
ReplyDeleteGreat post! For working professionals, Salesforce CPQ training online is a convenient way to learn this powerful Salesforce product. With flexible schedules and practical exercises, Salesforce CPQ training online helps learners gain real-world knowledge of product configuration and quote management.salesforce cpq training online
ReplyDeleteGreat article! Enrolling in service now training classes at OnlineITGuru is a great way to build strong ServiceNow skills and advance your IT careerservice now training classes
ReplyDeleteAPIs are the backbone of modern integration systems. Mulesoft API Training helps developers understand API design, management, and implementation using the MuleSoft platform. OnlineITGuru offers structured training with hands-on labs.mulesoft api training
ReplyDeleteNice information shared here. If anyone is planning to start cpq training, OnlineITGuru offers practical training with industry experts and real-time scenarios which is very helpful.cpq training
ReplyDelete