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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 文献引自: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 软件。

-----循序渐进,脚踏实地,不断学习,文章翻译水平有限,请各位老师专家批评指点------
-----版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!-----
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
42 10
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
76 0
|
存储 关系型数据库 MySQL
|
6天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
57 6
|
9天前
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
|
14天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
1天前
|
关系型数据库 MySQL Linux
Linux联网安装MySQL Server
Linux联网安装MySQL Server
5 0
|
6天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例

推荐镜像

更多