You need to trace the session to see what it's doing.
If you're able to identify the session id for the first transaction in advance, you can trace just this session by calling:
exec dbms_monitor.session_trace_enable(session_id =><session id>, serial_num=><serial #>, waits=>true, binds=>false);
Then once the transaction completes, stop tracing with:
exec dbms_monitor.session_trace_disable(session_id =><session id>, serial_num=><serial #>);
Then find the log file and analyze it with tkprof.
If you're not able to identify the session in advance, you can enable monitoring for a particular client ID, service or the whole DB:
http://docs.oracle.com/database/122/ARPLS/DBMS_MONITOR.htm#ARPLS091 This will trace all the matching sessions. So do this for as short a time as possible as it adds extra overhead to your DB. The upside is you'll capture some "fast" transactions too. This makes it easy to compare what's different and get to the root cause.
If you need further help once you've got these details, post your findings in a followup.