重映射因死锁而失败

我拥有一个包含大量帖子(920 万条)的大型数据库,其中包含许多超大型主题(有些甚至超过 15 万条帖子!)。当我尝试将其恢复到另一台服务器时,在进行新主机名重映射的过程中,会出现类似以下的错误:

正在恢复上传内容,这可能需要一些时间...
正在优化站点图标...
帖子将由 Sidekiq 中的后台作业重新烘焙。在该过程完成之前,您将看到图片缺失。
您可以通过手动运行 "rake posts:rebake_uncooked_posts" 来加快此过程。
异常:错误:检测到死锁
详情:进程 960 正在等待事务 4765 的共享锁;被进程 2184 阻塞。
进程 2184 正在等待事务 4915 的共享锁;被进程 960 阻塞。
提示:请查看服务器日志以获取查询详情。
上下文:在更新关系 "posts" 中的元组 (566294,13) 时

有什么方法可以解决这个死锁问题吗?

这发生在一台 8GB 内存的标准 Droplet 上。

在尝试重新烘焙时,我在另一台配置相当不错的数据库服务器上也遇到了类似的问题,该服务器拥有 16GB 内存,并配有一台同样拥有 16GB 内存的独立 Web 服务器。这两台服务器同时还托管着一些其他规模较小、访问量较低的网站。

这是否可能是由超大型主题引起的?除了将它们拆分为更小的主题外,还有其他解决方案吗?

如果在重映射期间停止运行 web 和 sidekiq 进程,事情会简单得多,这样就不会有锁竞争了。

非常感谢!问题解决了。而且,在你提出建议后,这如此显而易见

抱歉再次提及此事,我们也遇到了同样的问题。

如何停止 Web 和 Sidekiq 进程?

由于您正在使用开发环境,只需按下 Ctrl+C 即可。

在 Docker 中,我们应该如何停止它?

sv stop unicorn
sv stop sidekiq

Unicorn 就是 Web 服务器对吧?