----- Original Message -----
> From: "Rik Wasmus" <r...@grib.nl>
> 
> 2 simultaneous queries with the same thread-id? Is that possible?

No, not with the same thread-id. Deadlock occurs when two threads attempt to 
lock the same resources, but do so in an order which causes both sides to hold 
part of the resources the other needs.

Say you have tables a and b, both wanted by threads 1 and 2. At roughly the 
same time, thread 1 locks a while thread 2 locks b. The next obvious step for 
both is that 1 tries to lock b and 2 tries to lock a; but those resources are 
both in use, so at this point both threads must wait for the other to free up 
the resources. Since neither of them can complete and free the held locks for 
the other to use, deadlock occurs.

In theory, this will last until one of them times out or gives up. In practice, 
the engine will (mostly...) notice that the second thread is trying to initiate 
a deadlock and unceremoniously shoot the bastard in the head.

> I always thought (based on
> http://dev.mysql.com/doc/refman/5.5/en/too-many-
> connections.html) I'd get 1 super-connection without question, and I

That should be the case, and I used to understand it that way, too; but 
experience has taught me not to rely on that :-)

> didn't get any 'too many connections' errors, but timeouts on connecting.
> But let's say that in this case (MySQL needing a kill -9) all bets about 
> proper
> connecting are sort of off ;) ). Nevertheless, according to the
> manual, max_user_connections configures "The maximum number of simultaneous
> connections permitted to any given MySQL user account.", which would

Hmm. you're right. Still, I'd say that it's unlikely that connection swamping 
happens from more than one account at once, so it should help in most instances 
(and has saved me before).

> mean (and a test shows) it is per-user name, and it would only work if we have
> only 1 non-admin/non-super-user, while in reality, we have several users
> with specific privileges. Not an incredible lot, but about 20 nonetheless,

'super' refers to a very specific privilege, not a random combination of 
administrative stuff like create/drop, and 20 users is a whole lot to give that 
to. You should really consider if that many need it.

> Ack, I assume this means the 'SHOW ENGINE INNODB STATUS;' at the
> moment of the problem, rather then just the output I get now?

Yep. The output is a combination of current data and since-start counters.

> Hmm, we're never using explicit (table) locks, only implicit by the
> innodb-transaction, ans usually even then the transaction is just the single
> statement (autocommit is usually on save for a few instances). Does
> order in joins matter in terms of setting them alphabetically? That would mean

Uhh... Unsure, but it might.

> checking & rewriting a heck of a lot of codebase... Also, taking for instance
> the latest detected deadlock from the innodb status, I don't know how to
> actually prevent it on an SQL-query level:

Strictly speaking, the engine should detect it and kill the thread initiating 
deadlock - as seen in your output there.


-- 
Bier met grenadyn
Is als mosterd by den wyn
Sy die't drinkt, is eene kwezel
Hy die't drinkt, is ras een ezel

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to