Slow connections could be caused by the amount of memory consumed by each DB Connection being allocated.
Back on April 24, 2012, I answered the post How costly is opening and closing of a DB connection?. In that post, I mentioned how there are many buffers connected to a single DB session.
If your Java application strictly closes DB Connections and opens new ones with out, think about deallocating multiple data buffers and communication packets connected to that old connection.
Combine that with the DB Connection entering in infamous TIME_WAIT
state (See my post Too Many Connections) and you get Connections that linger in the OS for quite a while before its resources are released (even if mysqld closed the connection already).
You may need to decrease the size of your sort_buffer_size, read_buffer_size, and join_buffer_size.
If you have any queries that run multiple joins in a single statement, that connection will have multiple join buffers (See my post Fast alternative for "NOT IN"). In that event, you have two choices
- Increase the join_buffer_size to make sure an entire join level fits in memory (requires more RAM in the DB Server)
- Decompose multiple join query that joins more than 2 tables into individual joins between 2 tables