Wednesday, November 30, 2016

Database direct path read and resource_manager_plan setting after upgrade/migrate Oracle 11g database

Hi,
We encountered a  Bug 8671349 - Automatic degree of parallelism may be too high ( Doc ID 8671349.8 )  on our Core Oracle Production database 11.2.0.1 ,  the two options were either to run the system in no parallel mode taking a hit on performance or to upgrade .
This update from oracle came late Thursday night so early Friday an executive decision was taken by our higher management to upgrade and migrate our production from existing server to new server(with better specs).
I successfully upgraded and migrated the database from 11.2.0.1, Win 2008 R2 to 11.2.0.4 Win  2012, but observed that the database was extremely slow.
I ran the below query and observed that the maximum time spent by database was on direct path reads! Awr also confirmed the same

select * from(  select dba_objects.object_name, dba_objects.object_type,active_session_history.event,
 sum(active_session_history.wait_time +  active_session_history.time_waited) ttl_wait_time
from v$active_session_history active_session_history,    dba_objects
 where active_session_history.sample_time between sysdate - 1/24 and sysdate
and active_session_history.current_obj# = dba_objects.object_id group by dba_objects.object_name,
dba_objects.object_type, active_session_history.event  order by 4 desc);
The query to check this hidden parameter is
select a.ksppinm name,b.ksppstvl value,b.ksppstdf deflt,decode
(a.ksppity, 1,'boolean', 2,'string', 3,'number', 4,'file', a.ksppity) type,
a.ksppdesc description from sys.x$ksppi a,sys.x$ksppcv b where
a.indx = b.indx and a.ksppinm like '\_serial_direct_read%' escape '\'

To disable this
alter system set "_serial_direct_read"=never scope=both;

The above change worked like magic and the performance improved.


The next day was Sunday  which is a working day in gulf, observed that all sessions were hanging with event  resmgr:cpu quantum.

Since a production system stabilizes over a period of time we had many such tweaking s to be done on the new database.
After the database installation the database  by default took the default maintenance window which should be Friday and Saturday in gulf and not Sunday which is a working day.

Checked resource_manager_plan setting
SQL> show parameter resource_manager_plan

NAME_COL_PLUS_SHOW_PARAM
------------------------------------------------------------------------------
TYPE
------------------------------------------------------------------------------
VALUE_COL_PLUS_SHOW_PARAM
------------------------------------------------------------------------------
resource_manager_plan
string
SCHEDULER[0x32DF]:DEFAULT_MAINTENANCE_PLAN        


alter system set resource_manager_plan='' scope=both;
Quantum cpu gone after this :)
You can create a plan as per your organization maintenance windows and set it as a default plan.