数码资讯
深入讨论:PHP使用数据库永久连接操作MySQL
PHP程序员应该知道连接mysql数据库可以使用mysql_pconnect(永久连接)功能,使用数据库永久连接可以提高效率,但数据库永久连接的实际应用往往会导致一些问题,性能通常是在访问的网站经常无法连接到数据库,类似的太多的连接在…的错误信息,重新启动服务器是正常的,但短时间内,同一故障后,这些
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
PHP程序员应该知道连接mysql数据库可以使用mysql_pconnect(永久连接)功能,使用数据库永久连接可以提高效率,但数据库永久连接的实际应用往往会导致一些问题,性能通常是在访问的网站经常无法连接到数据库,类似的太多的连接在…的错误信息,重新启动服务器是正常的,但短时间内,同一故障后,这些问题产生的原因,恐怕不是每个人都能说的清楚,虽然在PHP文件中有一些相关的信息,但解释不容易理解,在这里我不想做一个简单的讨论,认为是N一定很好,欢迎回家反馈。
首先,查看数据库永久连接的定义。
A permanent database connection is a connection that is not closed at the end of the script.When a request for a permanent connection is received.PHP will check whether there is a permanent connection that has already been opened (previously opened).If it exists, this connection will be used directly; if it does not exist, a new connection is established.The same connection refers to the connection to the same host with the same username and password.
PHP使用永久连接操作MySQL,PHP必须安装在一个多线程或多进程的Web服务器插件或模块的前提。最常见的形式是使用PHP作为一个多进程Apache服务器模块,用于多进程服务器,其典型特征是一个父进程和一组子过程的协调运作,使网页的实际发生的是一个孩子的过程。当一个客户端请求一个父进程的请求传递给孩子的过程,没有其他的客户端请求占用。这意味着,当相同的客户端请求服务器的二倍,这可能是由不同的子过程处理后的永久连接是打开的,所有的后续页我请求SQL服务可以使用了SQL Server的连接,使每个子进程在其生命周期中只做一次连接操作,而不是对SQL Server的连接请求,每次处理一个页面,每一个孩子的过程中会建立一个单独的永久连接到server.php本身没有数据库连接池的概念,但Apache有一池的过程,一个Apache进程最终会被放回池中,这也使得mysql_pconnect打开MySQL连接资源的利用不能被释放,但连接到相应的Apache子进程保存过程中可在池。下一个连接请求时被重用了。夜一切似乎正常,但访问量大的时候在Apache中,如果你使用mysql_pconnect,因为之前的Apache子进程占用的MySQL连接不紧密,很快就MySQL达到最大连接数,所以在请求可能不会得到回应。
以上的文字部分是从PHP文件中复制,或一些可能看起来微不足道,不好理解,所以我用白话的另一个例子是为了说明问题:
如果1000的Apache配置的最大连接数的最大连接数,对MySQL的配置是100,当Apache服务器接收200的并发访问,其中100个涉及到数据库访问,剩下的100不涉及数据库访问,因为这个时候没有可用的数据库连接,所以100个并发访问数据库也会产生100永久数据库连接有相关,数据库已达到最大连接数,当操作没有任何其他连接访问数据库的连接,当操作结束,相应的连接将被放入池中,Apache池是一个过程的200个游手好闲的孩子过程,100种是与数据库的连接,因为Apache需要随机选择的子过程的自由访问,所以你的过程可能是一个不包含100个数据库,与数据库的连接已达到最大值,你将不能够成功地建立一个新的数据库连接,唉,你必须不断刷新页面,这是运气好,被分配到与数据库的子进程的连接发生,可以浏览网页。如果有大量的访问,可能会有很多并发在任何时间,所以观众会发现无法现象连接到数据库。
也许你会说,让Apache和MySQL之间的最大连接数量和我们一样大,可以吗是的,合理调整最大连接数在一定程度上会避免这个问题,但是Apache和MySQL的负载能力是不同的,如果在Apache的负载能力按照设置MySQL的最大连接数过大,会产生大量的MySQL数据库,例如永久连接,作为和平时期和供养一个百万军队,如果损失的成本大于收益。加载容量;根据mysql设置,对于Apache来说,最大数量的连接是小的,一点鸡肉牛肉刀杀感觉,没有最大化Apache的效率。
所以根据介绍PHP手册,不仅适合使用永久连接数据库的并发访问的网站,而不是并发访问的网站,使用数据库来提高永久性连接不效率似乎没有多少意义,从这一点来看,我认为永久性连接的数据库基本上是个鸡肋的角色,如果你必须使用数据库连接池的概念,你可以试着sqlrelay或Apache本身mod_dbd,也许会有一个惊喜。
首先,查看数据库永久连接的定义。
A permanent database connection is a connection that is not closed at the end of the script.When a request for a permanent connection is received.PHP will check whether there is a permanent connection that has already been opened (previously opened).If it exists, this connection will be used directly; if it does not exist, a new connection is established.The same connection refers to the connection to the same host with the same username and password.
PHP使用永久连接操作MySQL,PHP必须安装在一个多线程或多进程的Web服务器插件或模块的前提。最常见的形式是使用PHP作为一个多进程Apache服务器模块,用于多进程服务器,其典型特征是一个父进程和一组子过程的协调运作,使网页的实际发生的是一个孩子的过程。当一个客户端请求一个父进程的请求传递给孩子的过程,没有其他的客户端请求占用。这意味着,当相同的客户端请求服务器的二倍,这可能是由不同的子过程处理后的永久连接是打开的,所有的后续页我请求SQL服务可以使用了SQL Server的连接,使每个子进程在其生命周期中只做一次连接操作,而不是对SQL Server的连接请求,每次处理一个页面,每一个孩子的过程中会建立一个单独的永久连接到server.php本身没有数据库连接池的概念,但Apache有一池的过程,一个Apache进程最终会被放回池中,这也使得mysql_pconnect打开MySQL连接资源的利用不能被释放,但连接到相应的Apache子进程保存过程中可在池。下一个连接请求时被重用了。夜一切似乎正常,但访问量大的时候在Apache中,如果你使用mysql_pconnect,因为之前的Apache子进程占用的MySQL连接不紧密,很快就MySQL达到最大连接数,所以在请求可能不会得到回应。
以上的文字部分是从PHP文件中复制,或一些可能看起来微不足道,不好理解,所以我用白话的另一个例子是为了说明问题:
如果1000的Apache配置的最大连接数的最大连接数,对MySQL的配置是100,当Apache服务器接收200的并发访问,其中100个涉及到数据库访问,剩下的100不涉及数据库访问,因为这个时候没有可用的数据库连接,所以100个并发访问数据库也会产生100永久数据库连接有相关,数据库已达到最大连接数,当操作没有任何其他连接访问数据库的连接,当操作结束,相应的连接将被放入池中,Apache池是一个过程的200个游手好闲的孩子过程,100种是与数据库的连接,因为Apache需要随机选择的子过程的自由访问,所以你的过程可能是一个不包含100个数据库,与数据库的连接已达到最大值,你将不能够成功地建立一个新的数据库连接,唉,你必须不断刷新页面,这是运气好,被分配到与数据库的子进程的连接发生,可以浏览网页。如果有大量的访问,可能会有很多并发在任何时间,所以观众会发现无法现象连接到数据库。
也许你会说,让Apache和MySQL之间的最大连接数量和我们一样大,可以吗是的,合理调整最大连接数在一定程度上会避免这个问题,但是Apache和MySQL的负载能力是不同的,如果在Apache的负载能力按照设置MySQL的最大连接数过大,会产生大量的MySQL数据库,例如永久连接,作为和平时期和供养一个百万军队,如果损失的成本大于收益。加载容量;根据mysql设置,对于Apache来说,最大数量的连接是小的,一点鸡肉牛肉刀杀感觉,没有最大化Apache的效率。
所以根据介绍PHP手册,不仅适合使用永久连接数据库的并发访问的网站,而不是并发访问的网站,使用数据库来提高永久性连接不效率似乎没有多少意义,从这一点来看,我认为永久性连接的数据库基本上是个鸡肋的角色,如果你必须使用数据库连接池的概念,你可以试着sqlrelay或Apache本身mod_dbd,也许会有一个惊喜。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。