首页 文章

MySQL高CPU使用率和持久链接

提问于
浏览
6

我在mysqld进程上的CPU峰值非常高(大于100%,甚至在一点上看到300%) . 我的平均负载大约是:.25,.34,.28 .

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

其中一项主要工作是禁用持久连接 . 所以我检查了我的php.ini和 mysql.allow_persistent = onmysql.max_persistent = -1 - 这意味着没有限制 .

在改变任何事情之前,这为我提出了一些问题,以确保:

  • 如果我的mysqld进程每隔几秒钟突然超过100%,那么我的负载平均值不应高于它们吗?

  • 什么会禁用持久链接 - 我的脚本会继续按原样运行吗?

  • 如果我关闭它并重新加载php这对我当前的用户意味着什么,因为会有很多活跃的用户 .

编辑:

CPU信息:Core2Quad q9400 2.6 Ghz

2 回答

  • 8

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

    负载平均值就是 - 平均值 . 如果你的进程在每秒10次和0%之间交替变换,你的平均负载为0.5 . 它们有助于找出长期持久的高CPU,但是由于它们的性质隐藏/消除了尖峰的迹象 .

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

    当连接被另一个应用程序重新使用时,您将从水槽中的脏盘子和未冲洗的马桶开始 . 它很容易导致死锁,因为悬挂的事务/锁定 - 新的应用程序将无法了解它们,旧的应用程序不再放弃那些 .

  • 0

    尖刺很好 . 这是MySQL正在做的工作 . 您的平均负载似乎合适 .

    禁用持久链接只是意味着脚本无法使用与数据库的现有连接 . 我不建议禁用此功能 . 至少,如果要禁用它们,请稍后在应用程序上执行,而不是在MySQL上执行 . 这甚至可能会略微增加负载,具体取决于条件 .

    最后,数据库持久性与您网站上的用户无关(通常) . 用户发出请求,并且一旦加载了所有页面资源,就是它,直到下一个请求 . (在少数特定情况下除外 . )在任何情况下,当请求发生时,脚本仍将连接到DB .

相关问题