mediawiki修改用mysql数据库_修改MediaWiki的动态页面列表DPL设置降低MySQL负载
最近一直在为降低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负载相关推荐
- 一台服务器可以安装多个mysql数据库_在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式...
(一)MySQL多实例概述 实例是进程与内存的一个概述,所谓MySQL多实例,就是在服务器上启动多个相同的MySQL进程,运行在不同的端口(如3306,3307,3308),通过不同的端口对外提供服务 ...
- 安卓studio访问mysql数据库_小白通过JDBC在AndroidStudio一步步来访问MYSQL数据库-Go语言中文社区...
许久没来写博客了,不是因为没有时间,而是把时间拿来敲一些设计模式,数据结构了,毕业不是科班出身,还是得练习下基本功. 今天突然想玩玩JDBC,说做就做,这里记录我的整个操作过程,数据的流程参与互联网上 ...
- 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 # # ...
- 【MySQL】查看 mysql 数据库最后修改时间、创建时间、表大小
查看 mysql 数据库最后修改时间.创建时间.表大小 一个库有几十张表,有很多这样的库. 想要查询一个库最近一次修改的时间,用以判断哪个是最近在使用的库. 有什么办法可以查询一个库最近一次修改的时间 ...
- 在cmd中配置安装mysql数据库密码_windows安装mysql数据库并修改密码
1.下载 1 MySQL Community Server 5.7.18 2 https://dev.mysql.com/downloads/mysql/ 2.解压 如果想要让MySQL安装在指定目录 ...
- mysql 6安装当前密码_windows安装mysql数据库并修改密码
1.下载 MySQL Community Server 5.7. https://dev.mysql.com/downloads/mysql/ 2.解压 如果想要让MySQL安装在指定目录,那么就将解 ...
- mysql数据库如何修改ip地址
在MySQL数据库中修改IP地址,需要修改MySQL的配置文件(my.cnf或my.ini),并在其中更改相关的IP设置. 具体步骤如下: 打开MySQL的配置文件:在Windows系统中,可以在&q ...
- UPUPWANK集成环境智控平台的mysql数据库密码修改位置---潘万丁
UPUPWANK集成环境智控平台的mysql数据库密码修改的文件我暂时还未找到,但是在控制界面看到修改账号和密码的位置:
- 将sql数据导入mysql数据库_将sql导入mysql数据库
MYSQL导入导出.sql文件 MYSQL导入导出.sql文件 一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=": ...
最新文章
- 1、tomcat目录及端口规划实践
- 2013年2月28日星期四
- 丑数 Humble Numbers
- (转)Redis上踩过的一些坑-美团
- Android Root原理初探
- centos 卸载软件_一篇看懂!详解-Linux系统中安装软件的三种方法
- margin-top/bottom(padding-top/bottom)百分比以祖级宽度计算
- 交接文档怎么写_怎么写一篇实用的需求说明文档
- C# Activator.CreateInstance()方法使用
- Zero Forex领汇来告诉你什么是WH?
- saber软件安装常见问题
- Ping++通过PCI DSS认证,保护企业用户信息安全
- LightGBM算法——广告收益回归预测模型
- Spring之SpEL
- 有哪些网络推广方式,常见的网络推广方法有几种
- python安装Python包时报错处理
- tomcat启动没有反应以及不写日志解决方法
- 浅谈CSS自定义下划线
- select语句(4)--Oracle中的日期格式及千年虫问题
- DNN中DDR Menu中的输入XML片段
热门文章
- 电子和计算机工程密歇根大学,美国密歇根大学迪尔本校区电子与计算机工程系主任 Yi Lu Murphey教授来我校进行学术交流并作学术报告...
- QFP、LQFP、TQFP、TEQFP、BGA等芯片封装技术
- java手机杀毒_Android项目实战手机安全卫士(01)
- 全球与中国2,5-二甲基-2,5-己二醇市场现状及未来发展趋势
- 做出刷屏文字的6大哲学
- Java 8 String类API 手册 翻译 中英文对照
- 什么叫反光识别读数识别_回老家前 微信这个超实用小技巧一定要学会
- SVG之Animation
- 数学建模之美赛小总结
- php开启页面错误提示,php如何设置关闭网页错误提示