The way I would attack the following is as follows
1) Map out where all the files (datafiles, redo logs, archived logs etc) used by the both instances are located and identify any which clash. Look at the IO stats on the disks, ideally IO should be spread uniformly. Things to watch out for include both instances having redo logs on the same disks which is bad. Make sure tables and their indexes dont reside on the same disks (if not striped).
2) Identify poorly performing sql by looking at v$sqlarea. For those sqls doing a lot of buffer gets and or disk reads, find their execution plans. If they should be using indexes either create the index or make sure they are analyzed (assuming not using RBO). NOTE some sqls are better off with FTS than using indexes, look at their execution plans and use sql trace for actual stats.
Make sure everything has upto date stats by analyzing.
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 '%table_name%'
order by executions desc, buffer_gets desc
3) Is the optimizer choosing good execution plans, if not their are certain parameters which affect the optimizer like multiblock read count.
4)Look for latch contention and waits, especially for hotspots in certain datafiles. Goto
www.ixora.com.au for more info.
There is a lot more you can do but these are the basic steps I would take.
Alan