我们运营着一个流量很大的博客,拥有约500名实时用户和10000篇帖子。我们在VPS上由self托管-16gb,4核,单独的mysql DB服务器-4gb,2核;两个SSD。托管服务器没有问题,但数据库服务器有时连接不足,尽管我们有超过312个最大连接上限。我们没有任何杂散插件,最长执行时间约为5分钟。任何人都不知道是什么导致了这个问题。
More insights:我们可以关联的是,当我们的博客作者(最多10个)在我们的办公室工作时,在单一IP和缓慢中断的网络连接下,这个问题碰巧更频繁。发布高峰时间的问题比空闲时间的问题更频繁。
或者是数据库服务器的ram不足,最终导致连接中断。搜索引擎爬行通常消耗更多的Cpu,但机器人程序建立的连接不超过30 db,我们的服务器完全可以处理这些机器人程序。
当单个管理员长时间将帖子保持在编辑模式时,也可以防止
wp配置详细信息
“WP\\u MEMORY\\u LIMIT”,“256M;”AUTOSAVE\\u间隔\',160;最大执行时间500
我们的查询监视器有一些PHP 7.2折旧警告,虽然主题是稳定的,有些查询很慢,但帖子的修订对我们来说也是至关重要的。
SO网友:MikeNGarrett
这决不是一个明确的答案,但我有一些技巧,比评论允许的时间要长。
我担心最高执行时间太长。问题的根源可能与到DB的连接数无关,而更多地与这些连接存在的时间有关。
以下是一些需要研究的问题:
管理心跳(Admin Heartbeat)您同时提到了大量在线编辑器。这个Heartbeat API 根据您的设置和用户的活动,每15秒触发一次,并且每个用户每次都可以写入DB。
检查心跳间隔和存储的修订数。我看到您已经调整了自动保存间隔。
数据库更新触发的数据库写入对于mysql来说是最密集的。写入请求越多,尤其是在同一时间,负载越高。如果写入队列过长,可能会导致延迟打开的连接,最终会使可用连接达到最大。
更新或发布帖子时,除了更新帖子数据,还会发生什么您是否使用缓存插件来清除缓存,甚至可能是数据库中的瞬态缓存您是否使用发布后重新生成的XML站点地图插件您是否使用分析内容的SEO插件您是否使用链接跟踪器或分析器所有这些(或其中许多)都可能导致数据库写操作泛滥
减少数据库负载
如果您还没有对象缓存存储解决方案,请准备一个对象缓存存储解决方案。
Redis 或
Memcache 奇迹般地减少数据库的负载。
检查您的选项autoload
选项表中的列指示是否在所有请求中从数据库读取选项。如果这个值很大,则可能会导致对数据库的请求更长。这是对象缓存可以提供帮助的另一个地方。这可能不会影响您的情况,但值得关注性能问题。