请选择 进入手机版 | 继续访问电脑版

Discuz!大师网

搜索
查看: 1554|回复: 0

[补丁] Discuz! X2.5 / X3 InnoDB 补丁测试版 【2013-06-25首发】

[复制链接]
发表于 2013-6-25 00:00:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
MySQL InnoDB 引擎相比我们论坛默认的 MyISAM 引擎在写性能上有很大提升。InnoDB 支持行锁(更准确的说是索引锁)而 MyISAM 只能是表锁。使得 InnoDB 在高并发环境中有更好的表现。

在 Discuz! X2 或者更早的版本,有站长手动把数据库引擎转为 InnoDB , 来避免论坛发帖高峰时期带来的卡顿,
但是 Discuz! X2.5 以及 Discuz! X3版本,由于 post 表使用了联合自增主键,而 InnoDB 不支持这个特性,而无法手动把数据库引擎改为 InnoDB 。

考虑到大型站点站长们的这个需求后,我们发布了在大型论坛测试过的第一个Discuz! X2.5 / X3  InnoDB 补丁测试版。

基本原理:
1,去掉 post 表 position 字段的自增属性。
2,利用内存缓存来记录每个帖子的当前最大楼层数,并在发帖请求过来时依次分发并自增楼层号。
3,由于内存缓存速度极快当多个发帖请求过来后能快速自增并分配楼层号,每条插入语句都能快速领取到唯一楼层号。
4,内建了错误修复机制避免内存失效或者统计错误时自动修复。
5,取消了 count(*) 语句,改为读取模糊值。

适应场景:
发帖比较频繁,适应于会员热衷于交流场景,日发帖一般在数万贴每日的。

服务器要求:
1,独立服务器,或能执行命令行(命令行避免超时)
2,启用了内存缓存(建议为 memcache )
3,post表没有进行分表操作(测试版本暂不支持 post 表已经分表)

操作步骤:
1,关闭论坛,避免有发帖操作。对数据库全库进行备份。
2,下载对应版本包,上传到论坛根目录。其中有一个 source/class/class_core.php 文件,这个是需要覆盖的,如果这文件已经修改过,可以手动把多出代码补全。无 utf8,gbk 版本区分。
3,确认论坛有开启内存缓存的某一个。
4,在命令行下执行论坛根目录下的 innodb_upgrade.php,一般命令如下:
切换到论坛根目录下执行
$php innodb_upgrade.php
耐心等待执行完毕,如果显示其中一些任务失败了,则需要到根目录下找log文件,对转换失败的表手工进行转 innodb 。
5,删除 innodb_grade.php 和 log 文件(如果有的话),去论坛发帖测试无误后,开放论坛。

恢复:
如果测试后不想使用了,可以按照如下两个步骤操作:
1,所有表换回MyISAM,恢复 post 表 position 的自增属性。
2,把 class_core 文件覆盖成之前的备份文件。

问题:
使用后出现任何问题都可以到BUG区发帖反馈http://www.discuz.net/forum-70-1.html
我们建议大家先在测试论坛上使用无误后再部署到正式论坛。
如果有新版或者补丁出现,会持续在本帖更新,建议大家关注此贴。

已知注意事项:
1, MySQL 5.6版本的 index_condition_pushdown 参数请关闭。
2, 因为全表统计 count(*) 改为了读取模糊值,所以有少部分的统计数据最大会有10%左右的偏差。


回复 马甲回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|网站地图|小黑屋|展会网|Discuz站长论坛 |天天打卡

GMT+8, 2024-4-19 09:55 , Processed in 0.025821 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表