【发布时间】:2021-03-16 11:25:32
【问题描述】:
我的主机对于数据库用户的最大连接数非常非常。这是我的用户遇到的错误:
用户 'username_here' 已超过 'max_user_connections' 资源(当前值:15)。
除非我升级到更昂贵的计划,否则我认为我没有能力提高该价值,因此我正在寻找一种有效使用这 15 个连接的方法。 我处理连接的方式如下:我在每次页面加载开始时加载的脚本中连接到数据库,然后将该连接传递给运行查询的函数。我想我可以通过在查询函数中打开连接并在返回语句之后立即关闭它来最小化连接打开的时间,这很好还是我无缘无故地让事情变得更复杂?
作为最后的手段,我正在考虑将连接放在 try/catch 中,并尝试每隔几秒重新连接几次。这样做是明智之举,还是更糟?
【问题讨论】:
-
您获得了多少流量?如果您经常有 15 个并发用户,我想
max_user_connections并不是您在低端托管计划中遇到的唯一问题。现在,假设单个脚本调用从开始到结束需要 0.33 秒,或者在访问数据库的持续时间内。这意味着您每秒将拥有 45 个唯一用户(假设用户不是每秒都加载页面!)。这是繁忙的交通。如果不是这种情况,您可能正在运行 persistent connections,这会占用您的连接配额。 -
在任何情况下,为每个查询关闭和重新打开数据库链接将是巨大的开销,并且可能会使每个用户每次调用的总数据库使用时间超过数据库链接只是打开时的时间持续时间。是的,您总是可以捕获失败的连接尝试,让脚本休眠片刻,然后重试。如果没有其他帮助,作为最后的手段。只是为了记录,每个页面调用平均运行多少查询?另外:确保每个页面加载时不会有大量 AJAX 调用导致唯一的数据库连接。
-
15 一点也不低。拥有数千名访问者的网站应该没问题。
-
每隔几秒钟重新连接几次是一场灾难。这意味着您的脚本将运行“几秒钟”而不是几毫秒,使其无法连接其他客户端。我的意思是连接到网络服务器。
-
在每个功能中连接也是一场灾难。连接操作相对较慢,您的脚本将执行更长时间,再次消耗服务器资源。遵循以下答案中的建议,您会没事的。顺便说一句,好问题。
标签: php optimization mysqli