These are 3 sqls which I commonly use to identify poor sqls. Note however that because they query v$sqlarea it wont show you every sql as it is like cache of sqls.
Once you identify the worst sqls get their execution plans and see if they should be using an index instead of a full table scan. Or maybe the index hasnt been analyzed or its columns are in the wrong order. Then execute the sql and use sql trace to look at what it actually does as opposed to what the execution plan guesstimates. Note for sqls which execute many times (i.e. thousands of executions per day) then even a small improvement in performance can make a big difference. With Oracle unlike some other databases there are a multitude of options (i.e. bitmap indexes, compressed indexes, clusters, IOT etc) which means it may take a while to find your solution but you should find it eventually : ).
I've commented out the bit in each sql which selects only those sqls which contain a certain word (i.e. could be a table name for large table or just show inserts or updates etc).
The first two columns are:
1) number of buffer gets per execution
2) ratio of buffer_gets to rows processed
--worst sqls by executions
select trunc(buffer_gets/(executions+1)) "BUFF-EXEC", trunc(buffer_gets/(rows_processed+1)) "BUFF-ROWS",first_load_time, executions, parse_calls, disk_reads, buffer_gets, rows_processed, sql_text, sorts , parsing_user_id
from v$sqlarea
where parsing_user_id!=0 --and upper(sql_text) like 'INSERT INTO%DATA%'
order by executions desc, buffer_gets desc
-- worst sqls by buffer_gets
select trunc(buffer_gets/(executions+1)) "BUFF-EXEC", trunc(buffer_gets/(rows_processed+1)) "BUFF-ROWS",first_load_time, executions, parse_calls, disk_reads, buffer_gets, rows_processed, sql_text, sorts , parsing_user_id
from v$sqlarea
where parsing_user_id!=0 --and upper(sql_text) like 'UPDATE%FINANCIAL%'
order by buffer_gets desc
-- most recent sqls
select trunc(buffer_gets/(executions+1)) "BUFF-EXEC", trunc(buffer_gets/(rows_processed+1)) "BUFF-ROWS",first_load_time, executions, parse_calls, disk_reads, buffer_gets, rows_processed, sql_text, sorts , parsing_user_id
from v$sqlarea
where parsing_user_id!=0 --and upper(sql_text) like '%VIRTUAL%'
order by first_load_time desc, executions desc
Alan