前言
PS1: 写在前面:最近比较忙,这篇参会总结一直拖到现在才完成,主要大概把感兴趣的slide按照不同的公司做了个分门别类,方便自己有空再深入的学习阅读。
PS2: 有极个别PPT的链接挂了,过一段时间再刷刷看
===============================
一年一度的Percona Live会议如期在美国Santa Clara会展中心举行,这里聚集了最全面的MySQL社区最前沿的Topic,大量MySQL社区的大神参与该会议。与往年不同,本年度的Percona Live会议全名为“Percona Live Data Performance Conference”,不仅仅包含MySQL主题,还包含了NOSQL, 云计算,大数据等方面的主题。
先说说第一点印象,很多人都在讨论Facebook的MyRock和RockDB,会议期间有多个相关的主题以及一个专门的keynote。Facebook在推广MyRock持有非常开放的态度,所有的源码开发都是在外部的github上进行的,社区的大量使用可以带来软件的进一步成熟,进而反哺其本身的业务。同时Facebook作为本次会议的赞助商之一,设置了自己的展台,全员开发组出动,向其他从业者介绍MyRock及RockDB。
Oracle 有多个主要开发人员参加了这次会议,主要分享集中在宣传MySQL5.7的新特性。有一个meetup讨论了下一个版本的需求,据称下一个版本直接就叫MySQL8.0了...
Percona作为东道主,贡献了最多的技术分享,主要还是集中在性能调优,优化建议方案,另外Percona的CEO也有几场干货满满的演讲,例如InnoDB的内部架构以及关于数据压缩的一些分享。
其他也有大量的互联网公司,技术服务及大数据公司参与了此次会议,分享的内容五花八门。
以下是我列出的本次会议个人觉得有点意思的一些topic,并没有列出全部,感兴趣的自行到官网查阅下载
Oracle MySQL开发组
MySQL开发组成员分享MySQL的复制架构,5.7新版本的主要优化等内容:
运维
- 在线启停GTID
- 在线配置Replication Filter,无需重启
- Change Master到另外一个主库无需停止apply线程
- Change Master修改一些日志apply属性(例如master_delay)无需停止IO线程
- 增加大量Performance Schema表用于监控复制
新特性
- Loss-less Semi-sync Replication: 允许在事务提交前等待备库ACK
- Semisync允许配置成主库等待N个ACK才继续提交,增加可用性
- 存储GTID信息到系统表中,这样备库如果无级联的话,就可以直接关闭备库的binlog
- Multi-source Replication:允许从多个主库复制数据到一台备库上
- Group Replication Plugin,多主结构的集群管理插件
性能
- 更好的复制性能(logical_clock):在主库上能够并发的事务,通过利用Group Commit在日志中被标记为能在备库并发执行。从而获得更好的并发apply效率
- Binlog Dump线程不受Lock_log锁影响,预分配并重用用于读取log event的内存
- 独立的ACK线程,用于处理semisync打开场景下备库返还的ack,保证在等待网络时不阻塞binlog dump线程,提升了整体并发度。
Download Slides
介绍了MySQL5.7在GA之后释放的一个新特效: Document Store。其定义了一套新的接口,实现了X PLUGIN及对应的通信协议。通过Document Store,用户可以像MongoDB那样来操作MySQL。你也可以阅读我的另外一篇博文来了解相关知识。
Download Slides
介绍MySQL的优化器如何工作,优化器架构,如何基于开销进行查询优化,和查询计划选择。
对优化器感兴趣的同学强烈建议阅读,干货非常足!
Download Slides
Sunny Brain介绍了MySQL5.7在InnoDB层做的一些性能优化和新的特性
性能优化:
- 事务:事务对象池;优化读写事务链表扫描为Memcpy; 移除只读事务链表;Cache Read view; 隐式锁转换优化以减少大锁持有时间; 事务优先级;
- 临时表:独立临时表表空间;独立undo;不记录redo; 不做fsync; 使用innoDB临时表作为优化器的中间结果表
- Buffer Pool: 多个page cleaner线程;更高效的flush策略;
- Redo Log: 通过padding修复read-on-write的问题;默认CRC32 checksum; 增加日志格式的版本信息;
- Memcached: 修复一系列的性能瓶颈
- 索引锁,增加SX锁类型,允许索引分裂时的读负载;
- TRUNCATE操作通过文件日志保证原子性
- Index Rename及修改varchar长度可以立刻完成
- 自底向上的索引创建,效率更高
- AHI分区
新特性:
- 分区表: 下推到引擎层,可以减少内存分配,并为未来的并发查询、外键和全文索引支持打下基础; 支持IMPORT/EXPORT
- General tablespace: 支持多个表存储到一个Ibd文件中
- Buffer pool: 可以在线resize
- Undo: 在打开独立undo表空间时,支持undo文件的truncate操作
- 更大的page size,开始支持32k及64k的page
- Spatial Index/GIS:支持更完整的GIS特性;InnoDB R-TREE实现
- Virtual Column: 支持虚拟列及在虚拟列上创建索引
- 数据文件加密
- 全文索引: 对中文更友好的分词插件
- 其他: transparent page compression; Sandisk/FusionIO Atomic Writes; 允许更大的index prefix
- Performance schema: 监控内存分配;监控DDL执行过程;
Download Slides
介绍MySQL5.7 Performance Schema,以及基于Performance Schema及Information_Schema构建的视图集合sys schema。个人非常喜欢这套视图,非常便于发现系统问题及性能瓶颈。
Download Slides
Sys Schema的深入介绍
Download Slides
MySQL Group Replication,是MySQL官方出品的一组插件,用于管理多点写入的集群,可多点写入,自动冲突检测,集群自动同步和恢复等等。不过还没GA,感兴趣的可以自己玩一下
Download Slides
官方出品HA及负载均衡方案,可和另外一个工具Fabric结合使用
Download Slides
MySQL性能测试
Download Slides
概览了5.7的一些新特性(不全面),以及booking部署MySQL5.7的一些经验
Download Slides
MySQL5.7的优化器
Download Slides
介绍MySQL最新出的document store,提供了X PLUGIN及新的协议,允许用户像使用mongodb那样使用mysql
Download Slides
Mysql性能测试,分析及调优
Download Slides
Percona
Percona CEO主讲,介绍了InnoDB的主要架构,关键配置,物理文件存储,内存结构, 锁系统,MVCC等等方方面面的内容,对InnoDB感兴趣的同学推荐一读。
还顺带介绍了Percona及MariaDB所做的一些改进。
Download Slides
演讲者为Percona的CTO Vadim,主要介绍了Tokudb的Fratal Tree的实现。由于现在Percona已经收购了Tokudb,你可以从发布的Percona Server上直接使用Tokudb存储引擎。
Slides由介绍b-tree的优缺点引出fractal tree,介绍了其内部的数据组织结构,tokudb的一些参数建议,以及PerconaFT相关的一些内核实现。
Download Slides
关于Schema Design之类,适合DBA同学阅读
Download Slides
介绍了Ceph的架构,以及基于其上调优MySQL
Download Slides
另外几个和Ceph相关的slide:
Download Slides
Download Slides
Download Slides
Trouble Shoutting最佳实践
Download Slides
常见的产生宕机时间的场景,以及解决方案;性能问题排查
Download Slides
介绍开源数据库的各种压缩方案。
Download Slides
介绍了MySQL5.7的GIS及MongoDB的GIS, 一些示例。
Download Slides
基于例子给出一些性能优化建议,随便看看
Download Slides
Percona XtraDB Cluster,不知道有没人用,反正我没玩过...这篇slide介绍了如何设置cluster,并介绍了一些内部实现,例如异步slave,proxy,负载均衡,备份及监控
Download Slides
介绍如何使用Apache Spark集合MySQL来做数据分析
Download Slides
使用Performance Schema来排查问题
Download Slides
讨论了从硬件选择,配置,索引到表设计及架构,各个方面的优化点
Download Slides
Percona的CTO Vadim介绍了关于底层存储的一些分享
- Flash设备的架构
- AHCI vs NVMe
- 不同的存储硬件产品
对硬件不太懂,有空再看看
Download Slides
介绍Galera的复制原理的,没了解过
Download Slides
To shard or not to shard, that's a question...来自Percona CEO的又一分享。
Download Slides
- Aurora的架构设计介绍: Aurora是AWS基于InnoDB之上的深度定制。存储和数据分离;在存储上独立使用日志进行异步apply,因此计算节点无需写数据文件,只需要传递redo日志;可自由扩展读节点。类似Oracle RAC的实现
- Redo log: 1. replica节点使用redo更新内存内的page;2. 失效Query Cache; 3.目标存储上异步的进行日志apply.
- 其他:thread pool; buffer pool warmup; 快速崩溃恢复; Fast ordered insert
- 缺点: 不支持change buffer; 写入性能受网络影响(需要传递redo消息);
- 性能测试
Download Slides
多源复制,包括Mariadb及MySQL各自的使用介绍
Download Slides
Percona对MySQL5.7 InnoDB的性能优化,例如multi lru flush, split double write buffer
5.7多源复制
Amazon
AWS的VP介绍Aurora,测试数据,及一些比较上层的实现架构。
Download Slides
Facebook
- 介绍了异步/同步/半同步复制
- Fb-mysql让mysqlbinlog支持semisync,如何做高可用,如何恢复老主库
Download Slides
Mark Callaghan的keynote演讲。介绍rockdb,及其衍生组件myrocks及mongorocks的优势和特点
Download Slides
实际上这是Memsql的工程师的分享,但因为MyRock是Facebook开发的,所以放在这一栏。大概介绍了些概念性的内容。
Download Slides
Rockdb及MyRock的深度介绍,想了解其底层实现,这篇slide是必读的,干货满满
Download Slides
介绍Rockdb的设计和架构,同样是满满干货, 后面有时间再慢慢研究
Download Slides
Mariadb
MariaDB 10.1特性介绍
Download Slides
MariaDB的window function实现,MariaDB在server层一如既往的走在前面
Download Slides
谷歌
Youtube的分布式中间件Vitess介绍
Download Slides
暂无PPT,主要是Google云在底层文件存储层的一些特性。
Twitter
介绍Twitter的底层存储解决方案(MHBtree),基于其业务特点定制,MySQL实际上被当成了kv引擎,使用特定的协议,通过一个插件直接访问Handler。这个架构还蛮有意思的,例如
- 做了基于时间戳的行级别冲突检测
- 热点key更新: 发现到热点Key行锁拿不到时,返回插件cache请求
- 通过大量的代码hack,实现了InnoDB表级一致性快照的备份。解决了传统物理备份需要备份整库的问题
Download Slides
Linkedin
介绍Linkedin的分布式NoSQL系统,其架构在MySQL之上。加上一堆组件,例如apache helix, router, api server, kafka等等. MySQL只是作为存储节点;
在MySQL层,对GTID的功能进行了扩展,binlog的row event使用snappy进行压缩
Download Slides
Booking
扩展MySQL策略
Download Slides
从MySQL迁移到RockDB来解决Booking的数据检索问题
Download Slides
MySQL并行复制,老话题
Download Slides
Yelp
几个PPT都挂了,后面再补上
Download Slides
Download Slides
Download Slides
Dropbox
Dropbox使用GTID的分享: 集群管理,MySQL的复制机制,GTID相关的经验例如failover切换,备份等。
Download Slides
使用performance schema进行trouble shoutting,老话题了
Download Slides
Github
使用Orchestrator进行崩溃检测及Failover
Download Slides
DBA的那些事儿
Download Slides
还是GTID和复制的那些事儿
Download Slides
Intel
硬件和文件系统都不太懂,标记了后面有空再看
Download Slides
来自Intel公司的分享,在不同硬件环境下的Percona MySQL性能表现,包括 (1) a RAID of HDD vs. (2) a RAID of SATA SSD vs. (3) a RAID of NVMe SSD。
Download Slides
还是讲硬件的,使用intel的硬件来提升性能神马...
Download Slides
介绍了几类不同引擎的优缺点
Download Slides
Alibaba
介绍了Alibaba如何为解决电商业务的高负载、高并发等要求所做的大量源码改进
Download Slides
基于InnoDB的物理复制,之前已经撰文专门讲过,感兴趣的自取
Download Slides
Pinterest
基于不可靠组件构建高可靠服务 ?
Download Slides
介绍Pinterest基于MySQL的图片存储系统服务Zen
Download Slides
Linux系统优化
优化Linux下的各项配置来提升数据库性能
Download Slides
Download Slides
- 如何观察Linux的各项性能指数,介绍了大量的工具..
- 性能分析方法论
- 系统性能测试,使用perf进行性能分析
- Trace调用栈及性能tuning
个人认为这篇slide非常值得运维人员一读,对于ppt中提到的一些工具可以自己试玩一把,都满实用的
Download Slides
业界其他
非标准数据的存储方案,太长了没看
Download Slides
演讲者是原Tokudb开发成员,分享了如何对数据库的数据进行压缩:
- 为什么压缩: 数据的磁盘存储太高,例如SSD
- 压缩的代价模型:压缩比解压要更困难,通常算法需要去高效的寻找重复串进行编码
- 压缩算法如何工作
- block size、碎片化等对空间影响
- Entropy: High entropy data is less compressible
对压缩理论感兴趣的可以看看。
Download Slides
介绍SQLite的内部架构,特点,和MySQL从可移植性、并发性能、网络等各个方面进行比较
Download Slides
InnoDB事务锁
Download Slides
数据灾难恢复
Download Slides
备份及恢复测试,ppt没啥内容
Download Slides
MySQL查询优化技巧
Download Slides
通过docket来进行MySQL部署,对在容器中运行mysql感兴趣的可以看看。演讲者是sandbox的作者
Download Slides
主要介绍了Aphache Solr的一些架构和特性,并使用solr来解决大数据量级别的索引问题,进而解决业务上的即时搜索问题。
Download Slides
介绍Apache Impala,以及MySQL和impala的对比。后者主打OLAP,支持PB级数据量级,列式存储,线性扩展。
Download Slides
使用自动化运维工具Ansible来管理Mysql
Download Slides
来自TwinDB的分享,介绍了如何去灾难恢复InnoDB表
- 介绍了InnoDB的物理数据组织
- 通过工具mysqlfrm 解析frm文件获取其对应的InnoDB表结构
- 如何从数据页中离线抢救合法的记录
- 删除表后的恢复及恢复压缩表,PPT讲的不是很细,你可以从他们的官方博客上获得更多的信息
- PS: TwinDB提供了在线数据恢复服务,但是是有偿的。价格不算贵
Download Slides
来自Clustrix的分享
- 介绍如何进行MySQL的Scale,常见scale out/up策略的优缺点
- 介绍了他们的集群系统ClustrixDB
Download Slides
介绍Apache Ignite,不了解
Download Slides
介绍ActorDB,一款兼容MySQL协议的分布式数据库
Download Slides
CockroachDB, 一个类似Google Spanner的开源数据库。
Download Slides
数据库的数据加密介绍,以及该公司的ZeroDB
Download Slides
使用MySQL存储引擎Spider进行数据库分片。据说spider在腾讯用的比较多,有空研究下
Download Slides
通常情况下客户端是使用mysql_store_result先存储结果集,然后再逐行处理。而另外一种方式是mysql_use_result则是逐行在客户端获取再处理,相比前者对客户端的内存占用影响较小。
Download Slides
在Kubernetes(一款Google开源的Docker容器集群管理系统)上运行Galera Cluster
Download Slides
介绍Tempesta DB, 它是linux内核的扩展,实现了内存管理,驱逐,IO机制等。它被设计成承担实时负载,需要数据装进RAM中。
Download Slides
Download Slides
其他
由于我对其他数据库并不了解,这里仅仅列出相关的Slide及摘要链接,感兴趣的自取
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides
Download Slides