我将MySQL 5.0用于GoDaddy(linux)托管的网站。
我在Web应用程序上进行了一些测试,突然我发现页面刷新非常缓慢。最终,经过漫长的等待,我到达了一个页面,上面写着“ MySQL错误,连接过多…”,它指向我的连接数据库的config.php文件。
只是我连接到数据库,没有其他用户。在每个页面上,我都在顶部包含config.php文件,并在页面末尾关闭mysql连接。中间可能有几个查询。我担心我没有足够关闭mysql连接(mysql_close())。
但是,当我在运行查询后尝试关闭它们时,在页面上收到连接错误。我的页面是PHP和HTML。当我尝试关闭查询时,下一个查询似乎无法连接。关闭后是否需要再次包含config.php才能进行连接?
此错误使我感到恐惧,因为在2周内,大约有84个人开始使用此Web应用程序。
谢谢。
编辑:
这是我页面的一些伪代码:
require_once('../scripts/config.php'); <?php mysql_query.. if(this button is pressed){ mysql_query... } if(this button is pressed){ mysql_query... } if(this button is pressed){ mysql_query... } ?> some html.. .. .. .. .. <?php another mysql_query... ?> some more html.. .. .. <?php mysql_close(); ?>
我认为,这样,每次打开页面时,连接都会打开,然后在页面加载完成时关闭连接。然后,当有人单击页面上的按钮时,连接再次打开,依此类推…
好的,所以我刚和GoDaddy下了电话。显然,通过我的经济套餐,我一次只能连接50个连接。尽管今天的问题只发生在我访问该网站的时候,但他们说他们之前遇到了一些服务器问题。但是,考虑到我的Web应用程序将拥有84个用户的方式,我可能应该升级到“豪华”,这一次允许100个连接。在某一天,一次可能会有大约30个用户访问我的网站,所以我认为100个用户是更安全的选择。你们同意吗?
共享主机提供程序通常允许同一用户进行少量同时连接。
您的代码的作用是:
在页面末尾完成时,最后一步不是 必需的 :(引用mysql_close手册):
mysql_close
通常不需要使用mysql_close(),因为在脚本执行结束时会自动关闭非持久性打开链接。
但是请注意,您可能永远不应该使用持久连接…
两个提示:
mysql_connect
mysql_pconnect
如果使用相同的参数再次调用mysql_connect(),则不会建立新的链接,而是将返回已打开的链接的链接标识符。 new_link参数修改了此行为,并使mysql_connect()始终打开新链接,即使之前使用相同参数调用了mysql_connect()也不例外。
如果使用相同的参数再次调用mysql_connect(),则不会建立新的链接,而是将返回已打开的链接的链接标识符。
new_link参数修改了此行为,并使mysql_connect()始终打开新链接,即使之前使用相同参数调用了mysql_connect()也不例外。
那么,什么原因会引起问题呢?
也许您正在尝试并行访问多个页面 (例如,使用浏览器中的多个选项卡) ,这将同时模拟多个使用该网站的用户?
如果您有许多用户同时使用该站点,并且mysql_connect连接之间的代码以及关闭连接的过程都需要花费大量时间,则意味着同时打开多个连接…您将达到极限 :- (
不过,由于您是该应用程序的唯一用户,考虑到最多允许200个同时连接,所以发生了一些奇怪的事情…
好吧,考虑“ 连接过多 ”和max_connections“ …”
max_connections
如果我没有记错,max_connections不限制连接数 ,你 可以打开MySQL服务器,但 连接的总数 ,可以开博到该服务器, 任何人连接到它 。
引用MySQL的文档说明连接过多:
如果在尝试连接到mysqld服务器时出现连接过多错误,则意味着所有可用连接正在被其他客户端使用。 允许的连接数由max_connections系统变量控制。其默认值为100。如果需要支持更多连接,则应为此变量设置一个较大的值。
如果在尝试连接到mysqld服务器时出现连接过多错误,则意味着所有可用连接正在被其他客户端使用。
允许的连接数由max_connections系统变量控制。其默认值为100。如果需要支持更多连接,则应为此变量设置一个较大的值。
因此,实际上,问题可能并非出自您,也不是您的代码 (实际上看起来还不错) :它可能“只是”是您不是唯一尝试连接该MySQL服务器的人 (请记住,“共享主机”) ,并且有太多人同时使用它…
… 如果我是对的 ,那么您无能为力,无法解决问题:只要该服务器上的数据库/用户过多并且max_connection设置为200,您将继续遭受痛苦…
max_connection
作为旁注:在回到GoDaddy询问他们之前,如果有人可以验证我刚才说的话^^