最近一直在为降低MySQL服务器负载努力,Drupal网站中主要是排查Views引起的性能问题,而MediaWiki中也有一个与Drupal的Views对应的工具:Dynamic Page List (DPL动态页面列表),既可以灵活运用得到希望的信息展示效果,但同时也容易引起数据库负载过高、性能下降。

当网站打开很慢的时候,还是需要查看阿里云RDS数据管理控制台DMS(Data Management Service),查看诊断报告或者当前实例会话,查看慢查询语句,例如发现大量这样的语句:

SELECT DISTINCT `jinglepage`.page_namespace AS page_namespace,

`jinglepage`.page_title AS page_title,

`jinglepage`.page_id AS page_id,

rev_user,

rev_user_text,

rev_comment,

rev_timestamp

FROM `jinglerevision` AS rev,

`jinglepage`

INNER JOIN `jinglecategorylinks` AS cl0 ON `jinglepage`.page_id= cl0.cl_from

AND(cl0.cl_to= '骗子号码')

WHERE 1= 1

AND `jinglepage`.page_namespace IN('0')

AND `jinglepage`.page_is_redirect= 0

AND `jinglepage`.page_id= rev.rev_page

AND rev.rev_timestamp=(

SELECT MIN(rev_aux.rev_timestamp)

FROM `jinglerevision` AS rev_aux

WHERE rev_aux.rev_page= rev.rev_page)

ORDER BY rev_timestamp DESC

LIMIT 500 OFFSET 0

这是我们一个叫做“查号吧”网站中列出网友举报的[[骗子号码]]的页面生成需要的MySQL查询语句,这500个最新号码是用DPL扩展程序列出的,Wiki中的源代码如下:

{{#dpl:

|namespace=

|ordermethod = firstedit

|order = descending

|addeditdate = true

|category = 骗子号码

|adduser = true

|mode = userformat

|listseparators= ,¶# %DATE%: [[%PAGE%]] - %USER%

}}

没有想到其中列出首次编辑时间、增加用户名称等会让SQL很要复杂一些起来,运行速度变慢,可以加入debug=3这个参数来显示SQL语句以便调试。我后来采取了几个措施:

去掉了adduser,不显示%USER%信息了,这样还可以避免用户怕IP暴露;

排序条件从firstedit首次编辑时间改为pagetouched,也就是页面更新时间(有可能是其使用的模板变化引起);

显示first edit date变为显示page touched date;

增加了redirects重定向页面也可以显示列表。

具体源代码改为:

{{#dpl:

|ordermethod = pagetouched

|order = descending

|addpagetoucheddate = true

|category = 骗子号码

|redirects = include

|mode = userformat

|listseparators= ,¶# %DATE%: [[%PAGE%]]

|debug = 3

}}

这样可以看到SQL语句变为了:

SELECT DISTINCT `jinglepage`.page_namespace AS page_namespace,

`jinglepage`.page_title AS page_title,

`jinglepage`.page_id AS page_id,

`jinglepage`.page_touched AS page_touched

FROM `jinglepage`

INNER JOIN `jinglecategorylinks` AS cl0 ON `jinglepage`.page_id= cl0.cl_from

AND(cl0.cl_to= '骗子号码')

WHERE 1= 1

ORDER BY page_touched DESC

LIMIT 500 OFFSET 0

明显比前面的查询条件简单,实测运行时间从5004 ms下降到2902 ms。这样显示的列表没有了首次编辑时间,从功能上说比原来稍微差一点,但不改动模板的情况下,页面更新时间和首次编辑时间是相同的,所以也还不太影响最后的显示效果。

还有其它页面(例如:[[首页]])和模板(例如:[[模板:分类骗子]]、[[模板:省份手机三位]]、[[模板:省份手机四位]]、[[模板:省份手机五位]]、[[模板:运营商手机三位]]、[[模板:运营商手机四位]]等)我也做了类似改动,综合起来对改善服务器负载应该有好的作用。

MediaWiki的DPL列表功能没有Drupal的Views灵活强大,也不是很方便控制最后的SQL语句,只好多查看手册,用一些条件来尝试,对SQL语句运行进行对比,观察RDS MySQL服务器的负载情况和诊断报告,从慢查询是否减少来判断效果。

补充参考资料:

其中几个可能用到的技巧:

调试SQL语句:增加|debug=3

去掉DISTINCT:distinct=false

增加了redirects重定向页面也可以显示列表:redirects=true

不要排序:ordermethod=none

返回数量:可改为较小或为1:

尽量用Title而不用其他字段构造内容显示;

尽量少返回的数据,或者如果需要的话设定为1:count=10;

简化分类,能不用的分类尽量不用,可结合namespace=example, matchtitle=example 来生成列表

mediawiki修改用mysql数据库_修改MediaWiki的动态页面列表DPL设置降低MySQL负载相关推荐

  1. 一台服务器可以安装多个mysql数据库_在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式...

    (一)MySQL多实例概述 实例是进程与内存的一个概述,所谓MySQL多实例,就是在服务器上启动多个相同的MySQL进程,运行在不同的端口(如3306,3307,3308),通过不同的端口对外提供服务 ...

  2. 安卓studio访问mysql数据库_小白通过JDBC在AndroidStudio一步步来访问MYSQL数据库-Go语言中文社区...

    许久没来写博客了,不是因为没有时间,而是把时间拿来敲一些设计模式,数据结构了,毕业不是科班出身,还是得练习下基本功. 今天突然想玩玩JDBC,说做就做,这里记录我的整个操作过程,数据的流程参与互联网上 ...

  3. mcbbs mysql数据库_[娱乐|RPG]WEpicInventory —— 史诗背包!无限拓展!高度自由!MYSQL支持![1.12.2]...

    background: 'file:WEpicInventory/主界面/背景2.png' x: -1 y: -1 w: 205 h: 166 slotLeft: 6 slotTop: 86 # # ...

  4. 【MySQL】查看 mysql 数据库最后修改时间、创建时间、表大小

    查看 mysql 数据库最后修改时间.创建时间.表大小 一个库有几十张表,有很多这样的库. 想要查询一个库最近一次修改的时间,用以判断哪个是最近在使用的库. 有什么办法可以查询一个库最近一次修改的时间 ...

  5. 在cmd中配置安装mysql数据库密码_windows安装mysql数据库并修改密码

    1.下载 1 MySQL Community Server 5.7.18 2 https://dev.mysql.com/downloads/mysql/ 2.解压 如果想要让MySQL安装在指定目录 ...

  6. mysql 6安装当前密码_windows安装mysql数据库并修改密码

    1.下载 MySQL Community Server 5.7. https://dev.mysql.com/downloads/mysql/ 2.解压 如果想要让MySQL安装在指定目录,那么就将解 ...

  7. mysql数据库如何修改ip地址

    在MySQL数据库中修改IP地址,需要修改MySQL的配置文件(my.cnf或my.ini),并在其中更改相关的IP设置. 具体步骤如下: 打开MySQL的配置文件:在Windows系统中,可以在&q ...

  8. UPUPWANK集成环境智控平台的mysql数据库密码修改位置---潘万丁

    UPUPWANK集成环境智控平台的mysql数据库密码修改的文件我暂时还未找到,但是在控制界面看到修改账号和密码的位置:

  9. 将sql数据导入mysql数据库_将sql导入mysql数据库

    MYSQL导入导出.sql文件 MYSQL导入导出.sql文件 一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=": ...

最新文章

  1. 1、tomcat目录及端口规划实践
  2. 2013年2月28日星期四
  3. 丑数 Humble Numbers
  4. (转)Redis上踩过的一些坑-美团
  5. Android Root原理初探
  6. centos 卸载软件_一篇看懂!详解-Linux系统中安装软件的三种方法
  7. margin-top/bottom(padding-top/bottom)百分比以祖级宽度计算
  8. 交接文档怎么写_怎么写一篇实用的需求说明文档
  9. C# Activator.CreateInstance()方法使用
  10. Zero Forex领汇来告诉你什么是WH?
  11. saber软件安装常见问题
  12. Ping++通过PCI DSS认证,保护企业用户信息安全
  13. LightGBM算法——广告收益回归预测模型
  14. Spring之SpEL
  15. 有哪些网络推广方式,常见的网络推广方法有几种
  16. python安装Python包时报错处理
  17. tomcat启动没有反应以及不写日志解决方法
  18. 浅谈CSS自定义下划线
  19. select语句(4)--Oracle中的日期格式及千年虫问题
  20. DNN中DDR Menu中的输入XML片段

热门文章

  1. 电子和计算机工程密歇根大学,美国密歇根大学迪尔本校区电子与计算机工程系主任 Yi Lu Murphey教授来我校进行学术交流并作学术报告...
  2. QFP、LQFP、TQFP、TEQFP、BGA等芯片封装技术
  3. java手机杀毒_Android项目实战手机安全卫士(01)
  4. 全球与中国2,5-二甲基-2,5-己二醇市场现状及未来发展趋势
  5. 做出刷屏文字的6大哲学
  6. Java 8 String类API 手册 翻译 中英文对照
  7. 什么叫反光识别读数识别_回老家前 微信这个超实用小技巧一定要学会
  8. SVG之Animation
  9. 数学建模之美赛小总结
  10. php开启页面错误提示,php如何设置关闭网页错误提示