Php 持久化mysql连接的优势

Php 持久化mysql连接的优势,php,mysql,performance,persistent-connection,Php,Mysql,Performance,Persistent Connection,在我的网站上,当用户打开他的个人资料或任何其他页面时(几乎所有页面都使用mysql的数据),我的网站在加载页面时会与mysql建立大约50个连接。这是我的开发服务器上的情况,运行基本操作系统 当我开始了解mysql中的持久连接时,我感到困惑。如果我要在VPS上运行这个网站(启动时RAM较低),并且考虑到大量mysql连接产生的开销,使用持久连接会提高我的网站性能吗 目前,我在每个函数中启动和结束一个连接。有更好的方法连接mysql吗 而且,考虑到如果有100个用户同时使用我的网站,如果每个页面有

在我的网站上,当用户打开他的个人资料或任何其他页面时(几乎所有页面都使用mysql的数据),我的网站在加载页面时会与mysql建立大约50个连接。这是我的开发服务器上的情况,运行基本操作系统

当我开始了解mysql中的持久连接时,我感到困惑。如果我要在VPS上运行这个网站(启动时RAM较低),并且考虑到大量mysql连接产生的开销,使用持久连接会提高我的网站性能吗

目前,我在每个函数中启动和结束一个连接。有更好的方法连接mysql吗


而且,考虑到如果有100个用户同时使用我的网站,如果每个页面有50-60个连接,性能会如何?

你问了,我会回答。你做得不对。您应该通过使用公共函数建立单个数据库连接来开始处理每个页面请求(每个外部可访问的.php文件),然后应该重用该连接

这是因为您可能正在使用内置于php数据库访问库中的自动连接池,并且还没有扩展应用程序

使用这种多连接策略,您将无法将其扩展到很大程度,因为在添加用户时,它的性能确实会非常差

有很多基于php的开源web应用程序系统的例子,你可以看看。WordPress就是一个例子。您会发现,它们中的大多数都是从打开数据库连接并将其句柄存储在全局变量中开始的

你问:


根据CBroe的评论,我改变了策略。事实上,我是 使用多个数据库连接,但功能相同(不需要 问为什么(笑)。所以如果我在启动时打开连接,然后通过 函数的处理程序,这会是一种改进吗

是的,那很好。您需要避免频繁切换连接以获得最佳性能

如果需要连接到多个不同的数据库,可以将它们全部打开。但听起来你只需要点击一个数据库


PHP在向函数传递处理程序时没有太大的开销,所以不用担心。

正如Ollie Jones精彩地解释的那样,我在开始时打开了连接,我的连接从每页50-60个下降到每页1个。虽然我在本地开发服务器上看不到性能的任何变化,但当它在实时服务器上运行时,这肯定是一个很大的改进。我还没有必要使用持久连接。

“我的网站在加载页面时与mysql建立了大约50个连接”——你是说一个请求就可以实现?如果是这样的话,你肯定是错误地实施了它;你的脚本应该打开一个连接,然后完成所有必须完成的事情。但这与持久性连接无关——这些连接在不同的请求之间保持打开状态,对于一个简单的页面来说,这应该不是必需的。@CBroe我明白了。目前,我在每个函数中启动和结束一个连接,并在每个页面上使用各种常用函数。在页面本身上启动连接,然后将连接处理程序传递给函数是否更好?这样只会让连接正确吗?这会提高性能吗?(我想开销会减少)根据世邦魏理仕的评论,我改变了策略。实际上,我正在使用多个数据库连接,但函数是相同的(不要问为什么lol)。所以,如果我在启动时打开连接,然后将处理程序传递给函数,这会是一种改进吗?我明白了。我对堆栈溢出还是个新手,所以我不太了解所有的事情,但这是离题的。当我将处理程序传递给函数时,它是否会产生(任何)开销?因为我不是通过引用来传递它,我想?