ORACLE9I可以在显示RAM内存使用情况的同时提供执行计划信息,要获得这方面的信息,你需要从V$SQL出发搜集合适的SQL语句的地址。举例来说,如果你有一个关于NEW_CUSTOMER表格运作方面的疑问时,你可以运行下面的代码来获得地址。
select
  address
  from
  v$sql
  where
  sql_text like '%NEW_CUSTOMER';
  88BB460C
  1 row selected.
获得了地址以后,你可以将他插入下列脚本之中来获得执行计划的详细资料和SQL语句的PGA内存使用状况。
select
  operation,
  options,
  object_name name,
  trunc(bytes/1024/1024) "input(MB)",
  trunc(last_memory_used/1024) last_mem,
  trunc(estimated_optimal_size/1024) opt_mem,
  trunc(estimated_onepass_size/1024) onepass_mem,
  decode(optimal_executions, null, null,
  optimal_executions||'/'||onepass_executions||'/'||
  multipasses_exections) "O/1/M"
  from
  v$sql_plan p,
  v$sql_workarea w
  where
  p.address=w.address(+)
  and
  p.hash_value=w.hash_value(+)
  and
  p.id=w.operation_id(+)
  and
  p.address='88BB460C';
下面是来自这个脚本的表单:
OPERATION OPTIONS NAME 
  input(MB)
  LAST_MEM OPT_MEM ONEPASS_MEM O/1/M
------------ -------- ---- ---------
-------- ---------- ---------- ----
SELECT STATESORT GROUP 
  BY 4582 8 16
  16 26/0/0HASH JOIN SEMI 4582 5976
  5194 187 16/0/0TABLE ACCESS FULL ORDERS
51TABLE ACCESS FUL LINEITEM 1000
你可以在其中看到关于执行计划和特殊内存使用方面的细节,这是ORACLE9I的一个令人激动的进步,他使得DBA可以获得关于任何SQL语句内部执行过程的高度详细的资料。
责任编辑:超凡