-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Daad,
[EMAIL PROTECTED] wrote:
| i think i don't get the utility of a connection pooling, since i have
this situation: 30 threads try to perform at same time a db access with
the call:
|
| new Database().doSomething()
Are you sure you're using your Database class in this way? I wouldn't be
surprised if you are creating a single Database object and using it
repeatedly.
Yes i'm sure, i'm using (new Database()).doSomething() always.
Are your threads actually running in parallel?
That's my question.
| [wed, 09 apr 2008 00:55:03] INFO Database -> doSomething: 836
| [wed, 09 apr 2008 00:55:04] INFO Database -> doSomething: 1444
| [wed, 09 apr 2008 00:55:04] INFO Database -> doSomething: 2054
| [wed, 09 apr 2008 00:55:05] INFO Database -> doSomething: 2417
| [wed, 09 apr 2008 00:55:05] INFO Database -> doSomething: 3060
| [wed, 09 apr 2008 00:55:06] INFO Database -> doSomething: 3647
| [wed, 09 apr 2008 00:55:07] INFO Database -> doSomething: 4279
| [wed, 09 apr 2008 00:55:07] INFO Database -> doSomething: 4967
| [wed, 09 apr 2008 00:55:08] INFO Database -> doSomething: 5592
| [wed, 09 apr 2008 00:55:09] INFO Database -> doSomething: 6208
| [wed, 09 apr 2008 00:55:09] INFO Database -> doSomething: 7026
| [wed, 09 apr 2008 00:55:10] INFO Database -> doSomething: 7455
| [wed, 09 apr 2008 00:55:10] INFO Database -> doSomething: 8087
| [wed, 09 apr 2008 00:55:11] INFO Database -> doSomething: 8705
| [wed, 09 apr 2008 00:55:12] INFO Database -> doSomething: 9318
| [wed, 09 apr 2008 00:55:12] INFO Database -> doSomething: 10040
| [wed, 09 apr 2008 00:55:13] INFO Database -> doSomething: 11146
| [wed, 09 apr 2008 00:55:14] INFO Database -> doSomething: 11702
| [wed, 09 apr 2008 00:55:14] INFO Database -> doSomething: 12033
| [wed, 09 apr 2008 00:55:15] INFO Database -> doSomething: 12658
| [wed, 09 apr 2008 00:55:16] INFO Database -> doSomething: 13279
| [wed, 09 apr 2008 00:55:16] INFO Database -> doSomething: 13897
| [wed, 09 apr 2008 00:55:17] INFO Database -> doSomething: 14523
| [wed, 09 apr 2008 00:55:17] INFO Database -> doSomething: 15139
| [wed, 09 apr 2008 00:55:18] INFO Database -> doSomething: 15759
| [wed, 09 apr 2008 00:55:19] INFO Database -> doSomething: 16411
| [wed, 09 apr 2008 00:55:19] INFO Database -> doSomething: 17056
| [wed, 09 apr 2008 00:55:20] INFO Database -> doSomething: 17672
| [wed, 09 apr 2008 00:55:20] INFO Database -> doSomething: 18292
Every single operation takes more time than the previous operation. That
smells of a problem with resetting a counter. Isn't it interesting that
the logging statements show that all 30 threads completed within 18
seconds of each other, and each thread says that it took up to 18
seconds to complete? If these processes were sharing a single
connection, and they were taking 18 seconds to complete, the total time
would be 9 minutes, not 18 seconds.
As you can see from the code i pasted, start time is taken in getConnection() method and
end time is taken in closeResources() method. So from the logs i understand that all 30
threads arrive in getConnection() at same time (so all "start" variable of each
Database instance is set to same timestamp (about)), but then seems that operation get
enqueued, since the first thread that is able to quit needs 836ms, while the last one
18292ms. That means the second thread that can perform the query waited that first thread
complete the query. So, even if the second thread arrived to getConnection() at same time
of the first, the second took almost double time because waited that the first complete
the task. That's what i understood from logs... I didn't get what you said about 9
minutes. If the operation takes 600-800ms (as first thread demonstrate), 30 x 600 =
18000ms. So with one connection, if those 30 threads are enqueued, the total time is 18
seconds, that is what happens. So i still think that one connection is shared only =\
If anybody know what to check on Mysql application to see if there is a sort of
limitation on number of concurrent queries, please let me know.
Even if you had resource contention (which you shouldn't have with 600
shared connections), I would expect that some numbers would be low and
others were high -- essentially randomly distributed.
It's pretty clear to me that something else is going on... I'm guessing
that the connection pool (which one are you using?) is working just
fine, but either your "load test" code or your server-side database use
is being incorrectly used and/or incorrectly instrumented.
I'm using mysql-connector-java-5.1.5-bin.jar
| so i can't understand the meaning of maxActive parameter.. i thought
| that could be at most 600 concurrent connection.
~From the documentation: "The maximum number of active connections that
can be allocated from this pool at the same time, or negative for no limit."
Your expectation that 600 connections should be available is correct.
Although, 600 connections in a connection pool is a /lot/ of connections. ;)
- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkf8yAkACgkQ9CaO5/Lv0PAGtgCeL5O0jUrxfZZZM/3ix3pbmrWV
kgcAnR1wlDWpS9ez9FE/uNHzKptqTCmc
=mSOU
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]