问题标签 [mysql-pconnect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
328 浏览

php - php 的 mysql_pconnect 何时认为连接“可用”?

我正在使用 php-fpm(一个 fastcgi php 管理器),并且对 php 何时认为使用 mysql_pconnect 创建的持久连接可用而不是创建新连接感到困惑。

每当我尝试启用 mysql_pconnect 与 mysql_connect 时,我与 mysql 服务器的打开连接都会攀升,直到达到允许的最大值。如果没有 mysql_pconnect,我一次可以打开 30-50 个 mysql 连接。我的 mysql wait_timeout 设置为 5。

感觉就像当我开始使用 mysql_pconnect 时,它只是不断地创建新的连接,而没有识别出任何可用的旧连接。php-fpm(或 fastcgi)会导致这种情况吗?

是否有关于 mysql_pconnect 如何将连接视为“可用”的任何详细信息?

谢谢。

0 投票
1 回答
1367 浏览

php - persistent connections and wait timeout

Who maintains persistent connections pool?

I've looked a bit at the source code and I understood that mysql_pconnect is a PHP made function and PHP itself is maintaining a pool of connections. It's not mysql's built in functionality and PHP only is responsible for maintaining a pool. Which seems legit.
Am I right ?

Slow queries killer?

I'm experiencing some problems with timed out connections.
My my.cnf has a configuration of wait_timeout=5. This is theoretically meant to kill queries that take more then 5 seconds to execute.

With this configuration I feel like I'm not achieving neither the 5 seconds limit per query, nor any benefits from persistent connections.

Could you validate my thoughts and suggest something?
php 5.3.3, mysql 5.1 via mysql ext, no mysqlnd

0 投票
1 回答
486 浏览

php - 持久的数据库连接没有被重用

我在我的一个应用程序中使用 phpgacl 库进行授权。这个库正在使用 mysql_pconnect 连接到数据库。问题是连接没有被重用,有时整个应用程序因错误连接过多而崩溃。我没有太多并发用户,因此增加 mysql 中的最大连接数不会永久解决问题。我做了一个简单的测试来简化问题。我写了一个简单的 php 脚本/var/www/a.php

当我第一次点击localhost/a.php时,我在 mysql processlist 中看到一个与数据库的连接。当我第二次点击该链接时,我希望该连接能够被重用。但是,事实并非如此。创建了一个新连接,我看到两个连接处于睡眠状态。每次我点击链接时,计数都会增加。

当我重新启动 apache 时,所有这些连接都会关闭。

我想知道 php mysql_pconnect 是如何工作的,以及它是如何使用以前建立的 mysql 连接的。而且,为什么在我上面提到的示例中没有发生这种情况?

这里的评论之一是:

You are probably using a multi-process web server such as Apache. Since database connections cannot be shared among different processes a new one is created if the request happen to come to a different web server child process.

这是否意味着不建议将 mysql_pconnect 与 apache 一起使用?

0 投票
1 回答
296 浏览

php - 在 php 中使用 mysql_pconnect 的优缺点

我想知道什么时候应该使用 mysql_pconnect 而不是 mysql_connect。

0 投票
0 回答
367 浏览

php - 由于 mysql 错误,PHP cronjob 失败

我从 cpanel 设置了一个 cronjob,但意外地导致了 mysql 错误。

php -f /home/server1/public_html/xad/imp.php

0 投票
3 回答
1573 浏览

php - mysql_pconnect 替代以工作

所以我知道 mysql_pconnect 已被弃用,有没有办法真正做到这一点,我有一个旧脚本,在连接文件中有以下内容:

我有其他选择吗?

//LE

这给了我“无法选择数据库,请检查数据库名称是否正确。”

0 投票
0 回答
435 浏览

php - mysql_close 和 mysql_pconnect 不工作

我有这种情况:

在 config.php 文件中我有 mysql_connect 和 mysql_select_db 函数,在 function.php 文件中我有一个很长的函数,在“index.php”文件中我调用这个函数(执行 INSERT 查询),然后,我关闭mysql连接。

看起来一切都很好,但是如果我用 ApacheBenchmark 测试该脚本的性能,我会看到很多睡眠连接并且 mysql 达到了 max_user_connection 的限制:

所以我使用了 mysql_pconnect 函数:

**首先,连接时,该函数将首先尝试查找已使用相同主机、用户名和密码打开的(永久)链接。如果找到,将返回它的标识符,而不是打开新连接。

其次,脚本执行结束时不会关闭与 SQL 服务器的连接。相反,该链接将保持打开状态以供将来使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的链接)。**

但问题依然存在:

如果文件相同并且 mysql_pconnect 使用相同的用户/密码/数据库,为什么会发生这种情况?

我怎么解决这个问题?谢谢

0 投票
1 回答
874 浏览

mysql - 使用缓冲区大小和持久连接配置优化 mysql (mariadb) 中数据库性能的最佳方法

我有;

  • PHP 7.3 中使用 CodeIgniter 框架的 CRUD 重负载应用程序。
  • 只有 2 个用户访问应用程序。
  • 数据库是 mariadb 10.2,有 10 个表。通常,存储的 INT 和引擎默认是 InnoDB,但在表中,我存储了一个“mediumtext”列。
  • 由 cronjobs 管理的应用程序(每分钟 10 个不同的作业)
  • 一个工作的平均收益是来自 DB 的 100-200 CRUD。(总共 ~ 1k-2k CRUD 在一分钟内使用 10 个表)

经测试

  1. MySQL 中的持久连接我遇到了最大连接超出的问题,所以我注意到如果你没有在 database.php 中将 pconnect 设置为 true,Code Igniter 不会关闭连接。因此,简化一下,如果您将其设置为 true,它会使用允许持久连接。所以,我想解决这个问题,我找到了一个需要将其设置为false的解决方案,它会自动关闭所有连接。我更改了配置以禁止持久连接。

  2. 在我更新持久连接后禁用。我的应用程序开始正常运行,1 小时后,由于下面显示的几个错误,它再次崩溃,我通过在 mariadb 的 my.cnf 中将max_allow_package设置为最大值来修复这些错误。

    警告 --> 发送 QUERY 数据包时出错。PID=2434 查询错误:MySQL 服务器已消失

  3. 我注意到数据库需要调整。数据库大小为 1GB+。我每分钟都有很多 CRUD 作业。因此,我将缓冲区大小更改为 1GB,将 innodb 引擎池大小更改为 %25。我习惯了MySQL Tuner,并用它来计算这些变量。

最后,我仍然收到查询包错误。

数据包乱序。预期 0 收到 1. 数据包大小=23

我的服务器有 8GB 内存(使用了 %25),4 核 x 2ghz(使用了 %10)我现在无法确定哪种配置是最佳选择。我无法增加 RAM,也 %25 使用了 ram,因为密钥缓冲区大小为 1GB,它可以充分利用 ram 即时作业。

我可以吗;

  • 修复数据库错误,
  • 增加平均完成的 CRUD 过程
0 投票
1 回答
41 浏览

mysql - 我正在尝试为一个项目制作座位预订系统。此代码无法显示哪些座位已被占用

*此代码可帮助您预订座位,但无法显示已占用一次。我无法理解如何存储这些座位并将它们显示为已占用。在运行此代码之前,请在您的设备上安装 tkinter *

如果我们可以使用 mysql 来存储选择或占用的按钮,我猜这也会有所帮助