Heikki,

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
innodb_lock_wait_timeout. On second thought, it doesn't seem to be a
timer at all, because the locks don't end sooner if I step through my
program in the debugger. I'm not sure, but it seems to take a number
of queries to do it. Could InnoDB release locks after x failed
attempts to lock the same row?

The Inno Lock Monitor is supposed to be useful for debugging, does
the report in my original post contain anything that could cause
this? I think that the table locks seem fishy since I only use record
locks at that point in my code. Could there be something wrong with
that?

Wouter Zelle

--- Part of the INNODB MONITOR OUTPUT
--
TABLE LOCK table rosetta/request trx id 0 370099 lock_mode IX
RECORD LOCKS space id 0 page no 50 n bits 80 table rosetta/request
index PRIMARY
  trx id 0 370099 lock_mode X
Record lock, heap no 1 RECORD: info bits 0 0: len 9; hex
73757072656d756d00; asc
  supremum.;;
Record lock, heap no 2 RECORD: info bits 0 0: len 8; hex
80000000000000c5; asc .
.......;; 1:
Record lock, heap no 10 RECORD: info bits 0 0: len 8; hex 80000000000000e8; asc
.......Þ;; 1:
Suppressing further record lock prints for this page
TABLE LOCK table rosetta/rosetta_user trx id 0 370099 lock_mode IX
RECORD LOCKS space id 0 page no 53 n bits 288 table
rosetta/rosetta_user index P
RIMARY trx id 0 370099 lock_mode X
Record lock, heap no 220 RECORD: info bits 0 0: len 8; hex
8000000000000d28; asc
  .......(;; 1:
---

>the default for
>
>innodb_lock_wait_timeout
>
>is 50 seconds in recent versions. It may be that the manual at www.mysql.com
>is outdated and claims it is infinite.
>
>A lock wait timeout rolls back the whole transaction and releases all locks.
>
>You should check the return value of your queries and look if they are
>reporting lock wait timeouts or other errors.
>
>>  I would really appreciate some help,
>>
>>  Wouter Zelle
>
>Best regards,
>
>Heikki Tuuri
>Innobase Oy
>---
>Order technical MySQL/InnoDB support at https://order.mysql.com/
>See http://www.innodb.com for the online manual and latest news on InnoDB

--

---------------------------------------------------------------------
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