discuz mysql cpu 100_千万级记录的Discuz论坛导致MySQL CPU 100%的优化笔记

发现此主机运行了几个 Discuz 的论坛程序, Discuz论坛的好几个表也存在着这个问题。于是顺手一并解决,cpu占用再次降下来了。

前几天,一位朋友通过这篇文章找到了我,说他就是运行最新的 discuz 版本,MySQL 占用 CPU 100%,导致系统假死,每天都要重启好几次,花了一个多月的时间一直没有解决,希望我帮忙一下。经过检查,他的这个论坛最重要的几个表中,目前 cdb_members 表,有记录 6.2 万;cdb_threads 表,有记录 11万;cdb_posts表,有记录 1740 万;所有数据表的记录加起来,超过 2000 万;数据库的大小超过 1GB。经过半天的调试,总算完成了 discuz 论坛优化,于是将其解决经过记录在这篇文章中。

2007年3月我发现 discuz 论坛的数据库结构设计有一些疏忽,有许多查询子句的条件比较,都没有建立 Index 索引。当时我所检查的那个数据表,记录只有几千条,因此对 CPU 负荷不大。现在这个数据库表,上千万的记录检索,可以想象,如果数据表结构设计不规范,没有提供索引,所耗费的时间是一个恐怖的数字。有关 MySQL 建立索引的重要性,可以参见我的这篇文章底部的说明

为了调试方便,我从 dizcus 的官网下载了其最新的 Dizcus! 5.5.0 论坛程序.

我首先检查了 my.ini 的参数配置,一切正常。进入 MySQL 的命令行,调用 show processlist 语句,查找负荷最重的 SQL 语句,结合 Discuz 论坛的源码,发现有以下语句导致 CPU 上升:

复制代码 代码如下:mysql> show processlist;

+-----+------+----------------+---------+---------+------+------------+---------

-----------------------------------------------------------------+

| Id | User | Host | db | Command | Time | State | Info

+-----+------+----------------+---------+---------+------+------------+---------

-----------------------------------------------------------------+

| 363 | root | localhost:1393 | history | Query | 0 | statistics | SELECT C

OUNT(*) FROM cdb_pms WHERE msgfromid=11212 AND folder='outbox' |

+-----+------+----------------+---------+---------+------+------------+---------

检查 cdb_pms 表的结构:

复制代码 代码如下:mysql> show columns from cdb_pms;

+-----------+------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-----------+------------------------+------+-----+---------+----------------+

| pmid | int(10) unsigned | NO | PRI | NULL | auto_increment |

| msgfrom | varchar(15) | NO | | | |

| msgfromid | mediumint(8) unsigned | NO | MUL | 0 | |

| msgtoid | mediumint(8) unsigned | NO | MUL | 0 | |

| folder | enum('inbox','outbox') | NO | | inbox | |

| new | tinyint(1) | NO | | 0 | |

| subject | varchar(75) | NO | | | |

| dateline | int(10) unsigned | NO | | 0 | |

| message | text | NO | | | |

| delstatus | tinyint(1) unsigned | NO | | 0 | |

+-----------+------------------------+------+-----+---------+----------------+

10 rows in set (0.00 sec)

热点聚合:

©CopyRight 2010-2020 EASCK.COM Inc All Rights Reserved. 易采站长站 版权所有

微信扫一扫

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值