MySQL数据库学习研究(细究Percona Server 5.6)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 文献引自:https://www.percona.com/blog/2013/10/08/a-closer-look-at-percona-server-5-6/ Vadim Tkachenk 发表        2013年10月7日,Percona Server 5.6版本发行,是对MySQL官方版本的增强改进。
文献引自: https://www.percona.com/blog/2013/10/08/a-closer-look-at-percona-server-5-6/

常规性能的提升 通过 TABLE/INDEX/USER STATISTIC  和 slow query log 等提供更广泛的诊断 进程池的插件 插拔式的身份验证模块插件
集成Percona XtraBackup:”真正“增量备份和归档日志备份
语句超时功能
  • 完全兼容MySQL

常规性能的提升

     MySQL 5.6 自身已经做了许多性能方面的修订,然而我们发现他们专注的方面是小数据集问题。换言之,
大多都是CPU 密集型工作负载(CPU-bound workloads)。
     在我们研究中发现,IO密集型的方面(IO-bound cases),也有我们可以提升的空间。
  • 从Percona Server 5.5 版本中分离出当年不错的缓存互斥对象(buffer mutex)到Percona Server 5.6 版本中。这个将会减少未来对缓存池(buffer pool) 的争用。
  • 完成优先级互斥对象("priority" mutexes)和InnoDB中的读写锁(rw-locks),查看https://blueprints.launchpad.net/percona-server/+spec/xtradb-priority-mutex。空闲列表的优先级会再次被获取mutexes的优先级填满。
  • 完成进程计划("Thread scheduling").目前最大的可能是,改变InnoDB Cleaner thread的优先级(change priority for InnoDB Cleaner thread)。这个可以帮助稳固性能,因此我们可以发现高IO负载的时候,the Cleaner thread 是"饥饿"状态且没有获取足够的CPU时间去工作。
  • 完成新的等待算法(waiting algorithms with exponential wait)用于访问共享资源
  • 对于 页清洗进程(Page Cleaner thread)做额外的优化

   更多的性能提升和测试,我想Percona的工程师Laurynas Biveinis 和 Alexey Stroganov会给与我们满意答复,敬请期待。

通过TABLE/INDEX/USER STATISTIC 和slow query log进行诊断

尽管MySQL 5.6有功能丰富的PERFORMANCE_SCHEMA信息表提供,但我们决定保存我们自己的诊断功能,为什么?因为 他们使用简单,查看 Domas’ post  文章。

集成Percona XtraBackup:”真正“增量备份和归档日志备份
      
Percona Server带来了如下的备份功能:
  • 跟踪数据页的变化做到增量备份(Changed page tracking AKA “Real” incremental backups).使用这一功能可以避免全表扫描,并且修改数据页的信息被有效保存在bitmap文件中。
  • 归档日志(Archive Logs).另外一种执行增量备份的方法,是通过复制InnoDB事务日志并应用他们实行备份。

这些功能在Percona Server中是独一无二的,通过结合Percona XtraBackup,他们允许用户获得在备份架构中更具便利性。

语句超时功能
  
这个功能移植于Twitter的MySQL分支,用来允许用户控制语句的执行时间

我们如何对Percona Server做QA操作

对于QA测试,我交予 Roel Van De Paar和他的随机查询生成器(Random Query Generator).对Percona特定的功能进行测试,通过使用RQG加一些组合数学的参数的方法,完成测试。我们对Percona Server是有信心的,同样我们有发现,报告,修复的bug平台:quite a large number of bugs for upstream MySQL.

性能结果

当然我会分享基准测试结果,哪一类的性能指标获取可以达到我们预期的性能效果且能满足我上面表述的性能提升的部分呢?

测试,我使用sysbench OLTP 读写负载,并通过帕累托分布图来表示(pareto distribution)。数据集是32张数据表,每张表 有1000万行的数据,总共是77GB的数据。我们的兴趣是集中测试IO密集型负载能力。所以设置 buffer_pool size是25GB并且同时运行250个用户进程。

对于硬件的选择,我使用Cisco UCS 250 服务器。有两个ntel(R) Xeon(R) CPU X5670 内核,Ubuntu 12.04.3 LTS 做为操作系统,
并且使用高端的PCIe SSD 存储设备(有100000 IOPS能力和随机 16KB 写能力)。

让我们来比较Percona Server 5.6 和MySQL 5.6的负载能力,图标显示的是30分钟,以一秒做度量单位的效果图

吞吐量(越多越好)


95%响应时间(越小越好)



我们发现percona server 5.6版本提供了两倍于MySQL-5.6.14版本的性能(在吞吐量和响应时间方面)。

这个提升的可能在于减少InnoDB内部资源的争用,和对page cleaner thread优先排序以及空闲队列再填充。

现在来分享运行时配置的文件的情况如下:
[ mysqld ]
innodb_data_file_path = ibdata1 : 10M : autoextend
innodb_log_files_in_group = 2
innodb_log_file_size = 2G
innodb_buffer_pool_size = 25GB
innodb_lru_scan_depth = 4000
innodb_flush_neighbors = 0
innodb_log_buffer_size = 256M
innodb_io_capacity = 25000
innodb_io_capacity_max = 50000
innodb_flush_log_at_trx_commit = 1
innodb_buffer_pool_instances = 15
innodb_file_format = Barracuda
innodb_checksum_algorithm = crc32
innodb_file_per_table = true
innodb_doublewrite = 1
innodb_flush_method = O_DIRECT_NO_FSYNC
innodb_purge_threads = 4
table_open_cache = 15000
open_files_limit = 15000
max_connections = 15000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_change_buffering = all
loose - innodb_sync_array_size = 16
sync_binlog = 0
query_cache_type = OFF
thread_cache_size = 1000
back_log = 2000
connect_timeout = 15
loose - metadata_locks_hash_instances = 256
max_prepared_stmt_count = 1048560
loose - performance_schema = 0
# --- below is Percona Server Specific ---
innodb_sched_priority_cleaner = 39   
innodb_log_block_size = 4096
innodb_adaptive_hash_index_partitions = 65

对一些参数做一下注解:

1.请注意,我们使用的是全面持久化的设置,如下:
innodb_flush_log_at_trx_commit = 1
innodb_doublewrite=1
innodb_checksum_algorithm = crc32

这是为什么不同于MySQL提供的结果,这里,他们为了获取好的性能数字,关闭了数据保护。

2.  innodb_checksum_algorithm = crc32.新的硬件crc32校验编码实际上会提供更好地性能。我们推荐使用它

3.Percona Server 专享的指定参数:

innodb_sched_priority_cleaner=39 – to give highest priority to page cleaner thread(给予page cleaner thread 高优先级设置)
innodb_log_block_size=4096 – to use 4096 block size for InnoDB logs(对于InnoDB 日志使用4096 块设置)

innodb_adaptive_hash_index_partitions=65 – to enable partitioning of adaptive hash index, otherwise quite often this is a contention point.(开启自适应哈希索引分区设置,否则这里会是一个争论点)


一些Percona Server使用的默认变量.


innodb_foreground_preflush=exponential_backoff
innodb_empty_free_list_algorithm=backoff
innodb_cleaner_lsn_age_factor=high_checkpoint


做一个免责申明,我认为Percona Server 5.6和MySQL5.6性能区别,在大数据集,和大内存以及快速存储方面距离会越拉越大。


对于小数据集,在低端服务器产品上使用,Percona Server 5.6性能和MySQL 5.6性能是一致的。MySQL在优化InnoDB对于小数据集上做了卓越的贡献。


对于Percona Server 5.6来说,这点特性非常重要,它可以让你通过提高硬件的CPU速度,内存或者升级你的存储设备,来提升你的性能。

欢迎使用Percona 5.6,并期待你的回馈!


未来是?

我们绝不会止步于此,我们期待更好的改进和功能提升。
  • 更多的InnoDB性能提升,我们所做的只是冰山一角,未来还有更广阔的大门为我们敞开。
  • 支持TokuDB引擎
  • Per query variables. We will add a new scope (in additional to global and session) for MySQL variables: per query. You will be able to change some variable only for one specific query
  • Percona XtraDB Cluster 5.6,将会在几个月之后,基于Percona Server 5.6这个版本退出

你需要任何关于Percona Server 5.6 升级或者迁移的帮助吗?我们这里可以提供帮助,Perconat有经验丰富的技术支持和咨询顾问。 我们随时等待你的电话, Contact us today .

Vadim Tkachenko 简介

Vadim 领导Percona 开发团队,管理Percona Server产品,和Percona Server for MongoDB产品,Percona XtraDB CLuster产品 和Percona XtraBackup.他是一个固态存储方面的专家,帮助许多硬件和软件供应商在MySQL市场取得成功。

标签:
MySQL替代物,MySQL 5.6社区版本,MySQL基准测试, Vadim Tkachenko

类别:
基准测试,MySQL,Percona Server,Percona 软件。

-----循序渐进,脚踏实地,不断学习,文章翻译水平有限,请各位老师专家批评指点------
-----版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!-----
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
50 3
|
1月前
|
SQL NoSQL 关系型数据库
数据库学习
【10月更文挑战第8天】
23 1
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
68 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
98 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
29 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
1月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
20 0
|
1月前
|
存储 NoSQL Java
使用 Java 了解和学习 NoSQL 数据库:三个主要优势
使用 Java 了解和学习 NoSQL 数据库:三个主要优势
16 0
|
1月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
200 0
|
2月前
|
SQL 安全 Java
探索研究Servlet 数据库访问
【9月更文挑战第28天】
30 0
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
下一篇
无影云桌面