MySQL优化 之 Discuz论坛优化 -- 续

很早以前写过一个文章,是关于discuz论坛的优化:MySQL优化 之 Discuz论坛优化。写的时候是2006年,没想到过了这么久,discuz论坛的问题还是困扰着很多网友,其实从各论坛里看到的问题总结出来,很关键的一点都是因为没有将数据表引擎转成InnoDB导致的,discuz在并发稍微高一点的环境下就表现的非常糟糕,产生大量的锁等待,这时候如果把数据表引擎改成InnoDB的话,我相信会好很多。这次就写个扫盲贴吧。

1. 启用innodb引擎,并配置相关参数

#skip-innodb
innodb_additional_mem_pool_size = 16M #一般16M也够了,可以适当调整下
innodb_buffer_pool_size = 6G #如果是专用db的话,一般是内存总量的80%
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 20
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 50
innodb_lock_wait_timeout = 120
innodb_file_per_table

2. 修改表引擎为innodb

mysql> alter table cdb_access engine = innodb;

其他表类似上面,把表名换一下即可...
将表存储引擎改成innodb后,不仅可以避免大量的锁等待,还可以提升查询的效率,因为innodb会把data和index都放在buffer pool中,效率更高。

更新(2013-02-25):discuz x2.5版本中,抢楼功能集成到post表中,因此无法将该表转换成InnoDB引擎。当然了,非要转换也可以,不过需要使用触发器来解决,具体方案等测试通过后发布。

技术相关: 

评论

不敢苟同你的观点,按照我自己的实践,修改为innodb以后,数据库的整体查询速度慢了很多,虽然不锁表了。用myisam格式的,只要优化好就不会出现大量锁表的现象。

LS没有认真了解innodb特性,myisam仅适用于轻量级快速查询,在大并发下是力不从心的,你的实践是什么?难道仅仅是顺序select、insert若干数据得来的?

我碰到一个朋友的论坛,日pv应该有200w左右。
目前采用myIsam,性能尚且不错。前几日遇到表太大造成的性能问题也由分区功能优化了。

Myisam存储引擎对论坛这种主要以读为主的应用来说已经绰绰有余,别忘记了dicuz在设计之初也是推荐采用MyISAM的。

速度方面来说感觉还是mysiadm的快些的吧,innobd主要的一个功能好像是用来处理事务类型的,至于速度方面。。。

同意部分表,采用innodb .
但一个库全部是innodb,或者全部是myisam,我认为是更好看更好维护的.
所以还是不转了.调优吧.

能否写下phpwind.
我计划有空研究下Phpwind.

phpwind我不是太了解,希望你研究完后能分享给大家,谢谢