with ash_fts as ( select u.username, ash.sql_id,ash.sql_plan_hash_value,ash.sql_plan_line_id from v$active_session_history ash join dba_users u on ash.user_id=u.user_id where ash.sql_plan_operation='TABLE ACCESS' and ash.sql_plan_options='FULL' and ash.sample_time> sysdate-1/24 group by u.username, ash.sql_id,ash.sql_plan_hash_value,ash.sql_plan_line_id) --- ищем фулсканы таблиц за последний час, если убрать условие, то будет за весь период который храниться в ASH (глубина зависит от нагрузки на базу, от часов до дней ) ,big_tables as ( select round (dt.num_rows*dt.avg_row_len/1024/1024/1024) table_size_gb,table_name,owner From dba_tables dt where round (dt.num_rows*dt.avg_row_len/1024/1024/1024) > 2) -- переписал на получение информации из статистики, ищем таблицы больше 2 гб select ash.sql_id,b.owner, hsp.object_name from dba_hist_sql_plan hsp join ash_fts ash on ash.sql_plan_line_id=hsp.id and ash.sql_id=hsp.sql_id and ash.sql_plan_hash_value=hsp.plan_hash_value join big_tables b on b.table_name=hsp.object_name;
в результате увидим sql_id запроса и большую таблицу на которую идет фулскан
SQL_ID | OWNER | OBJECT_NAME ------------- | ------------------------------ | ------------------------------- f9j0hsaz7h9y8 | LK | CALENDAR