Hello guys,
I am new to this list and also kind of new to mysql too.
I have a multi-thread application written in Ruby. The application is
reading one table that has two columns (Father, Children). As you might
suspect, this is a tree. The fields are foreign keys to a second table,
but the second table is not involved in the problem. The father-children
table has around 100000 rows.
What the code does is simple. It starts in the root and it navigates the
tree up to the leafs. The first thread takes the root and runs a select to
get all the children. Then it triggers new threads per children and it
ends, leaving the other threads alive. Every thread does exactly the same
until they reach the leafs.
When the threads reach the leafs, they read the description from the other
table using the leaf code, write the value in a global array and end.
With a few rows, the algorithm is very fast. The problem starts when each
node has many children. To give you an idea, in one point in time there
are more than 600 threads running, but for some reason I always see no
more than two queries running in parallel from the MySQL Administrator.
Each thread opens a new connection, runs the select, closes the connection
and ends. I have the default maximum connections, 100. So I should see
more queries in parallel than only two or three. All the connections are
constantly used while the algorithm runs. So the connections are open, but
the database is not doing anything with them. It sounds like the table is
locked, or something. I have checked the code several times but everything
is correct. The code is only 25 lines long.
The other symptom I can see is that when I start the script, there are up
to 30 or 40 queries in parallel, but then the number goes down quickly
until it reaches only 2 or 3 concurrent queries a few seconds later. And
it stays like this.
I've started playing around with the caches and memory values for MySQL
server, but to be honest, I am just guessing and the performance does not
change. I am Oracle DBA and I am trying to find some points in common with
mysql to gain performance, but I cannot find the source of the problem.
I am with Mac OS X Leopard in a very fast machine and MySQL 5.0.51b. The
problem is also present in 5.1.25-rc
Any ideas why is this happening?
Thanks,
Guillermo