大家一直都说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. Python 基于python实现ADSL宽带帐号,密码的获取及宽带拨号

    基于python实现ADSL宽带帐号的获取及宽带拨号     基本思想: 1.研究上网方式(实验环境为电信网线接入式ADSL,拨号方式PPPOE) 2.研究宽带帐号和密码生成规律(实验环境,宽带帐号为 ...

  2. 闲聊jQuery(一)

    Write less, do more. 这便是jQuery的宗旨!jQuery,一个高效.精简并且功能丰富的 JavaScript 工具库. 想必,对于每一个前端开发者,一定用过jQuery吧!俗话 ...

  3. C# 引用的程序集没有强名称

    首先查一下什么是强名称程序集,见百度百科帖子:http://baike.baidu.com/view/1145682.htm简单来说,就是为了解决Windows Dll Hell问题的,即不同公司开发 ...

  4. jquery 比较全面的API中文版地址

    jquery中文API地址 里面有对各个版本的jquery的属性.方法等都有全面的介绍加例子,值得拥有!

  5. Custom Voice 操作步骤

    首先,准备数据 1.Unicode格式的Transcript 2wav格式语音数据,并打包 好,现在POSTMAN进行api测试. 先拿着订阅密钥(Subscription Key)获取令牌(Toke ...

  6. 一、HttpServletRequest接口 二、HttpServletReponse接口 三、POST和GET请求方式及其乱码处理 四、ServletContext对象和ServletConfig对象

    一.HttpServletRequest接口 内部封装了客户端请求的数据信息 接收客户端的请求参数.HTTP请求数据包中配置参数 ###<1>常用方法 getContextPath()重要 ...

  7. SQL Server:INFORMATION_SCHEMA.columns 与sys.columns 与 syscolumns对比

    sys.columns视图 sys.columns是SQL Server从2005版本起引入的新的系统级视图.相关链接如下: Mapping SQL Server 2000 System Tables ...

  8. Pandas Learning

    Panda Introduction Pandas 是基于 NumPy 的一个很方便的库,不论是对数据的读取.处理都非常方便.常用于对csv,json,xml等格式数据的读取和处理. Pandas定义 ...

  9. PyQt5--ShowWindowCenter

    # -*- coding:utf-8 -*- ''' Created on Sep 13, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...

  10. BZOJ5018:[SNOI2017]英雄联盟(背包DP)

    Description 正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」.现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤! 小皮球只会玩N个英雄 ...