我一直在想,为什么Apache会为每个页面请求启动与MySQL服务器的新连接?为什么不随时保持一个连接打开并通过一个连接发送所有sql查询(显然客户端ID附加到每个req)?
它减少了握手时间开销,以及我看到的其他一些优点。
就像每次要使用它时插入计算机一样。每次只要插上电源插座,为什么要去插座?
答案 0 :(得分:2)
MySQL
不支持单个连接上的多个会话。
Oracle
允许这样做,您可以通过单个Apache
连接设置TCP
多个逻辑会话。
这是MySQL
的限制,而不是Apache
或脚本语言。
有些模块可以进行会话池:
答案 1 :(得分:2)
原因是:它更简单。
要重新使用连接,您必须发明并实现连接池。这增加了另一层几乎必须开发,维护等的代码。
加上池化连接会在开发应用程序时邀请您注意的其他类错误。例如,如果您定义了一个用户变量,但该连接的下一个用户关闭了一个代码路径,该路径根据该变量的存在而分支,那么该用户运行错误的代码。其他问题包括:临时表,事务死锁,会话变量等等。所有这些都变得非常难以复制,因为它取决于两个看起来彼此没有联系的不同用户的后续操作。
此外,mysql连接上的连接开销很小。根据我的经验,连接池确实增加了服务器可以支持的用户数量。
答案 2 :(得分:1)
因为这是mod_dbd
模块的目的。