2014-05-10 68 views
0

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

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

目前,我开始和结束每个功能的连接。有没有更好的方式连接到MySQL?

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

+3

_“我的网站在加载页面时会与mysql建立大约50个连接”_ _ - _one_请求中的意思是?如果是这样,你已经明确地实施了错误的;你的脚本应该打开_一个连接,并完成它所要做的所有事情。但是这与持久连接无关 - 这些连接是通过_different_ requests保持开放的,并且这对于简单页面来说不是必需的。 – CBroe

+0

@CBroe我明白了。目前,我在每个功能中启动和结束连接,并且每页都使用各种功能,因为它们很常见。在页面本身开始连接,然后将连接处理程序传递给函数会更好吗?那样它只会使连接正确?这会提高性能吗? (我猜开销会减少) –

回答

1

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

因为您可能正在使用内置于您的php数据库访问库的自动连接池,并且您尚未扩展应用程序,所以您正在逃避这一切。

使用此多连接策略时,您将无法将其扩展得很远,因为添加用户时确实执行得非常糟糕。

有很多基于开放源代码php的web应用系统的例子,你可以看看。 WordPress是一个例子。你会发现,其中大部分是通过打开数据库连接并将其句柄存储在全局变量中开始的。

你问:

根据CBroe的评论,我改变了我的策略。其实,我是 使用多个数据库连接,但功能是一样的(不要 问为什么lol)。因此,如果我在开始时打开连接,然后将 处理程序传递给该函数,那会是一种改进吗?

是的,那样会好的。您需要避免搅动连接以获得最佳性能。

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

PHP在将处理程序传递给函数时没有显着的开销,所以不用担心。

+0

根据CBroe的评论,我改变了我的策略。实际上,我使用多个数据库连接,但功能相同(不要问为什么lol)。因此,如果我在开始时打开连接,然后将处理程序传递给函数,那会是一种改进吗? –

+0

我把它做成了一个社区wiki页面。 –

+0

我明白了。对于堆栈溢出我还是个新手,所以我并不是很了解所有的东西,但这不是关键。 当我将处理程序传递给函数时,它是否会产生(任何)开销?因为我没有通过参考来传递它,我想呢? –

0

正如奥尔琼斯奇妙地解释的那样,我在开始时打开了连接,并且我的连接从每页50-60下降到每页1。尽管我没有看到我的本地开发服务器上的性能发生了任何变化,但它在服务器上运行时肯定会有很大的改进。我没有必要使用持久连接。