對於SQL的執行計劃,通常儘可能避免TABLE ACCESS FULL的出現,那怎樣去定位,系統裏面哪些SQL腳本存在TABLE ACCESS FULL行爲,對於9i及之後版本,使用如下語句便可
select *
from v$sql_plan v
where v.operation = 'TABLE ACCESS'
and v.OPTIONS = 'FULL'
and v.OBJECT_OWNER='MS';--指定用戶下
查詢獲得SQL_ID,以及ADDRESS,HASH_VALUE,PLAN_HASH_VALUE,OBJECT_NAME後,就能夠定位到具體的SQL語句了。
如:
select s.SQL_TEXT
from v$sqlarea s
where s.SQL_ID = '4dpd97jh2gzsd'
and s.HASH_VALUE = '1613233933'
and s.PLAN_HASH_VALUE = '3592287464';
或者
select s.SQL_TEXT from v$sqlarea s where s.ADDRESS = '00000000A65D2318';