大家一直都说Drupal的性能不怎么样,跑起来慢,即使不是在用户量大的时候,最近公司的蜜蜂培训产品在一个客户的使用过程中,由于用户量及数据量的激增,就遇到了比较大的性能问题,这篇文章就记录了整个优化过程,最终将性能调整到了正常水平。

蜜蜂培训系统由于是包含报名、签到、投票、评估、考试等场景,而这些场景往往都是有时间点的限制,这就造成较大的用户并发量。刚开始遇到性能问题的时候,大家的第一感觉肯定都是硬件水平跟不上,随后我们对服务器进行了扩容,但发现收效甚微,随着用户不断增加系统也越来越慢,于是我们开始着手优化系统。

首先我们从数据库开始,开启了mysql 慢查询日志,来看看有没有哪些逻辑的数据库查询有问题,这一看真吓一跳,有一个关键逻辑的sql居然最长要执行68秒!

找到了问题所在,那么赶紧着手优化吧,来看看到底这个sql的执行时间到底耗费在了哪里,这里我们用 mysql 的 explain 命令来分析一下这个sql的执行计划, drush sql-cli 进入mysql命令行,敲入 explain + sql 就会打印出这个sql 的执行计划:

参考 explain 命令的说明,可以看到上图signup表是问题所在,这里没用到索引,使用了全表扫描和关联操作,经过对sql 和场景的分析,我们对sql中的这几个关键表对应的添加了新的索引:

function wl_signup_update_7005(){
   if (!db_index_exists('eck_wl_signup', 'search_keys')) {
    db_add_index('eck_wl_signup', 'search_keys', array('entity_type','entity_id','uid'));
   }
}

添加完索引后我们再来分析一下这个sql,看关键指标rows 由原来的近2W降低到了1条,刚刚建的索引起了作用:

更新到生产环境测试效果明显,页面加载时间由30S缩减到了3S左右,性能提升近10倍,一天的观察后这个慢sql再也没出现在日志当中了。

关键页面加载问题解决了,接着我们继续来看考试并发时速度慢的问题,起初我们也在寻找是不是也是因为有这样的慢sql导致了考试加载速度慢,但始终没发现相关的日志记录,之后我们翻出quiz的代码,循着考试步骤一步步找原因,最后我们终于发现了问题所在:

每次答题页面加载的时候会在不同的地方多次去数据库查询整个试卷的layout,当试卷题目数较多时就会造成必要严重的性能问题,之后我们添加了layout 的cache在用户session中,减少了数据库查询次数,相应的页面加载速度也有较大的性能提升:

总结下来我们在遇到数据库性能问题的时候,可以从数据库索引优化与减少数据库查询次数两方面考虑一下。

Drupal性能优化:蜜蜂培训性能优化一的更多相关文章

  1. 性能调优之SQL优化

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  2. 如何快速优化手游性能问题?从UGUI优化说起

    WeTest 导读   本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法.   在之前的文 ...

  3. SQL常见优化Sql查询性能的方法有哪些?

    常见优化Sql查询性能的方法有哪些? 1.查询条件减少使用函数,避免全表扫描 2.减少不必要的表连接 3.有些数据操作的业务逻辑可以放到应用层进行实现 4.可以使用with as 5.使用“临时表”暂 ...

  4. CSS性能分析,如何优化CSS提高性能

    不负十年后的自己,共勉! 前端性能优化一直是一个比较热门的话题,我们总是在尽我们最大的努力去,提高我们的页面性能,比如减少HTTP请求,利用工具对资源进行合并压缩,脚本置底,避免重复请求,css sp ...

  5. [MySQL性能优化系列]LIMIT语句优化

    1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处 ...

  6. [经验] Win7减肥攻略(删文件不删功能、简化优化系统不简优化性能)

    [经验] Win7减肥攻略(删文件不删功能.简化优化系统不简优化性能) ☆心梦无痕☆ 发表于 2014-1-24 11:15:04 https://www.itsk.com/thread-316471 ...

  7. 通过 SMB 直通优化文件服务器的性能

    https://technet.microsoft.com/zh-cn/library/hh831487.aspx Windows Server 2012 内置新增功能,称为 SMB 直通,用来支持使 ...

  8. 常用CSS优化总结——网络性能与语法性能建议

    在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时多少会用到一些,但突然问我,很难把自己知道的都说出来.页面优化明显不是一两句能够说完的,这两天总结了一下 ...

  9. web移动端性能调优及16ms优化

    本文只是一个索引,收集了网络上大部分关于调试及优化方面的文章,从中挑选了一些比较好的文章分享给大家. 移动端性能不及桌面浏览器性能的10分之1,特别是在android设备良莠不齐的情况下,性能显得尤为 ...

随机推荐

  1. HTML标签参考(一)

    hi,小哥哥小姐姐们,我们今天要说的是前端的入门,却也是十分重要的意识的培养哦! • html中的标签数量是很多的,据人统计大概有300个左右,并且每年都会以20-30个的速度增加着,但是这么多的标签 ...

  2. CSS3关于-webkit-tap-highlight-color属性

    最近在写手机端,发现了一个问题,就是javascript点击元素时,在安卓手机上会出现半透明的蓝色背景,(经百度,在苹果手机上会出现半透明的灰色背景),后来通过百度找到了解决方案,就是利用CSS3的- ...

  3. windows安装mysql数据库

    一.下载安装包.进入mysql官网https://www.mysql.com/ 二.打开安装包安装 以上步骤直接点击next即可,遇到配置密码就配置下

  4. 记一款bug管理系统(bugdone.cn)的开发过程(4) - 新增BugTalk功能

    测试人员提出一个Bug,如果开发人员对Bug有疑义,会直接面对面讨论或者通过QQ等线上聊天工具讨论,但过后再去找讨论记录会很麻烦.因此BugDone提出一个全新的概念:将问题的讨论留在问题内.BugD ...

  5. LeetCode 题解之Remove Duplicates from Sorted List II

    1.题目描述 2.题目分析 链表的题,主要注意指针即可. 3.代码 ListNode* deleteDuplicates(ListNode* head) { if (head == NULL || h ...

  6. Hibernate中Session.get()方法和load()方法的详细比较

    一.get方法和load方法的简易理解  (1)get()方法直接返回实体类,如果查不到数据则返回null.load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用 ...

  7. IAM页面是在统一区分配的还是在混合区分配的?

    IAM页面是在统一区分配的还是在混合区分配的? IAM页面的作用这里就不说了,网上的资料很多 文章中用到的工具:查看SQLSERVER内部数据页面的小插件Internals Viewer 先建立四张表 ...

  8. c#中(&&,||)与(&,|)的区别和应用

    对于(&&,||),运算的对象是逻辑值,也就是True/False &&相当与中文的并且,||相当于中文的或者 .(叫做逻辑运算符又叫短路运算符) 运算结果只有下列四种 ...

  9. STL之容器(containers) 简介

    什么是容器? 容器用来存储数据的,数据可以是用户自定义类型(对象),也可以是预定义类型,c++中的容器主要使用如vector,list (顺序容器) 这些都是已经封装好了. 1.结构(struct): ...

  10. 微信小程序审核 出现85085 提交审核数量过多问题

    前段时间发布了一个新版本小程序(错误代码:85085,说明:submit audit reach limit, please try later hint: [OKYBha04570729]),由于我 ...