前言
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开发组
The Exciting MySQL 5.7 Replication Enhancements
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线程,提升了整体并发度。
Introducing the MySQL Document Store
介绍了MySQL5.7在GA之后释放的一个新特效: Document Store。其定义了一套新的接口,实现了X PLUGIN及对应的通信协议。通过Document Store,用户可以像MongoDB那样来操作MySQL。你也可以阅读我的另外一篇博文来了解相关知识。
MySQL Query Optimizer Overview
介绍MySQL的优化器如何工作,优化器架构,如何基于开销进行查询优化,和查询计划选择。
对优化器感兴趣的同学强烈建议阅读,干货非常足!
Innodb 5.7 Features & Highlights
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执行过程;
Performance schema and sys schema in MySQL 5.7
介绍MySQL5.7 Performance Schema,以及基于Performance Schema及Information_Schema构建的视图集合sys schema。个人非常喜欢这套视图,非常便于发现系统问题及性能瓶颈。
A MySQL Sys Schema Deep Dive
Sys Schema的深入介绍
High Availability Using MySQL Group Replication
MySQL Group Replication,是MySQL官方出品的一组插件,用于管理多点写入的集群,可多点写入,自动冲突检测,集群自动同步和恢复等等。不过还没GA,感兴趣的可以自己玩一下
MySQL Router: New High Availability Building Block
官方出品HA及负载均衡方案,可和另外一个工具Fabric结合使用
MySQL Performance: Scalability & Benchmarks
MySQL性能测试
What's New in MySQL
概览了5.7的一些新特性(不全面),以及booking部署MySQL5.7的一些经验
Optimizer: What’s New in 5.7, JSON and More.....
MySQL5.7的优化器
MySQL Document Store: Under the Hood
介绍MySQL最新出的document store,提供了X PLUGIN及新的协议,允许用户像使用mongodb那样使用mysql
MySQL Performance: Demystified Tuning & Scalability
Mysql性能测试,分析及调优
Percona
InnoDB Architecture and Performance Optimization for MySQL 5.7
Percona CEO主讲,介绍了InnoDB的主要架构,关键配置,物理文件存储,内存结构, 锁系统,MVCC等等方方面面的内容,对InnoDB感兴趣的同学推荐一读。
还顺带介绍了Percona及MariaDB所做的一些改进。
TokuDB: Stories from the Battlefield
演讲者为Percona的CTO Vadim,主要介绍了Tokudb的Fratal Tree的实现。由于现在Percona已经收购了Tokudb,你可以从发布的Percona Server上直接使用Tokudb存储引擎。
Slides由介绍b-tree的优缺点引出fractal tree,介绍了其内部的数据组织结构,tokudb的一些参数建议,以及PerconaFT相关的一些内核实现。
Schema Review 101: How and What You Should Be Looking at
关于Schema Design之类,适合DBA同学阅读
MySQL and Ceph
介绍了Ceph的架构,以及基于其上调优MySQL
另外几个和Ceph相关的slide:
Download Slides
Download Slides
Download Slides
MySQL Performance Troubleshooting Best Practices
Trouble Shoutting最佳实践
Preventing and Resolving MySQL Downtime
常见的产生宕机时间的场景,以及解决方案;性能问题排查
Compression for Open Source Databases
介绍开源数据库的各种压缩方案。
MySQL 5.7 and MongoDB: Geospatial Introduction
介绍了MySQL5.7的GIS及MongoDB的GIS, 一些示例。
Cost Optimizations Through MySQL Performance Optimizations
基于例子给出一些性能优化建议,随便看看
Percona XtraDB Cluster Reference Architecture 2016
Percona XtraDB Cluster,不知道有没人用,反正我没玩过...这篇slide介绍了如何设置cluster,并介绍了一些内部实现,例如异步slave,proxy,负载均衡,备份及监控
Using Apache Spark and MySQL for Data Analysis
介绍如何使用Apache Spark集合MySQL来做数据分析
Performance Schema for MySQL Troubleshooting
使用Performance Schema来排查问题
Top Most-Overlooked MySQL Performance Optimizations
讨论了从硬件选择,配置,索引到表设计及架构,各个方面的优化点
Solid State Storage for your MySQL Databases: What you need to Know to Optimize Performance
Percona的CTO Vadim介绍了关于底层存储的一些分享
- Flash设备的架构
- AHCI vs NVMe
- 不同的存储硬件产品
对硬件不太懂,有空再看看
Galera Replication Demystified: How Does It Work?
介绍Galera的复制原理的,没了解过
To Shard or Not to Shard
To shard or not to shard, that's a question...来自Percona CEO的又一分享。
Amazon Aurora: the Benefits and the Drawbacks
- 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消息);
- 性能测试
MySQL Multi-Source Replication
多源复制,包括Mariadb及MySQL各自的使用介绍
XtraDB 5.7: Key Performance Algorithms
Percona对MySQL5.7 InnoDB的性能优化,例如multi lru flush, split double write buffer
Implementing Multi-Source Replication With MySQL 5.7 @ Verisure (and How We Got There)
5.7多源复制
Amazon
Introducing Amazon Aurora: A New MySQL-Compatible Database
AWS的VP介绍Aurora,测试数据,及一些比较上层的实现架构。
The highs and lows of semi-synchronous replication
- 介绍了异步/同步/半同步复制
- Fb-mysql让mysqlbinlog支持semisync,如何做高可用,如何恢复老主库
MyRocks, MongoRocks and RocksDB
Mark Callaghan的keynote演讲。介绍rockdb,及其衍生组件myrocks及mongorocks的优势和特点
MyRocks Internals
实际上这是Memsql的工程师的分享,但因为MyRock是Facebook开发的,所以放在这一栏。大概介绍了些概念性的内容。
MyRocks Deep Dive: Flash Optimized LSM Database for MySQL, and its Use Case at Facebook
Rockdb及MyRock的深度介绍,想了解其底层实现,这篇slide是必读的,干货满满
RocksDB: Key-Value Store Optimized for Flash-Based SSD
介绍Rockdb的设计和架构,同样是满满干货, 后面有时间再慢慢研究
Mariadb
MariaDB 10.1- what’s new
MariaDB 10.1特性介绍
Window functions in MariaDB
MariaDB的window function实现,MariaDB在server层一如既往的走在前面
谷歌
Vitess: The Complete Story
Youtube的分布式中间件Vitess介绍
Not Just a Bunch of Disks: Storage Architecture of Google Cloud SQL
暂无PPT,主要是Google云在底层文件存储层的一些特性。
InnoDB as backend of Manhattan - Twitter's distributed database
介绍Twitter的底层存储解决方案(MHBtree),基于其业务特点定制,MySQL实际上被当成了kv引擎,使用特定的协议,通过一个插件直接访问Handler。这个架构还蛮有意思的,例如
- 做了基于时间戳的行级别冲突检测
- 热点key更新: 发现到热点Key行锁拿不到时,返回插件cache请求
- 通过大量的代码hack,实现了InnoDB表级一致性快照的备份。解决了传统物理备份需要备份整库的问题
Espresso: LinkedIn's distributed document store on top of MySQL
介绍Linkedin的分布式NoSQL系统,其架构在MySQL之上。加上一堆组件,例如apache helix, router, api server, kafka等等. MySQL只是作为存储节点;
在MySQL层,对GTID的功能进行了扩展,binlog的row event使用snappy进行压缩
Booking
MySQL Scalability: Dimensions, Methods and Technologies
扩展MySQL策略
Bringing code to the data: from MySQL to RocksDB for high volume searches
从MySQL迁移到RockDB来解决Booking的数据检索问题
MySQL Parallel Replication: inventory, use-case and limitations
MySQL并行复制,老话题
Yelp
几个PPT都挂了,后面再补上
Let Robots Manage your Schema (without destroying all humans)
Clusternaut: Orchestrating Percona XtraDB Cluster with Kubernetes
If You Only Have a Hammer, Everything Looks Like a Thumb
Dropbox
Rolling out Global Transaction IDs at Dropbox
Dropbox使用GTID的分享: 集群管理,MySQL的复制机制,GTID相关的经验例如failover切换,备份等。
Troubleshooting Scenarios with Performance Schema
使用performance schema进行trouble shoutting,老话题了
Github
Reliable crash detection and failover with Orchestrator
使用Orchestrator进行崩溃检测及Failover
Rookie DBA Mistakes: How I Screwed Up So You Don't Have To
DBA的那些事儿
MySQL GTID Implementation, Maintenance, and Best Practices
还是GTID和复制的那些事儿
Intel
Accelerating Ceph for Database Workloads with an all PCIe SSD Cluster
硬件和文件系统都不太懂,标记了后面有空再看
Performance of Percona Server for MySQL on Intel Server Systems using HDD, SATA SSD, and NVMe SSD as Different Storage Mediums
来自Intel公司的分享,在不同硬件环境下的Percona MySQL性能表现,包括 (1) a RAID of HDD vs. (2) a RAID of SATA SSD vs. (3) a RAID of NVMe SSD。
Increase MySQL Database Performance with Intel® SSD plus Cache Acceleration Software
还是讲硬件的,使用intel的硬件来提升性能神马...
SQL with MySQL, or NoSQL with MongoDB?
介绍了几类不同引擎的优缺点
Alibaba
What's new in AliSQL - Alibaba's branch of MySQL
介绍了Alibaba如何为解决电商业务的高负载、高并发等要求所做的大量源码改进
Physical Replication Based on InnoDB
基于InnoDB的物理复制,之前已经撰文专门讲过,感兴趣的自取
Operational Buddhism: Building Reliable Services From Unreliable Components
基于不可靠组件构建高可靠服务 ?
Zen on MySQL
介绍Pinterest基于MySQL的图片存储系统服务Zen
Linux系统优化
Tuning Linux for Database performance
优化Linux下的各项配置来提升数据库性能
Turtles All the Way Down: Tuning Linux for Database Workloads
Linux Systems Performance
- 如何观察Linux的各项性能指数,介绍了大量的工具..
- 性能分析方法论
- 系统性能测试,使用perf进行性能分析
- Trace调用栈及性能tuning
个人认为这篇slide非常值得运维人员一读,对于ppt中提到的一些工具可以自己试玩一把,都满实用的
业界其他
Storage Methods for Nonstandard Data Patterns
非标准数据的存储方案,太长了没看
The Language of Compression Benchmarking
演讲者是原Tokudb开发成员,分享了如何对数据库的数据进行压缩:
- 为什么压缩: 数据的磁盘存储太高,例如SSD
- 压缩的代价模型:压缩比解压要更困难,通常算法需要去高效的寻找重复串进行编码
- 压缩算法如何工作
- block size、碎片化等对空间影响
- Entropy: High entropy data is less compressible
对压缩理论感兴趣的可以看看。
Technology comparison: MySQL vs SQLite on various devices
介绍SQLite的内部架构,特点,和MySQL从可移植性、并发性能、网络等各个方面进行比较
InnoDB Locking Explained With Stick Figures
InnoDB事务锁
Resurrecting a MySQL Database from the Dead
数据灾难恢复
Backups, restores and clones for fun and profit
备份及恢复测试,ppt没啥内容
MySQL Query Performance Tuning: A 12 Step Program
MySQL查询优化技巧
MySQL and Docker Strategies
通过docket来进行MySQL部署,对在容器中运行mysql感兴趣的可以看看。演讲者是sandbox的作者
Solr: How to index 10 billion phrases from MySQL and HBase
主要介绍了Aphache Solr的一些架构和特性,并使用solr来解决大数据量级别的索引问题,进而解决业务上的即时搜索问题。
MySQL and Impala ecosystem: SQL friendly Hadoop
介绍Apache Impala,以及MySQL和impala的对比。后者主打OLAP,支持PB级数据量级,列式存储,线性扩展。
How SurveyMonkey uses Ansible to manage its MySQL fleet
使用自动化运维工具Ansible来管理Mysql
MySQL Data Recovery with TwinDB Undrop for InnoDB
来自TwinDB的分享,介绍了如何去灾难恢复InnoDB表
- 介绍了InnoDB的物理数据组织
- 通过工具mysqlfrm 解析frm文件获取其对应的InnoDB表结构
- 如何从数据页中离线抢救合法的记录
- 删除表后的恢复及恢复压缩表,PPT讲的不是很细,你可以从他们的官方博客上获得更多的信息
- PS: TwinDB提供了在线数据恢复服务,但是是有偿的。价格不算贵
Scaling MySQL: Strategies, Challenges, & A Better Solution
来自Clustrix的分享
- 介绍如何进行MySQL的Scale,常见scale out/up策略的优缺点
- 介绍了他们的集群系统ClustrixDB
Apache Ignite - In-Memory Data Fabric
介绍Apache Ignite,不了解
ActorDB - an alternative view of a distributed database
介绍ActorDB,一款兼容MySQL协议的分布式数据库
Introducing CockroachDB: Make Data Easy
CockroachDB, 一个类似Google Spanner的开源数据库。
End-to-end encryption for databases
数据库的数据加密介绍,以及该公司的ZeroDB
Sharding with Spider solutions
使用MySQL存储引擎Spider进行数据库分片。据说spider在腾讯用的比较多,有空研究下
An efficient way to process a large number of rows with mysql_use_result() or streaming option
通常情况下客户端是使用mysql_store_result先存储结果集,然后再逐行处理。而另外一种方式是mysql_use_result则是逐行在客户端获取再处理,相比前者对客户端的内存占用影响较小。
Running a Galera Cluster in Kubernetes
在Kubernetes(一款Google开源的Docker容器集群管理系统)上运行Galera Cluster
Linux Kernel Extension for Databases
介绍Tempesta DB, 它是linux内核的扩展,实现了内存管理,驱逐,IO机制等。它被设计成承担实时负载,需要数据装进RAM中。
Time series from collection to analysis - examples and use cases
其他
由于我对其他数据库并不了解,这里仅仅列出相关的Slide及摘要链接,感兴趣的自取