>> One of the first things I've noticed out of a number of
>> thread dumps is that there's about an 80% chance that
>> the stack points to I/O requests from PGStream.ReceiveChar().
>> I'm wondering about any hints or pointers that would help
>> me understand whether that's expected behavior, or something that
>> needs fixing, or just generally how to evaluate/improve
>> JDBC performance.
>
> The ReceiveChar call is waiting for data from the backend.
> I'm not sure how you're identifying blocked threads, but
> ReceiveChar is a blocking call underneath the hood.
> So this just shows that the driver is waiting while
> queries are executing which is perfectly expected.
I'd like to add to this that you should only start tuning if
you experience a performance problem.
In your case, if most of the time is spent waiting for database
results, you could check if the SQL statements can be
improved. Also, I have seen cases where much time gets
lost in client-server chat because a program performs 1000s
of nearly identical short queries in a loop instead of
performing one bigger query that would have the database server
perform the loop more efficiently.
As I said, only tune when you have a problem.
Yours,
Laurenz Albe