Apache - > MySQL多个连接与一个连接

时间:2009-10-09 14:06:11

标签: mysql apache connection

我一直在想,为什么Apache会为每个页面请求启动与MySQL服务器的新连接?为什么不随时保持一个连接打开并通过一个连接发送所有sql查询(显然客户端ID附加到每个req)?

它减少了握手时间开销,以及我看到的其他一些优点。

就像每次要使用它时插入计算机一样。每次只要插上电源插座,为什么要去插座?

3 个答案:

答案 0 :(得分:2)

MySQL不支持单个连接上的多个会话。

例如,

Oracle允许这样做,您可以通过单个Apache连接设置TCP多个逻辑会话。

这是MySQL的限制,而不是Apache或脚本语言。

有些模块可以进行会话池:

  • 预先创建多个连接
  • 按需选择免费连接
  • 如果没有可用的免费连接,请创建其他连接。

答案 1 :(得分:2)

原因是:它更简单。

要重新使用连接,您必须发明并实现连接池。这增加了另一层几乎必须开发,维护等的代码。

加上池化连接会在开发应用程序时邀请您注意的其他类错误。例如,如果您定义了一个用户变量,但该连接的下一个用户关闭了一个代码路径,该路径根据该变量的存在而分支,那么该用户运行错误的代码。其他问题包括:临时表,事务死锁,会话变量等等。所有这些都变得非常难以复制,因为它取决于两个看起来彼此没有联系的不同用户的后续操作。

此外,mysql连接上的连接开销很小。根据我的经验,连接池确实增加了服务器可以支持的用户数量。

答案 2 :(得分:1)

因为这是mod_dbd模块的目的。