2009-10-09 54 views
2

我一直在想,为什么Apache为每个页面请求启动一个到MySQL服务器的新连接?为什么它不是一直保持ONE连接打开,并通过该连接发送所有sql查询(显然,每个req都附带了客户端ID)?Apache - > MySQL多个连接vs一个连接

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

这就像每次你想使用它插入电脑。为什么每次插入插座时都要去插座?

回答

2

原因是:这很简单。

重新使用连接,你必须发明和实现连接池。这增加了另一层需要开发,维护的代码。

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

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

1

因为这就是mod_dbd模块的用途。

2

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

Oracle允许此设置,并且您可以设置Apache以通过单个TCP连接来多重逻辑会话。

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

有模块,可以做会话池:

  • 预先创建的连接数
  • 选择按需
  • 自由连接创建额外的连接,如果不是免费的连接可用。