First things first: You *are* on InnoDB, which has row-level locking instead
of table-level ?

On Mon, Feb 1, 2010 at 4:08 PM, Michael Dykman <mdyk...@gmail.com> wrote:

> The query is probably fine..  that is just the lock doing it's job.
> Take that advice literally..  when you fail with that class of
> exception, delay a milli-second or two and retry.  For a large PHP
> site I designed, we had that behaviour built-in: up to three attempts
> waits 5, then 10 ms between trys.  In spite of 1M+ user/day we rarely
> made it to the third attempt.
>
>  - michael dykman
>
> On Mon, Feb 1, 2010 at 9:33 AM, Dante Lorenso <da...@lorenso.com> wrote:
> > All,
> >
> > I am trying to create an atomic operation in MySQL that will manage a
> > "queue".  I want to lock an item from a table for exclusive access by one
> of
> > my processing threads.  I do this by inserting the unique ID of the
> record I
> > want to reserve into my "cli_lock" table.  The following query is what I
> am
> > using to lock a record in my queue:
> >
> > INSERT INTO cli_lock (lock_id, object_id, lock_type, expire_dt)
> > SELECT $LOCK_ID, q.queue_id, 'parse', DATE_ADD(NOW(), INTERVAL 1 HOUR)
> > FROM queue q
> >  LEFT JOIN cli_lock l ON l.object_id = q.queue_id AND l.lock_type =
> 'parse'
> > WHERE l.object_id IS NULL
> >  AND q.status = 'parse'
> > ORDER BY q.file_size ASC, q.created ASC, q.queue_id ASC
> > LIMIT 1
> >
> > However, as I execute this query several times each minute from different
> > applications, I frequently get these messages:
> >
> > DB ERROR: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found
> when
> > trying to get lock; try restarting transaction
> >
> > Am I writing my query wrong or expecting behavior that MySQL doesn't
> > support?
> >
> > -- Dante
> >
>
>
>
> --
>  - michael dykman
>  - mdyk...@gmail.com
>
>  May the Source be with you.
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?unsub=vegiv...@tuxera.be
>
>


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

Reply via email to