[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

 

原创文章,转载请注明: 转载自Simple Life

本文链接地址: [MySQL 5.6] Percona Server 5.6.16的主要改进

Post Footer automatically generated by wp-posturl plugin for wordpress.


Comments

Leave a Reply

Your email address will not be published. Name and email are required


Current month ye@r day *