生MySQL飞起来的补丁

    从2013年6月份开始研读MySQL源代码,边读边开始写优化的补丁,想让MySQL达到和Oracle一样的性能,最后居然让我做成了。在我的补丁中主要对以下几个方面做了改进:

  • 一种新的线程调度算法,效果和官方的Thread Pool一样。
  • 内存优化,InnoDB层减少动态内存分配的请求。
  • 死锁检测优化。对每个事务要获得的第一个锁不做检锁检测。
  • 静态编译了Google的内存分配(TCMalloc)优化包。
  • 对简单查询、复杂查询、自动事务和人工事务分别进行限流,减少相互干扰。
  • 在MySQL 5.5/5.6上实现了只读事务,减少了内部锁争用。
  • 设计专门的写日志进程,象Oracle的LGWR,将innodb_flush_log_at_trx_commit设为3生效。
  • 准实时刷出Binlog,完美改进MySQL的数据保护问题,基本不影响性能.

    可以到我的云盘下载对应版本的编译好的mysqld文件,然后用这个mysqld启动数据库,就可以透明地将性能提升一倍,并且不用再怕大量的并发请求过来。需要将参数文件里有关Performance Schema和Query Cache的参数去掉,因为没有编译这两个组件。

    用主键查找的SQL进行压测,在MySQL 5.5上可以压到35万QPS,MySQL 5.6上可以达到38万QPS,高的QPS意味着更短的响应时间,它可以为你节约很多数据库的机器资源,及应用服务器的机器资源,为你节约很多的成本.

    目前已经有一些网站,及部份起步阶段的互联网企业开始在用这个版本了,收到了很好的反响,有很多的知名互联网企业开始内部进行测试。如果遇到问题,我可以提供部份技术支持!

MySQL中文(全文)搜索插件

    对于小数据量的全中文搜索,直接使用MySQL的全文搜索功能可能是最简单省事的方案,只要有一个好用的中文分词插件就可以了,这段时间里我写了几个,每个采用不同的分词算法,可以到我的云盘去下载,文件名里有"*parser*"字样的就是直接可以使用的MySQL中文搜索插件了。

    Friso是一个基于MMSeg算法的中文分词软件包,使用C语句开发,最新的版本支持GBK和UTF8两种字符集,也就是说表的字符集可以是GBK和UTF8,都能支持全文搜索。下载解压到MySQL安装目录后,到MySQL命令行里执行"INSTALL PLUGIN friso_parser SONAME 'ft_friso'"进行插件安装。

    LibMMSeg是一个基于MMSeg算法的中文分词软件包,使用C语句开发,只支持UTF8字符集,表的字符集必须为UTF8才行。 下载解压到MySQL安装目录后,到MySQL命令行里执行"INSTALL PLUGIN mmseg_parser SONAME 'ft_mmseg'"进行插件安装。

    wcws是一个基于词典的中文分词算法,使用C语言开发,支持GBK和UTF8两种字符集,也就是说表的字符集可以是GBK和UTF8,都能支持全文搜索。下载解压到MySQL安装目录后,到MySQL命令行里执行"INSTALL PLUGIN scsw_parser SONAME 'ft_scsw'"进行插件安装。

    对于每个插件,必须设置一个MySQL系统变量(变量名:"<插件名>_config_path"),来设置配置文件和字典文件的目录位置,否则不能正常工作,插件的名字前面安装命令里有,不要写错了!然后在创建全文索引时显式指定不同的中文分词插件名字。

  • CREATE FULLTEXT INDEX 索引名 ON 表名 (索引列) WITH PARSER 中文分词插件名;

    对于UTF8或GBK字符集,如果你用的是Frisowcws这两个插件,会自动处理字符集,你不需要关心,下载的包里都包含了GBK和UTF8的支持。

让MySQL飞起来的超级补丁,及中文全文搜索插件支持
标签: