I don't think you need to expand your SGA further. Here's SGA of PRODUCTION MIXED (not pure OLTP) system with 100+ simultaneously working users making WELL-TUNED queries/updates on tables with up to 100 000 000 records and normally obtaining results in less then 1 second.
Total System Global Area 969141952 bytes
Fixed Size 69312 bytes
Variable Size 653434880 bytes
Database Buffers 314572800 bytes
Redo Buffers 1064960 bytes
Below is SGA of my testing system with 10 users
Total System Global Area 185368736 bytes
Fixed Size 73888 bytes
Variable Size 106307584 bytes
Database Buffers 78643200 bytes
Redo Buffers 344064 bytes
Simple query joining 2 tables (using indexes appropriately) with 300 000 and 3 000 000 records respectively, still runs in less than 1 second. Though the same query with manually suppressed indexes needs 15 seconds.
Did you gather schema statistics (DBMS_STATS package) after loading data?
Can you choose a VERY SLOW query and provide more information on it: tables involved, their structure, indexes, approximate number of rows, execution plan, used in your environment?
Can you launch the same query from sql*plus and compare speeds? The main problem with ODBC is in slow IO, so if your queries return a lot of records, this may be an issue. As for updates , with pass-through processing the difference is minor.
Regards, Dima