MySQL 性能比较测试:MySQL 5.6 GA -vs- MySQL 5.5

时间:2013年11月07日 ⁄ 分类: 数据库技术文档 ⁄   我要吐槽发评论

MySQL 5.6 GA 发布了,毫无疑问,这是 MySQL 最棒的一个版本。

如果你还不清楚 MySQL 5.6 版本一长串的新特性和改进内容,可以从这里获得了解。

而我这篇文章的主要目的则是性能的测试。

我使用 Sysbench workloads (Read-Only/Read-Write) 来测试。下面是我的测试环境:

硬件配置:

  • 服务器 : 32核 bi-thread (HT) Intel 2300Mhz, 128GB RAM
  • 操作系统 : Oracle Linux 6.2
  • 文件系统 : XFS mounted with "noatime,nodiratime,nobarrier,logbufs=8"
  • MySQL : 5.6-GA, latest 5.5

MySQL 配置:

#--------------------------------------------------
 max_connections = 4000

 key_buffer_size = 200M
 low_priority_updates = 1
 sort_buffer_size = 2097152
 back_log = 1500
 query_cache_type = 0

# files
 innodb_file_per_table
 innodb_log_file_size = 1024M
 innodb_log_files_in_group = 3
 innodb_open_files = 4000
 table_open_cache = 8000
 table_open_cache_instances = 16

# buffers
 innodb_buffer_pool_size = 32000M
 innodb_buffer_pool_instances = 32
 innodb_log_buffer_size = 64M
 join_buffer_size = 32K
 sort_buffer_size = 32K

# tune
 innodb_checksums = 0
 innodb_doublewrite = 0
 innodb_support_xa = 0
 innodb_thread_concurrency = 0
 innodb_flush_log_at_trx_commit = 2
 innodb_flush_method = O_DIRECT
 innodb_max_dirty_pages_pct = 50
 innodb_use_native_aio =1
 innodb_stats_persistent = 1
 innodb_spin_wait_delay = 6 / 96

# perf special
 innodb_adaptive_flushing = 1
 innodb_flush_neighbors = 0
 innodb_read_io_threads = 16
 innodb_write_io_threads = 4
 innodb_io_capacity = 2000
 innodb_purge_threads =1
 innodb_adaptive_hash_index =  1 / 0

# Monitoring
 innodb_monitor_enable = ‘%‘
 performance_schema = ON
 performance_schema_instrument = ‘%=on‘
#--------------------------------------------------

MySQL 调整:

  • 配置最主要的不同是 AHI (innodb_adaptive_hash_index) 和 Spin Delay (innodb_spin_wait_delay) -- 而其他的部分在这个测试过程中基本上已经足够好了。
  • 关于 AHI 的影响我之前已经写了很多文章。AHI 主要的困境在于“用还是不用”,在很多情况下它可以帮助因为锁导致的堵塞并加快索引的访问,但在高并发的情况下可能会因为其 btr_search_latch 导致 rw锁争用导致的瓶颈
  • 在 MySQL 5.6 中的 Spin Delay 设置需要特别的注意,因为它在管理内部互斥量和 rw 锁争用时扮演非常重要的角色,利用它可能会让你轻松的将性能提升一倍。(你可以通过这里来了解详情,但你应该知道,没有银弹,也没有什么固定的最优值是适合各种不同的环境,这个完全依赖于你的系统负载。因此其默认值跟 MySQL 5.5 一样都是 6)。
  • 因此,在我的测试中,我非常好奇想了解在不同的负载情况下最佳的 AHI 和 Spin Delay 设置的配置对。
  • 接下来要记住 MySQL 5.5 和 5.6 在可伸缩性方面的限制。我在 8、16、32 和 64 核的情况下重新进行测试(64核相当于开启和超线程的32核机器,其他的都没有开启超线程)

首先向你展示第一个有趣的比较,为了跟我以前的测试保持“兼容性”,我首先测试了 TPS (事务/秒),然后再是 QPS (查询/秒) ,我更喜欢这种方式。

首个测试是经典的 Sysbench OLTP_RO (只读):

Sysbench OLTP_RO
 
接下来是同一个 OLTP_RO 测试,但在事务中不进行表的打开和关闭操作 (完整的解释请看 这里 )

Sysbench OLTP_RO-trx : 

接下来是 "point-selects" ,这是一种读数据的方式,在以前的 MySQL 5.5 版本表现良好,但在 5.6 仍有一些不同。

Sysbench OLTP_RO Point-Selects : 
 
这是最痛苦的测试,Simple-Ranges (你可以阅读 此文 了解为什么痛苦和令人沮丧)

Sysbench OLTP_RO Simple-Ranges : 

下面是读写测试,这还不是负载最重的读写,但仍可说明问题:

Sysbench OLTP_RW : 
 
TPS 从 256 个并发用户时就开始下降,期待这个有更高的水平。但仍然比 5.5 版本要高出 2 倍,相信我,下一个版本的 MySQL 表现会更好。这个阶段可通过调整 innodb 线程并发设置来得到更稳定和更高性能。

我很高兴的看到 MySQL 5.6 GA 发布,因为:

  • 这是 MySQL 史上最棒的版本
  • 在高负载下比 MySQL 5.5 快很多
  • 更好的设计
  • 更具可调节性
  • 性能分析更透明
  • 更好的仪表化
  • 这些方式比你以往看到的都要好
  • 包含很多新特性

因此,我唯一的问题是:你什么时候开始测试 MySQL 5.6 并制定数据库移植计划?

MySQL 性能比较测试:MySQL 5.6 GA -vs- MySQL 5.5,布布扣,bubuko.com

时间: 2024-12-23 08:59:49

MySQL 性能比较测试:MySQL 5.6 GA -vs- MySQL 5.5的相关文章

【转】【备忘录】MySQL性能优化的21个最佳实践 和 mysql使用索引

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被

【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类型的例,并将其索引 6. 千万不要 ORDER BY RAND() 7. 避免 SELECT * 8. 永远为每张表设置一个ID 9. 使用 ENUM 而不是 VARCHAR 10. 从 PROCEDURE ANALYSE() 取得建议 11. 尽可能的使用 NOT NULL 12. Prepare

MySQL性能优化的21个最佳实践 和 mysql使用索引【转载】

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被

MySQL性能优化的21个最佳实践 和 mysql使用索引

1. 为查询缓存优化查询 当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 2. EXPLAIN   SELECT 查询 使用 EXPLAIN 关键字可以知道MySQL是如何处理SQL语句的.这可以查询语句或是表结构的性能瓶颈. EXPLAIN 的查询结果还会索引主键被如何利用的,数据表是如何被搜索和排序的……等等 3. 当只要一行数据时使用 LIMIT 1 当查询表的有些时候,已经知道结果只会有一条结果,但因为可能需

mysql性能优化教程(转)

Mysql 性能优化教程 目录 目录 背景及目标 Mysql 执行优化 认识数据索引 为什么使用数据索引能提高效率 如何理解数据索引的结构 如何理解影响结果集 理解执行状态 常见分析手段 分析流程 总结 Mysql 运维优化 存储引擎类型 内存使用考量 性能与安全性考量 存储压力优化 运维监控体系 Mysql 架构优化 架构优化目标 防止单点隐患 方便系统扩容 安全可控,成本可控 分布式方案 分库&拆表方案 主从架构 故障转移处理 缓存方案 缓存结合数据库的读取 缓存结合数据库的写入      

ySQL性能优化的21个最佳实践 和 mysql使用索引

MySQL性能优化的21个最佳实践 和 mysql使用索引 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服

19个MySQL性能优化要点解析

19个MySQL性能优化要点解析 以下就是跟大家分享的19个MySQL性能优化主要要点,一起学习学习. 1.为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的.因为,我们某些查询语句会让MySQL不使用缓存.请看下面的示例: //

mysql 性能优化方案

这是一篇关于mysql 性能优化的文章.网上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用status信息对mysql进行具体的优化. mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:mysql> sho

Mysql性能优化(二)--MySQL监控

1.检查监控服务是否正常提供: 命令: mysqladmin -uroot -p密码 -h服务器主机地址 ping 正常应该显示:mysqld is alive 2.获取mysql当前的状态值 mysqladmin -uroot -p密码 -h服务器主机地址 status uptime:服务器启动后的运行时间 Questions: SQL查询数 Threads: 当前连接数 Slow queries:慢查询数 Opens:已经打开的表的数量 Open_table 表示打开过的表数量 Querie