Viewing queries in v$sqlarea
I am having a problem viewing the queries in v$sqlarea. I have a procedure (p1) with lots of insert, select, update and delete statements. I am calling procedure p1 from a test procedure p2 inside a loop to have a load test for p1. But when I try to see the v$sqlarea, it is not showing the insert, delete, etc. from p1, but instead showing the statements from p2. What is the problem?
Starting with Oracle9i, users have the ability to view the estimated CPU, TEMP and I/O costs for every SQL execution plan step. Oracle Corporation has noted that typical OLTP databases are becomingly increasingly CPU-bound and has provided the ability for the DBA to make the optimizer consider the CPU costs associated with each SQL execution step.
The developers of Oracle10g recognized this trend toward CPU-based optimization by providing the ability to choose CPU-based or I/O-based costing during SQL optimization, with the 10g default being CPU-costing. In Oracle10g, system stats are gathered by default, and in Oracle9i the DBA must manually execute the dbms_stat.gather_system_stats package to get CBO statistics.
alter session set "_optimizer_cost_model"=choose; alter session set "_optimizer_cost_model"=io; alter session set "_optimizer_cost_model"=cpu;
Here is a good script:
select to_number(decode(SID, 65535, NULL, SID)) sid, operation_type OPERATION, trunc(WORK_AREA_SIZE/1024) WSIZE, trunc(EXPECTED_SIZE/1024) ESIZE, trunc(ACTUAL_MEM_USED/1024) MEM, trunc(MAX_MEM_USED/1024) "MAX MEM", number_passes PASS from v$sql_workarea_active order by 1,2;
I have more complete details and scripts in my latest book, Oracle Tuning.