在PHP中,当Web服务器同时并发地处理多个请求时,是否存在到数据库服务器的多个连接?

piztneat  于 2023-02-07  发布在  PHP
关注(0)|答案(1)|浏览(244)

例如,假设我有一个脚本,可以直接(不缓存)从数据库(MySQL)读取/更新/删除数据。如果此时有n个并发请求执行此脚本,则此时也有n个到数据库的连接,对吗?
先谢了

wljmcqd8

wljmcqd81#

在PHP中,数据库连接是resources。资源不在请求之间共享。例如,您不能在一个PHP请求中打开一个文件句柄,而在另一个PHP请求中使用该文件句柄。资源在请求结束时自动关闭。
每个需要读取或写入数据库的请求都会打开自己的数据库连接。如果多个请求同时运行,则数据库可能会有多个连接。
但也有例外:PHP脚本不一定在启动时立即打开数据库连接,或者它可能在脚本完成之前关闭数据库连接。或者另一个PHP脚本可能根本不需要访问数据库,因此它跳过打开数据库连接。因此,您可能有并发的PHP请求正在执行,但不是所有请求都拥有打开的数据库连接。这取决于您的代码,这就是上面一些评论模棱两可的原因。
也就是说,常见的PHP编码实践是在脚本启动后立即打开数据库连接,并在请求期间保持打开状态,在脚本退出时依靠PHP垃圾收集关闭数据库连接。
因此,我认为在任何典型的PHP应用程序中,多个并发请求都会占用相同数量的并发数据库连接。
您可以使用MySQL查询工具进行检查:

  • SHOW GLOBAL STATUS LIKE 'Threads_connected';显示运行此命令时打开的客户端连接的当前数量。
  • SHOW GLOBAL STATUS LIKE 'Max_used_connections';显示了过去(自上次重新启动MySQL服务器以来)连接的高水位线。
  • SHOW PROCESSLIST;显示当前连接的详细信息,如它们正在运行的SQL语句(如果在SQL语句之间处于空闲状态,则显示"Sleep")。

相关问题