I'm using Laravel 5.1.
The queues are used for data fetching/syncing between several systems.
I use the database driver, 3 "artisan queue:work --daemon" processes are running all the time.
The jobs are dispatched both by system users and scheduler (cron). Three queues are used to prioritize the jobs.
Everything seems to be working just fine - the jobs table gets filled with records, the system takes care of them and removes the ones that are done.
However after some time locking issues are starting to interfere:
SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
and
'RuntimeException' with message 'Can't swap PDO instance while within transaction.'
and
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
I haven't tried using another queue driver yet. I'd really like to stay with database though. The engine is InnoDB, the jobs table has default structure and indexes.
Is there a way to solve this issue? What are your thoughts?
It might be worth mentioning that I call the DB::reconnect()
inside my job classes since the queue workers are running as daemons.
The jobs are dispatched using DispatchesJobs
trait as one would expect. I don't interfere with queues algorithm in any other way.
COMMIT
transactions as soon as practical. Check the use ofautocommit
. – Rick James