There is a lot of confusion around about the significance of the statistic “parse calls”. The important thing to remember is that it is simply counting a certain type of call from the OCI library – the amount of work done by a parse call may vary enormously depending upon circumstances, and sometimes the amount of work is so tiny that it’s not worth worrying about.
A “parse call” may:
a) Have to optimise the statement because it failed to find it after searching the library cache
b) Find the statement after searching the library cache, and still have to optimise it for various reasons, e.g. the previous plan has been flushed from memory or the same text applies to different objects depending on who is executing it.
c) Find the statement after searching the library cache and not have to optimise it because the plan is still available and the user has the appropriate privileges.
d) Operate through the session cursor cache or pl/sql cursor cache allowing it to use a short cut to the statement’s location in the library cache without having to search the cache.
When the Oracle increments the counter for “parse calls” you still have to work out whether that call turned into (a), (b), (c) or (d).
Just to confuse the issue, Oracle may also record a “parse count (hard)” without recording a “parse call”.
Update Jan 2011
Randolf Geist has been looking at adaptive cursor sharing, and has noted that the parse call – including parse calls that go through the session cursor cache – seems to be the point in the code where adaptive cursor sharing can take place: in other words, it’s not an event that gets triggered or flagged by executions.