Are you using bind variables? This may have a bearing on your system.

People often cheat and hardcode SQL when sending it through ODBC like:

rs.Open "SELECT * FROM my_table WHERE id = " & vId, conn

instead of using a command object and using a parameterized query. This approach will fill the shared pool with almost identicle copies of the same statement. If you use bind variables your shared pool will become more efficient and you'll save loads of CPU.

Since rewriting your application my take some time you might want to consider using:

cursort_sharing=force

This is not a complete fix.

Cheers