I decided to post this tip for a while but each time I distracted with something and I forgot that. Yesterday a client called me with an issue on TEMP tablespace. Client was running a big merge statement on warehouse database but each time job failed because it was not able to extend TEMP tablespace.As the result, client asked me how to determine required TEMP usage without running SQL statement.
My immediate answer was :
- Login to database with the same user.
- Get Execution plan.
- Watch TempSpc column in execution plan.
Client called me back and said "there is not TempSpc column in execution plan."(By the way client runs latest 10g version (10.2.0.3)).
There are basically two reasons that TempSpc may not appear in execution plan.
Reason 1 : SQL statement does not need temporary tablespace and dedicated memory (PGA) is enough to run all operations
Reason 2 : Plan table is old and has not any column to keep Temp space usage.
To update plan, run the followings :
- drop table plan_table
(If you are using sqltrace for getting execution plan, you need to run @$ORACLE_HOME/sqlplus/admin/plustrce.sql as sys and then grant PLUSTRACE to the user)
Here is an example to demostrate TempSpc column in exeuction plan.
Execution plan for select * from dba_tables which has not any TempSpc columns because all operation can fit in existing memory.
Execution plan for select * from dba_tables order by table_name which TempSpc column appears since sorting needs more space than existing PGA.