Skip to main content

Oracle - Generate Explain plan and plan statistics for SQL statement

Option 1: Display sql statement execution plan and sql execution statistics also
set pagesize 0
set linesize 5000
spool plan_q1.log
set auto trace on
@sql_statement.sql
spool off
Explain plan could lie explore at
Kerry Osborne's Blog - http://kerryosborne.oracle-guy.com/2008/10/explain-plan-lies/

Option 2: Use DBMS_XPLAN, get explain plan from awr, using SQL_ID.
set pagesize 0
set linesize 5000
spool plan_q1.log
select * from table(dbms_xplan.display_awr('sql_id'));

spool off

Options for SQL statement:

SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('plan_table',null,'basic +predicate +cost'));
SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('plan_table',null,'typical -cost -bytes'));
SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('plan_table',null,'basic +note'));
Select plan_table_output From table(dbms_xplan.display_cursor(null,null,'TYPICAL');
SELECT plan_table_output FROM table(DBMS_XPLAN.DISPLAY_CURSOR (FORMAT=>'ALLSTATS LAST'));

for adaptive
select * from table(dbms_xplan.display_cursor(format=>+adaptive));
for plan directives which list different no. of estimated and actual rows.
SELECT /*+ GATHER_PLAN_STATISTICS */ * FROM  <table_name> WHERE  <column_name> = '<value>';
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST');

Ref.:
http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-explain-the-explain-plan-052011-393674.pdf

Option 3: Enterprise Manager

Display explain plan for SQL statement with query order.

Option 4: SQLT / SQLTXPLAIN

SQL> START sqltxtrxec.sql [SQL_ID]|[HASH_VALUE] [sqltxplain_password]
If you have installed SQLT / SQLTXPLAIN, then you can generate explain plan with query order


SET ECHO OFF FEED OFF HEA OFF LIN 300 NEWP NONE TRIMS ON;
SPO sqlt_s46250_511925124_1_0.txt;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('SQLTXADMIN.SQLT$_PLAN_STATISTICS_V', '<sqlreport_id>', 'ADVANCED ALLSTATS', 'source = ''GV$SQL_PLAN'' AND inst_id = 1 AND child_number = 0'));
SPO OFF;







Comments

Popular posts from this blog

MySQL InnoDB cluster troubleshooting | commands

Cluster Validation: select * from performance_schema.replication_group_members; All members should be online. select instance_name, mysql_server_uuid, addresses from  mysql_innodb_cluster_metadata.instances; All instances should return same value for mysql_server_uuid SELECT @@GTID_EXECUTED; All nodes should return same value Frequently use commands: mysql> SET SQL_LOG_BIN = 0;  mysql> stop group_replication; mysql> set global super_read_only=0; mysql> drop database mysql_innodb_cluster_metadata; mysql> RESET MASTER; mysql> RESET SLAVE ALL; JS > var cluster = dba.getCluster() JS > var cluster = dba.getCluster("<Cluster_name>") JS > var cluster = dba.createCluster('name') JS > cluster.removeInstance('root@<IP_Address>:<Port_No>',{force: true}) JS > cluster.addInstance('root@<IP add>,:<port>') JS > cluster.addInstance('root@ <IP add>,:<port> ') JS > dba.getC...

InnoDB cluster Remove Instance Force | Add InnoDB instance

InnoDB cluster environment UUID is different on node: To fix it stop group replication, remove instance (use force if require), add instance back Identify the node which is not in sync: Execute following SQL statement on each node and identify the node has different UUID on all nodes. mysql> select * from mysql_innodb_cluster_metadata.instances; Stop group replication: Stop group replication on the node which does not have same UUID on all nodes. mysql > stop GROUP_REPLICATION; Remove instances from cluster: Remove all secondary node from the cluster and add them back if require. $mysqlsh JS >\c root@<IP_Address>:<Port_No> JS > dba.getCluster().status() JS > dba.getCluster () <Cluster:cluster_name> JS > var cluster = dba.getCluster("cluster_name"); JS >  cluster.removeInstance('root@<IP_Address>:<Port_No>'); If you get "Cluster.removeInstance: Timeout reached waiting......" JS > cluster.removeInstance(...

Oracle E-Business Suite Online Patch Phases executing adop

Following description about Oracle E-Business Suite is high level and from documentation https://docs.oracle.com/cd/E26401_01/doc.122/e22954/T202991T531062.htm#5281339 for in depth and detail description refer it. The online patching cycle phases: Prepare Apply Finalize Cutover Cleanup Prepare phase: Start a new online patching cycle, Prepares the environment for patching. $ adop phase=prepare Apply phase: Applies the specified patches to the environment. Apply one or more patches to the patch edition. $ adop phase=apply patches=123456,789101 workers=8 Finalize phase: Performs any final steps required to make the system ready for cutover. Perform the final patching operations that can be executed while the application is still online. $ adop phase=finalize Cutover phase: Shuts down application tier services, makes the patch edition the new run edition, and then restarts application tier services. This is the only phase that involves a brief ...