dedecms数据库优化一

这几天服务器负载突然升高。看了下主要是mysql占用cpu太高了。

查看了日志,主要是dedecms的顶踩功能导致的。使用explain分析了下将sql语句改了下

/*$query = "Select arc.*,m.userid,m.face,
          tp.typedir,tp.typename,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
          From `#@__archives` arc left join `#@__arctype` tp on tp.id=arc.typeid left join `#@__member`  m on m.mid=arc.mid
          where $typequery arc.arcrank=0
          order by arc.`{$sort}` desc limit $maxrc ";*/

$query = "Select arc.*,m.userid,m.face,
          tp.typedir,tp.typename,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
          From `#@__archives` arc left join `#@__arctype` tp on tp.id=arc.typeid left join `#@__member`  m on m.mid=arc.mid
          where $typequery arc.arcrank=0
          desc limit $maxrc ";

================================

dedecms dede_archives表中arcrank和ismake 说明  

 dede_archives表是dede里面最为关键的表
1、$arcrank =-1是代表未审核,0带表审核:

2、$ismake生成html:0或者1; 入库的时候是0,程序会判断是不是生成了html,如果是会调整到1;

     审核状态生成html:$arcrank=-1  $ismake = 0 (但是后台文章列表那里显示没有生成,点击修改文章是显示以生成,其实没生成,因为是未审核,一但审核,自动变成1)。

     审核状态动态浏览:$arcrank=-1   $ismake = -1 ;
      开放状态生成html:$arcrank=0  $ismake = 1 ;
      开放状态动态浏览:$arcrank=0    $ismake = -1 ;

1)数据分表存储 减轻数据单表压力

自织梦V5版本起,DedeCMS开始分表存储以提高系统负载性能,确实在一定程度上缓解了数据压力。现在最新的DedeCMS V5.7版本已经出来了,据官方介绍,V5.7调整了缓存处理,应付50万以内数据没问题,至于真实性无从考究。如果官方陈述属实的话,对于中小型站长来说确实是件好事,正常百万级内数据也不用过多担心了。

分表存储如何操作?

如果你只是个人或企业等小型站点,数据量也就撑死上万,那完全不用考虑分表存储,DedeCMS完全可以胜任。分表操作很简单,你只需要直接进入后台,新建模型,然后设置一个栏目对应一个模型。个人建议一个大的频道栏目及子栏目对应一个模型,这要根据你的栏目可能存储的数据来做计划,考虑实际一点的分表方案。

2)修改系统参数 arclist标签另类优化

在DedeCMS V5版本中,官方其实已经做了极力优化,引入了缓存机制。其实影响HTML生成速度的罪魁祸首还是模板中的arclist标签,很多站长喜欢用arclist标签来调用最新、热门、推荐、头条等文章列表,但是arclist标签每次都带着一大堆条件去主表中查询,可能还会关联附加表,对一次性生成大量文章来说,只是重复使用arclist标签对数据库重复查询罢了,自然会花去大量时间。现在DedeCMS新的版本中,生成HTML时arclist标签会直接调用缓存数据,省去arclist标签重复查询数据库的时间,顿时让上述工作变得轻松起来,生成速度得到提升也是必然的。你只用在系统参数->性能选项中,找到arclist标签调用缓存(cfg_index_cache)(0 不启用,大于0值为多少秒),根据自身实际需求调整缓存调用时间。

其实,还有一种解决办法,就是麻烦了一些,但是对性能提升是非常显著的。arclist标签调用缓存虽说一定程度上提高了HTML生成速度,但是还是需要对arclist缓存进行判断,如果能把这部分时间也省去,那是不是会更快呢?答案是肯定确定以及双重否定。我们可以通过freelist(自由列表)功能事先生成最新、热门、推荐、头条等文章列表页面,然后用include标签直接引入到模板里,标签格式为:{dede:include file=’文章列表页面文件名称’ ismake=’ no’/}。如果你的站长数据很庞大,服务器硬件配置也一般的话,何不尝试一下呢?

另外,系统参数-核心设置里默认的关键字替换功能(cfg_keyword_replace)是开启的,如果文章是采集过来的,还是关闭的好,有很多关键字都毫无意义,甚至会有乱码导致生成出错,关掉此功能对提高系统性能是有一定帮助的。

3)数据库表索引优化 性能大幅提升

为什么要对DedeCMS数据库表索引进行优化呢?很简单,在Mysql中,索引无疑是最有效的加快查询的工具了,一个合理的索引组合会极大地提升你的查询效率和系统性能。言归正传,你可以通过phpmyadmin或是一个叫Navicat for MySQL的软件(推荐)来管理你的数据库。

分析DEDECMS数据表信息,不难发现,所有的文章数据是存储在dede_archives和dede_arctiny,以及对应的dede_addonarticle附加表中的。生成HTML时,sql查询主要围绕这三张表来的。个人认为,凡是要排序的字段和查询条件的字段及文档ID都要建立索引,如果一个没有建立,将会严重影响MySQL的查询效率,最终导致生成速度变慢。DEDECMS数据表索引建立方法如下:

a)dede_archives,是文章的主表,存储文章标题、关键字、描述、发布时间等信息,10万数据的表大小可能在30MB左右,也是我们优化的重点。你需要建立的索引字段有,id、channel、pubdate、sortrank、ismake、typeid、mainindex、lastpost;其中,像系统默认的mainindex和lastpost这两个组合索引,个人认为存在意义不大,可以删除,自己掂量。需要注意的是,click字段,是文档的点击数,此字段更新频率,建立索引后会对系统维护带来一定压力,另外也有人说频繁更新的建立索引会容易导致数据库损坏,也无从查证。个人建议click字段保留,不建立索引。

b)dede_arctiny,这个表比较小,10万数据的表大小不到5MB,可以将自带的删除掉,或者只保留sortrank索引。

c)dede_addonarticle,是文章附加表,主要是用来存储文章内容的

转载于:https://my.oschina.net/mickelfeng/blog/120529

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值