[MySQL 5.6] Percona Server 5.6.16的主要改进

Percona刚刚放出了其最新的基于MySQL5.6.16的分支,在该版本中,Percona增加了几个比较有趣的特性,这里只列出我比较关心的,其他的自行参考官方Release Note (例如Percona对tokudb的支持应该是很多人关注的)

首先要提的是新特性   Backup Locks  ,看起来是用来代替备份时臭名昭著的flush table with read lock 。主要增加了三个新的语法:
  • LOCK TABLES FOR BACKUP //使用一种新的MDL锁来阻塞对非事务表的DML以及对所有表的DDL,但不阻塞SELECT查询
  • LOCK BINLOG FOR BACKUP //阻止对binlog位点的更新,也就是说对于DML/DDL操作会一直进行直到需要写入binlog的阶段被阻塞
  • UNLOCK BINLOG  // 解除LOCK BINLOG FOR BACKUP
Percona的博客上专门 写了篇博客来介绍关于备份加锁的历史发展以及对该特性的介绍,有兴趣的可以看看,另外也提到了 Mariadb对备份的改进(将被include到下一个版本的Percona Server中)
另外Facebook很早就写了个补丁来绕过ftwrl,具体做法就是增加了新的语法,能够开启一个read view的同时返回当前与read view一致的binlog位点,但只适用于所有的表都是Innodb引擎;
具体的更改可以参考 文档 及 代码
使用新的独立后台线程来刷buffer pool的LRU链表,将这部分工作负担从page cleaner线程剥离。实际上就是直接转移刷LRU的代码到独立线程了,
实际从之前Percona的版本来看,都是在不断的强化后台线程,让用户线程少参与到刷脏/checkpoint这类耗时操作中
具体阅读 Percona blueprint 及 代码
page cleaner线程对server acitve的判断
bug#71988中,描述了一种场景,即使每秒有activity,也会去做furous flush;
Percona做的修改是, 只有1秒钟内innodb没有任何active,才认为实例处于inactive状态,会去做100% IO Capacticy的刷脏操作(furious flush)
题外话:当前官方版本的Innodb,定义实例是否avtive的逻辑非常简单,做一个简单的DML,都会认为实例处于活跃状态,曾经观察到负载停止,而innodb 刷脏页的数据流量呈现出非常巨大的波动状态,结果发现是监控程序每秒做一次DML导致的(具体可以看我之前report的 bug#69174
修复5.6.16的一个性能退化bug
这个bug也是我在测试过程中遇到过的,Oralce MySQL为了解决 bug#70768 对每个innodb表的内存结构体对象的states_latch做了修改,之前是从一个rwlock数组中分配,改成了每个表对象独立分配rw lock;
当开启change buffer时,Innodb会频繁的创建dummy table(一种用于线程私有的简单的索引结构),这种dummy index事实上无需使用states_latch,因为他是线程私有的;但oralce mysql没有做区分,而在创建rw lock时,会加全局锁rw_lock_list_mutex来维护全局读写锁链表rw_lock_list,这在CPU bound场景下,观察到如下的stall:
ut_delay(ut0ut.cc:408),mutex_spin_wait(sync0sync.cc:505),pfs_mutex_enter_func(sync0sync.ic:251),
rw_lock_free_func(sync0sync.ic:251),pfs_rw_lock_free_func(sync0rw.ic:650),
dict_mem_table_free(sync0rw.ic:650),ibuf_get_volume_buffered_count_func(ibuf0ibuf.cc:3065)
ut_delay(libc.so.6),mutex_spin_wait(sync0sync.cc:505),pfs_mutex_enter_func(sync0sync.ic:251),
rw_lock_create_func(sync0sync.ic:251),pfs_rw_lock_create_func(sync0rw.ic:561),
dict_mem_table_create(sync0rw.ic:561),ibuf_dummy_index_create(ibuf0ibuf.cc:1534)
Percona的fix就是忽略对dummy table创建stats_latch和autoinc_mutex,详细见bug#71708及 patch

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值