php - MySQL 高 CPU 使用率和持久链接

标签 php mysql

我在 mysqld 进程上遇到非常高的 CPU 峰值(大于 100%,甚至一度达到 300%)。我的平均负载约为:.25、.34、.28。

我读了这篇关于这个问题的精彩帖子:MySQL high CPU usage

要做的主要事情之一是禁用持久连接。所以我检查了我的 php.ini 和 mysql.allow_persistent = onmysql.max_persistent = -1 -- 这意味着没有限制。

为了确定,在更改任何内容之前,这对我提出了几个问题:

  1. 如果我的 mysqld 进程每隔几秒就超过 100%,我的平均负载难道不应该比它们高吗?
  2. 禁用永久链接有何作用 - 我的脚本会继续按原样运行吗?
  3. 如果我关闭它并重新加载 php,这对我当前的用户意味着什么,因为会有很多活跃用户。

编辑:

CPU 信息:Core2Quad q9400 2.6 Ghz

最佳答案

持久连接本身不会使用任何 CPU - 如果没有任何东西在使用连接,它只是闲置并且只消耗一点内存并占用一个套接字。

平均负载就是平均值。如果您有一个每秒在 0% 和 100% 之间交替 10 次的进程,您将获得 0.5 的平均负载。它们有助于找出长期持续的高 CPU,但就其本质而言,它们会隐藏/消除峰值迹象。

通常不需要与 mysql 的持久连接。 MySQL 有一个相对快速的连接协议(protocol),使用持久连接所节省的时间是相当少的。缺点是一旦连接持续存在,它可能会处于不一致状态。例如如果使用该连接的应用程序意外终止,MySQL 将不会看到并开始清理。这意味着应用程序创建的任何服务器端变量、任何锁、任何事务等...都将保留在应用程序崩溃时它们所处的状态。

当连接被另一个应用程序重新使用时,您将从水槽中的脏盘子和未冲水的马桶开始。由于悬空事务/锁,它很容易导致死锁 - 新应用程序不会知道它们,并且旧应用程序不再存在以放弃它们。

关于php - MySQL 高 CPU 使用率和持久链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7110230/

相关文章:

php - 在这种情况下,我将选择什么来实现缓存?

php - PHP 中的/** 是什么?

php - php 和 mysql 中的多个搜索值

Mysql查询,根据其他填充一个值

mysql - 将 %keyword% 转换为匹配(反对)

mysql - 使用外键约束来防止更新父行

javascript - Uncaught ReferenceError : xmlhttp is not defined?

javascript - 从 jQuery 数组中删除逗号

php - 将 'Array' 插入 mysql 表的各个字段(不是原始数据)

java - 将记录插入同一 MySQL Schema 的不同表中