Many times, while doing SQL tuning, we want to trace (event 10046) single SQL in database. Instead of going for module level tracing or session level using DBMS_MONITOR, we can simply use below alter system command to trace specific SQL
Example: I have a table T1 and index T_I_TABLE_NAME on that table.
I am running following SQL and I want to trace on this SQL
select * from T1 where table_name = 'SINGLE_PRODUCT_GROUPS';
I can just find out the SQL ID of above SQL
select sql_id, sql_text from v$sql where sql_text like '%SINGLE_PRODUCT_GROUPS%' SQL_ID SQL_TEXT ------------- -------------------------------------------------------------------------------- 8kybysnu4nn34 select * from T1 where table_name = 'SINGLE_PRODUCT_GROUPS'
Once I have the SQL ID, I can use below alter system to trace this SQL
alter system set events 'sql_trace[SQL:8kybysnu4nn34] plan_stat=all_executions,wait=true,bind=true';
Note that even though this is alter system, other SQL IDs run will not have any effect on tracing because we are tracing only specific SQL ID. So unless SQL ID 8kybysnu4nn34 is run, it will not generate any trace file.
Once SQL ID is run and trace is generated, you can turn off tracing using following statement
alter system set events 'sql_trace[SQL:8kybysnu4nn34] off';
This might generate multiple trace files as multiple sessions might run same SQL ID (depending on the application).
Hope this helps !!!
Filed under: Oracle Database 11g, Performance Tuninig Tagged: 10046, SQL Trace, sql tuning
