Wouter,

now that I read the query log more carefully I notice that it was thread 23
who was holding the row locks.

>From the query log wee see that thread 23 says 'Quit' around 14:47.

Could it be that you have some 5 minute timeout for a silent connection?
When the connection is terminated, MySQL rolls back the transaction, which
explains why the locks disappeared.

Regards,

Heikki

.......
I've cleaned up the log a bit for easy reading.
---
14:42:42   23 Connect     wouter@localhost on
    23 Init DB     rosetta
    23 Query       SHOW VARIABLES
    23 Query       SET autocommit=0
    23 Query       SELECT [t0.columns] FROM REQUEST t0,
ROSETTA USER T1 WHERE (t0.EXTERNAL IDENTIFIER = 'RequestID01' AND
T1.LOGIN = 'login') AND t0.USER ID = T1.USER ID FOR UPDATE
14:43:13   22 Query       SELECT [t0.columns] FROM REQUEST t0 WHERE
t0.STATUS = 'ReadyForProcessing' ORDER BY t0.CREATION DATE ASC
    22 Query       commit
14:43:18   24 Connect     wouter@localhost on
    24 Init DB     rosetta
    24 Query       SHOW VARIABLES
    24 Query       SET autocommit=0
    24 Query       SELECT [t0.columns] FROM REQUEST t0,
ROSETTA USER T1 WHERE (t0.EXTERNAL IDENTIFIER = 'RequestID01' AND
T1.LOGIN = 'login') AND t0.USER ID = T1.USER ID FOR UPDATE
14:43:43   22 Query       SELECT [t0.columns] FROM REQUEST t0 WHERE
t0.STATUS = 'ReadyForProcessing' ORDER BY t0.CREATION DATE ASC
    22 Query       commit
14:44:12   24 Query       SELECT [t0.columns] FROM REQUEST t0,
ROSETTA USER T1 WHERE (t0.EXTERNAL IDENTIFIER = 'RequestID01' AND
T1.LOGIN = 'login') AND t0.USER ID = T1.USER ID FOR UPDATE
14:44:33   22 Query       SELECT [t0.columns] FROM REQUEST t0 WHERE
t0.STATUS = 'ReadyForProcessing' ORDER BY t0.CREATION DATE ASC
    22 Query       commit
14:44:53   24 Query       SELECT [t0.columns] FROM REQUEST t0,
ROSETTA USER T1 WHERE (t0.EXTERNAL IDENTIFIER = 'RequestID01' AND
T1.LOGIN = 'login') AND t0.USER ID = T1.USER ID FOR UPDATE
14:45:18   22 Query       SELECT [t0.columns] FROM REQUEST t0 WHERE
t0.STATUS = 'ReadyForProcessing' ORDER BY t0.CREATION DATE ASC
    22 Query       commit
14:45:24   24 Query       SELECT [t0.columns] FROM REQUEST t0,
ROSETTA USER T1 WHERE (t0.EXTERNAL IDENTIFIER = 'RequestID01' AND
T1.LOGIN = 'login') AND t0.USER ID = T1.USER ID FOR UPDATE
14:45:42   22 Query       SELECT [t0.columns] FROM REQUEST t0 WHERE
t0.STATUS = 'ReadyForProcessing' ORDER BY t0.CREATION DATE ASC
    22 Query       commit
14:45:54   24 Query       SELECT [t0.columns] FROM REQUEST t0,
ROSETTA USER T1 WHERE (t0.EXTERNAL IDENTIFIER = 'RequestID01' AND
T1.LOGIN = 'login') AND t0.USER ID = T1.USER ID FOR UPDATE
14:46:23   22 Query       SELECT [t0.columns] FROM REQUEST t0 WHERE
t0.STATUS = 'ReadyForProcessing' ORDER BY t0.CREATION DATE ASC
    22 Query       commit
14:46:41   24 Query       SELECT [t0.columns] FROM REQUEST t0,
ROSETTA USER T1 WHERE (t0.EXTERNAL IDENTIFIER = 'RequestID01' AND
T1.LOGIN = 'login') AND t0.USER ID = T1.USER ID FOR UPDATE
14:47:08   22 Query       SELECT [t0.columns] FROM REQUEST t0 WHERE
t0.STATUS = 'ReadyForProcessing' ORDER BY t0.CREATION DATE ASC
14:47:09   22 Query       commit
    23 Quit
14:47:28    3 Query       DROP TABLE innodb lock monitor
---End Query Log



----- Original Message -----
From: ""Heikki Tuuri"" <[EMAIL PROTECTED]>
Newsgroups: mailing.database.mysql
Sent: Friday, September 06, 2002 7:20 PM
Subject: Re: InnoDB locks disappear


> Wouter,
>
> the Lock Monitor output tells that trx 370099 has been committed or rolled
> back by the user. That is why the locks have disappeared.
>
> Have you taken into account the following:
> 8.5 When does MySQL implicitly commit or rollback a transaction?
>   a.. MySQL has the autocommit mode switched on in a session if you do not
> do set autocommit=0. In the autocommit mode MySQL does a commit after each
> SQL statement, if that statement did not return an error.
>   b.. If an error is returned by an SQL statement, then the
commit/rollback
> behavior depends on the error. See section 13 for details.
>   c.. The following SQL statements cause an implicit commit of the current
> transaction in MySQL: ALTER TABLE, BEGIN, CREATE INDEX, DROP DATABASE,
DROP
> TABLE, RENAME TABLE, TRUNCATE, LOCK TABLES, UNLOCK TABLES. The CREATE
TABLE
> statement in InnoDB is processed as a single transaction which is
> independent of the current user transaction. It means that a ROLLBACK from
> the user does not undo CREATE TABLE statements the user made during his
> transaction.
>   d.. If you in the autocommit mode use LOCK TABLES it is like BEGIN
> TRANSACTION in the sense that it switches the autocommit mode off until
you
> call UNLOCK TABLES.
>   e.. If you you have the autocommit mode off and end a connection without
> calling an explicit COMMIT of your transaction, then MySQL will roll back
> your transaction.
> Regards,
>
> Heikki
>
>
> ..........
> Heikki,
>
> Yep. That's why I use seperate connections for holding the lock and
> to do the subsequent locking attempts. Besides, if that were the
> problem, I would see the lock disappear at the very first failed
> locking attempt, but that's not the case.
>
> I thought it might be a connection timeout, but the settings don't
> seem to allow for that (unless my debug session takes 8 hours).
> Aargh, why isn't there a nice log that tells me why the lock is
> released. Or is there? I remember a debug-option, do you think that
> may work?
>
> Wouter Zelle
>
> >----- Original Message -----
> >From: "Wouter Zelle" <[EMAIL PROTECTED]>
> >
> >  > Unfortunately it is not that easy. I've set the
> >>  innodb_lock_wait_timeout to 1 because I want locks to fail quickly,
> >>  so my program can move on to the next request. In pseudocode:
> >>
> >>  Fetch a bunch of requests with status=unprocessed
> >>  Try to obtain a lock through a select * from x for update
> >>  If lock: process
> >>  If lock-timeout: move on to the next request.
> >>
> >>  This works perfectly except that the locks disappear suddenly for no
> >>  good reason at all. This takes far longer than the
> >
> >did you take into account that a lock wait timeout error rolls back the
> >WHOLE transaction and releases ALL locks of that transaction?
> >
> >Regards,
> >
> >Heikki
>
> --
> sql, query, stupid filter
>
>
>
>
> ---------------------------------------------------------------------
> Before posting, please check:
>    http://www.mysql.com/manual.php   (the manual)
>    http://lists.mysql.com/           (the list archive)
>
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail
<[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
>



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to