使用队列时发生了 MySQL 死锁

队列使用database

 production.ERROR: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction (SQL: delete from `jobs` where `id` = 1790893) {"exception":"[object] (Illuminate\\Database\\QueryException(code: 40001): SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction (SQL: delete from `jobs` where `id` = 1790893)
[stacktrace]

我一开始开启了10个队列进程,因为又加了一些队列业务又增加了8个队列进程
运行一段时间后发现在删除队列时会频繁的出现死锁,
我希望能够定位到问题并解决此死锁问题

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案
    /**
     * Delete a reserved job from the queue.
     *
     * @param  string  $queue
     * @param  string  $id
     * @return void
     *
     * @throws \Throwable
     */
    public function deleteReserved($queue, $id)
    {
        $this->database->transaction(function () use ($id) {
            if ($this->database->table($this->table)->lockForUpdate()->find($id)) {
                $this->database->table($this->table)->where('id', $id)->delete();
            }
        });
    }

datebase作为队列引擎时,会开启一个事务同时加上排它锁,还是推荐改成用redis吧。

1周前 评论
Dream_java_php (楼主) 1周前
cheer (作者) 5天前
Dream_java_php (楼主) 5天前
讨论数量: 4

很明显mysql的问题,用redis或者rabbit搞吧。

1周前 评论
    /**
     * Delete a reserved job from the queue.
     *
     * @param  string  $queue
     * @param  string  $id
     * @return void
     *
     * @throws \Throwable
     */
    public function deleteReserved($queue, $id)
    {
        $this->database->transaction(function () use ($id) {
            if ($this->database->table($this->table)->lockForUpdate()->find($id)) {
                $this->database->table($this->table)->where('id', $id)->delete();
            }
        });
    }

datebase作为队列引擎时,会开启一个事务同时加上排它锁,还是推荐改成用redis吧。

1周前 评论
Dream_java_php (楼主) 1周前
cheer (作者) 5天前
Dream_java_php (楼主) 5天前

这个是从 Laravel/framework 的 Github 中的 Issues 中找到的。

希望这个 issue 对你有帮助

看不懂可以百度翻译~

1周前 评论
直面苦痛的人生

:joy: :sob: :sob: :sob: :sob: :sob: :sleepy: :weary: :sweat: :sweat: :cold_sweat: :cry: :pensive:

4天前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!