MySQL版本调研
1引言
1.1 编写目的
本文的主要目的是通过对当前项目中使用的各种版本的数据库进行比较,分析各自特性和稳定程度,最终推荐合适的版本作为今后的标准数据库。
1.2 背景
当前,部门负责管理维护的现网使用数据库有Oracle、MySQL、PostgreSQL
等;由于使用的数据库大小版本各异,不利于规范管理,需要制定统一的标准。
1.3 参考资料
无
2使用分析
2.1 使用概况
在线版本 |
使用率 |
MySQL5.1 |
较高 |
MySQL5.5 |
较高 |
MySQL5.6 |
较高 |
MySQL5.7 |
较高 |
Oracle/PostgreSQL |
低 |
表1
2.2 常用系统分析
从统计结果看,使用较多是MySQL,标准数据库选型将从MySQL中挑选。MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
3特性分析
3.1 版本概况
MySQL的小版本较多,5.1/5.5有40多个,5.6有24个,5.7有8个;从稳定性来看不推荐最新的版本,5.7暂不考虑,主要分析5.1、5.5、5.6版本。
Release |
最后更新 |
5.1.72 |
2013-9-11 |
5.5.45 |
2015-6-28 |
5.6.26 |
2015-7-15 |
5.7.8 |
2015-7-21 |
表2
3.2 主要特性
OS版本 |
特性 |
5.1 |
表格和索引的分区特性 —— MySQL 5.1支持5种形式的水平数据分区:range、hash、key、list和复合composite分区(子分区)。通过表格和索引数据的分区,可做到仅仅是对需要的相关数据分区进行扫描,而不是扫描整个的表格和索引,因此就获得了更快速的查询响应。而且,有了分区特性,许多存储和其他维护操作变得更加容易和快速。 基于单元(row-based)的复制和混合复制特性 —— 这是MySQL 5.1内提供的两个新的复制选项。“基于单元的复制”是复制主服务器和从服务器之间的数据变化(而不是实际的SQL语句),而“混合复制”采用的或是基于语句复制,或是基于单元的复制,这取决于一个个的SQL操作 —— 对于应用来讲,这就形成并保持了最有效的和最安全的复制机制。 事件调度特性 —— 这是一个新的工具,它可让开发者和经营管理自动调度数据库服务器上要执行的、通用的基于SQL的循环(recurring)任务。这一特性比起Linux或Unix中的CRON,或Microsoft Windows的任务调度程序,可对数据库特定的任务提供更大的支持。 新的MySQL Query Analyzer (查询分析器) —— 享受优惠的MySQL Enterprise订购项目将提供Sun的这一新的MySQL Query Analyzer工具,该工具通过监控查询性能来精确定位和修改有问题的SQL 代码,可以大大改善MySQL数据库应用的速度和正常运行时间。 |
5.5 |
1. 默认存储引擎更改为InnoDB InnoDB的数据恢复时间从过去的一个甚至几个小时,缩短到几分钟。InnoDB Plugin 支持数据压缩存储,节约存储,提高内存命中率,并且支持adaptive flush checkpoint, 可以在某些场合避免数据库出现突发性能瓶颈。Multi Rollback Segments: 原来InnoDB只有一个Segment,同时只支持1023的并发。现已扩充到128个Segments,从而解决了高并发的限制。 2. 多核性能提升 Metadata Locking (MDL) Framework替换LOCK_open mutex (lock),使得MySQL5.1及过去版本在多核心处理器上的性能瓶颈得到解决,官方表示将继续增强对MySQL多处理器支持,直至MySQL性能 “不受处理器数量的限制” 3. 复制功能(Replication)加强 MySQL复制特性是互联网公司应用非常广泛的特性,作为MySQL最实用最简单的扩展方式,过去的异步复制方式已经有些不上形势,对某些用户 来说“异步复制”意味着极端情况下的数据风险,MySQL5.5将首次支持半同步(semi-sync replication)在MySQL的高可用方案中将产生更多更加可靠的方案。另外Slave fsync tunning;Relay log corruption recovery和Replication Heartbeat也将实现 4. 增强表分区功能 5. Insert Buffering 如果在buffer pool中没找到数据,那么直接buffer起来,避免额外的IO;Delete & Purge Buffering 跟插入一样,如果buffer pool中没有命中,先buffer起来,避免额外的IO。 6. Support for Native AIO on Linux 以上的特性在MySQL 5.5的社区版当中都将包括,在MySQL企业版当中,除以上更新之外,Oracle还加强了更多实用的企业级功能,包括: 实现在线物理热备 MySQL Enterprise Monitor 2.2 & Oracle Enterprise Monitor MySQL Workbench 关于未来的重要提醒:Oracle的管理工具,MySQL也将能够使用 |
5.6 |
更好的性能和可扩展性 改进InnoDB存储引擎所带来更好的交易吞吐量 改良的优化所带来更好的查询执行时间和诊断能力 在线DDL /架构操作所带来更好的应用程序可用性 通过Memcached的API以NoSQL访问InnoDB所带来的更好的开发速度 改进复制技术所带来的高性能和能自行修复的集群部署 改进的Performance Schema所带来的更好的侦测和监测能力 改进的安全控制,使您部署应用程序时不需担心 其他重要的增强功能 |
5.7 |
更好的性能:对于多核CPU、固态硬盘、锁有着更好的优化,每秒100W QPS已不再是MySQL的追求,下个版本能否上200W QPS才是吾等用户更关心的; 更好的InnoDB存储引擎:内容太多,就等Inside君的《MySQL技术内幕:InnoDB存储引擎》第3版吧; 更为健壮的复制功能:复制带来了数据完全不丢失的方案,传统金融客户也可以选择使用MySQL数据库。此外,GTID在线平滑升级也变得可能; 更好的优化器:优化器代码重构的意义将在这个版本及以后的版本中带来巨大的改进,Oracle官方正在解决MySQL之前最大的难题; 原生JSON类型的支持:文档数据库们已经哭晕在厕所了吧; 更好的地理信息服务支持:InnoDB原生支持地理位置类型,支持GeoJSON,GeoHash特性; 新增sys库:这是Inside君最爱的功能(虽然5.6也可以支持),但是知道的人好像不怎么多,以后这会是DBA访问最频繁的库。 |
表3
4 小结
4.1 调研结果
- MySQL优点:
支持5000万条记录的数据仓库
适应于所有的平台
是开源软件,版本更新较快
性能很出色。纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM数据库与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。
价格便宜 - 缺点:缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能
4.2 结论
1.挑选原则:
生产系统必须使用稳定版本;业界通常做法是不使用最新版本,优先上一个版本。
综合调研结果来看,MySQL 5.7较新不稳定,无特殊需求不考虑;5.1/5.5/5.6这3个版本从稳定、优化来看,建议使用5.6版本,该版本兼顾稳定性、性能。