SlideShare a Scribd company logo
1 of 24
MySQL新技术探索与实践
彭立勋
WWW.PengLiXun.COM
Alibaba DBA Team
新技术风起云涌
• 以Percona/XtraDB为代表的MySQL分支
(MariaDB、Drizzle……)
• 以HandlerSocket为代表的新接口
(Memcached Plugin……)
• 以XFS/EXT4为代表的高性能文件系统(Btrfs、
ZFS……)
• 以Flashcache为代表的二级缓存架构
(InnoDB Secondary Buffer Pool……)
• 以Fusion-IO为代表的PCI-E SSD
• 以Intel C Compiler为代表的高性能编译器
• ……
Topics
• ICC
• XFS
• Percona
• HandlerSocket
Why ICC
• 为何自己编译MySQL?
 官方无静态编译的Innodb Plugin版本
 可以加入第三方Patch或修改源码
 可以将第三方库静态编译到可执行文件(TCMalloc)
• 为何使用ICC编译?
 原生Intel SSE2指令集,浮点运算效率高
 内置Intel Math Lib,提升数学函数效率
 内置Intel Thread Lib,提升多线程稳定性和效率
ICC vs GCC(1)
硬件环境
CPU:Intel Xoen 5410
内存:24G
硬盘:10*15k SAS RAID10
ICC vs GCC(2)
硬件环境
CPU:Intel Xoen 5520
内存:24G
硬盘:10*15k SAS RAID10
MySQL:5.1.40 Enterprise
Why XFS
• 为何不使用EXT3?
 对SSD设备不友好,SSD是未来数据存储设备的趋势
 删除文件速度慢,导致数据库Hang
 对大文件读写性能不佳
• 为何选择XFS?
 SGI已经在其大型机上应用多年(From 1994),稳定可靠
 对SSD设备友好(延迟分配)
 高并发下竞争少,性能好(分配组特性)
 支持条带化分配,使得文件系统分配与RAID条带完全对
齐,最大化吞吐量
 对大文件操作友好(基于Extent的分配方式)
Why NOT EXT4?
• EXT4也是一款非常好的文件系统
• 性能与XFS接近,甚至好一些
• 并且可以从EXT3无缝升级
• But ......
• 我们没有运维EXT4的经验
XFS Tips
• 分配组(Allocation Groups)
• 延时分配(Delay Allocation)
• 多线程DirectIO
• 全B+ Tree管理空间
EXT3 vs XFS(1)
硬件环境
CPU:Intel Xoen 5520
内存:24G
硬盘:10*15k SAS RAID10
MySQL:5.1.40 Enterprise
EXT3 vs XFS(2)
硬件环境
CPU:Intel Xoen 5520
内存:24G
硬盘:10*15k SAS RAID10
MySQL:5.1.40 Enterprise
Why Percona
• Percona的优势
 对SSD设备有专门的优化
 对Flashcache有SQL层接口
 允许XtraDB静态编译
 支持多种页大小
 提供额外的监控参数
 有被生产环境考验过(SOHU)
• Percona存在的问题
 引入第三方补丁较多,可能存在Bug(可以接受)
New Future(1)
• 文件格式
 Compressed结构:CPU换IO
 Dynamic结构:ROW中不存大字段前缀
• IO参数
 IO容量:innodb_io_capacity
 IO线程数:innodb_read_io_threads(预读)、
innodb_write_io_threads(赃页回写)、
innodb_use_purge_thread(清理UNDO)
• 赃页刷新方式
 innodb_adaptive_checkpoint (XtraDB)
 innodb_adaptive_flushing (InnoDB Plugin)
New Future(2)
• 扩展性
 增强多处理机性能(About 24 Cores)
 拆分Buffer Pool Mutex(buf_pool_mutex、
LRU_list_mutex、flush_list_mutex、page_hash_latch、
free_list_mutex、zip_free_mutex、zip_hash_mutex)
• 功能
 可变页大小(innodb_page_size)
 可控的Insert Buffering和Adaptive Hash Index
 可配置多回滚段(innodb_extra_rsegments)
 快速Warn Up(innodb_buffer_pool_shm_key 、
XTRA_LRU_DUMP/XTRA_LRU_RESTORE)
 快速创建索引和索引快速重命名
New Future(3)
• 监控
 扩展information_schema
– INDEX_STATISTICS
– TABLE_STATISTICS
– USER_STATISTICS
 扩展InnoDB统计
– INNODB_TABLE_STATS
– INNODB_INDEX_STATS
 For Example
– 可以获取未使用过的索引
– 可以获取索引被用于访问的行数
– 可以获取当前锁定信息
– 可以获取用户连接统计信息
– ……
Percona
Performance
每秒处理50~75万行读取
每秒处理2.5K~5K Query
每秒网卡吞吐400~750Mbps
Why Handler Socket
• SQL执行的Oprofile
samples % app name symbol name
259130 4.5199 mysqld MYSQLparse(void*)
196841 3.4334 mysqld my_pthread_fastmutex_lock
106439 1.8566 libc-2.5.so _int_malloc
……
63435 1.1065 mysqld JOIN::optimize()
55825 0.9737 vmlinux wakeup_stack_begin
55054 0.9603 mysqld MYSQLlex(void*, void*)
50833 0.8867 libpthread-2.5.so pthread_mutex_trylock
49602 0.8652 ha_innodb_plugin.so.0.0.0 row_search_for_mysql
……
46499 0.8111 libc-2.5.so malloc
Why Handler Socket
• HandlerSocket执行的Oprofile
samples % app name symbol name
984785 5.9118 bnx2 /bnx2
847486 5.0876 ha_innodb_plugin.so.0.0.0 ut_delay
545303 3.2735 ha_innodb_plugin.so.0.0.0
btr_search_guess_on_hash
317570 1.9064 ha_innodb_plugin.so.0.0.0 row_search_for_mysql
……
206057 1.2370 HandlerSocket.so
dena::hstcpsvr_worker::run_one_ep()
183330 1.1006 ha_innodb_plugin.so.0.0.0 mutex_spin_wait
175738 1.0550 HandlerSocket.so dena::dbcontext::
cmd_find_internal(dena::dbcallback_i&, dena::prep_stmt const&,
ha_rkey_function, dena::cmd_exec_args const&)
……
149611 0.8981 ha_innodb_plugin.so.0.0.0 row_sel_store_mysql_rec
HS vs MC vs SQL
硬件环境
CPU:Intel Xoen 5520
内存:24G
硬盘:10*15k SAS RAID10
MySQL:5.1.48
Our Solution(1)
Our Solution(2)
• RAID卡
 关闭预读:预读效果不佳,直接读取磁盘
 关闭磁盘Cache:RAID卡缓存已经缓冲了写操作,磁盘
Cache无电池
 条带:默认64K,调整为1M
• Linux
 IO调度:/sys/block/sdb/queue/scheduler,默认cfq,
调整为deadline
 减少预读:/sys/block/sdb/queue/read_ahead_kb,默
认128,调整为16
 增大队列:/sys/block/sdb/queue/nr_requests,默认
128,调整为512
 NUMA策略:numactl --interleave=all 或 --
cpunodebind=0 --localalloc
Our Solution(3)
• Flashcache
 Block Size=4K:与SSD设备页对齐
 dirty_thresh_pct = 90:一个SET内90%都是脏块则刷新
 write_merge = 1:写入合并,提升写磁盘的性能
 fast_remove = 1:解除绑定时无需将脏块写入磁盘
• Percona
 页设置:innodb_page_size=4096、
innodb_fast_checksum=1
 刷新策略:innodb_adaptive_checkpoint=3、
innodb_flush_neighbor_pages=0
 IO容量:innodb_io_capacity>10000
 IO线程:innodb_read_io_threads = 1、
innodb_write_io_threads = 16
Our Solution(4)
• 监控
 Fusion-IO(fio-status):
– Logical bytes written:逻辑写
– Logical bytes read :逻辑读
– Physical bytes written:物理写
– Physical bytes read:物理读
 Flashcache(dmsetup status):
– read hit percent:读命中
– write hit percent:写命中
Q&A
E-Mail: PengLiXun@gmail.com

More Related Content

What's hot

MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)Lixun Peng
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现Lixun Peng
 
数据库内核分享——第一期
数据库内核分享——第一期数据库内核分享——第一期
数据库内核分享——第一期frogd
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy clusterYiwei Ma
 
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)frogd
 
MySQL基础技能与原理——高级应用
MySQL基础技能与原理——高级应用MySQL基础技能与原理——高级应用
MySQL基础技能与原理——高级应用Michael Zhang
 
五款常用mysql slow log分析工具的比较
五款常用mysql slow log分析工具的比较 五款常用mysql slow log分析工具的比较
五款常用mysql slow log分析工具的比较 colderboy17
 
阿里集团MySQL特性(5.5介绍)
阿里集团MySQL特性(5.5介绍)阿里集团MySQL特性(5.5介绍)
阿里集团MySQL特性(5.5介绍)Hui Liu
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)Feng Yu
 
MySQL快速入门与提高
MySQL快速入门与提高MySQL快速入门与提高
MySQL快速入门与提高mysqlpub
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析frogd
 
Buffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracleBuffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oraclefrogd
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构Cosey Lee
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕ideawu
 
高性能数据库
高性能数据库高性能数据库
高性能数据库dhlzj
 
1号店数据库架构
1号店数据库架构1号店数据库架构
1号店数据库架构Louis liu
 
发布系统安装说明
发布系统安装说明发布系统安装说明
发布系统安装说明Yiwei Ma
 
CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)Chengjen Lee
 

What's hot (20)

MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现
 
MySQL aio
MySQL aioMySQL aio
MySQL aio
 
数据库内核分享——第一期
数据库内核分享——第一期数据库内核分享——第一期
数据库内核分享——第一期
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy cluster
 
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
 
MySQL基础技能与原理——高级应用
MySQL基础技能与原理——高级应用MySQL基础技能与原理——高级应用
MySQL基础技能与原理——高级应用
 
五款常用mysql slow log分析工具的比较
五款常用mysql slow log分析工具的比较 五款常用mysql slow log分析工具的比较
五款常用mysql slow log分析工具的比较
 
阿里集团MySQL特性(5.5介绍)
阿里集团MySQL特性(5.5介绍)阿里集团MySQL特性(5.5介绍)
阿里集团MySQL特性(5.5介绍)
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)
 
MySQL快速入门与提高
MySQL快速入门与提高MySQL快速入门与提高
MySQL快速入门与提高
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析
 
Buffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracleBuffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracle
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
 
高性能数据库
高性能数据库高性能数据库
高性能数据库
 
1号店数据库架构
1号店数据库架构1号店数据库架构
1号店数据库架构
 
发布系统安装说明
发布系统安装说明发布系统安装说明
发布系统安装说明
 
CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)
 

Viewers also liked

DoubleBinlog方案
DoubleBinlog方案DoubleBinlog方案
DoubleBinlog方案Lixun Peng
 
Performance of fractal tree databases
Performance of fractal tree databasesPerformance of fractal tree databases
Performance of fractal tree databasesLixun Peng
 
阿里云RDS for MySQL的若干优化
阿里云RDS for MySQL的若干优化阿里云RDS for MySQL的若干优化
阿里云RDS for MySQL的若干优化Lixun Peng
 
内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能Lixun Peng
 
内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用Lixun Peng
 
DB_Algorithm_and_Data_Structure_About_Sort
DB_Algorithm_and_Data_Structure_About_Sort DB_Algorithm_and_Data_Structure_About_Sort
DB_Algorithm_and_Data_Structure_About_Sort Lixun Peng
 
Alibaba patches in MariaDB
Alibaba patches in MariaDBAlibaba patches in MariaDB
Alibaba patches in MariaDBLixun Peng
 
Fractal Tree Indexes : From Theory to Practice
Fractal Tree Indexes : From Theory to PracticeFractal Tree Indexes : From Theory to Practice
Fractal Tree Indexes : From Theory to PracticeTim Callaghan
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规mysqlops
 
MongoDB and Fractal Tree Indexes
MongoDB and Fractal Tree IndexesMongoDB and Fractal Tree Indexes
MongoDB and Fractal Tree IndexesMongoDB
 
Database Design and Implementation
Database Design and ImplementationDatabase Design and Implementation
Database Design and ImplementationChristian Reina
 
Fractals presentation
Fractals presentationFractals presentation
Fractals presentationgbdriver80
 
R3L+ Overview of Grundtvig project "Quality Framework For Learning Regions"
R3L+ Overview of Grundtvig project "Quality Framework For Learning Regions"R3L+ Overview of Grundtvig project "Quality Framework For Learning Regions"
R3L+ Overview of Grundtvig project "Quality Framework For Learning Regions"Randolph Preisinger-Kleine
 
Układ drogowy Franowo
Układ drogowy FranowoUkład drogowy Franowo
Układ drogowy FranowoEkokonsultacje
 

Viewers also liked (18)

DoubleBinlog方案
DoubleBinlog方案DoubleBinlog方案
DoubleBinlog方案
 
Performance of fractal tree databases
Performance of fractal tree databasesPerformance of fractal tree databases
Performance of fractal tree databases
 
阿里云RDS for MySQL的若干优化
阿里云RDS for MySQL的若干优化阿里云RDS for MySQL的若干优化
阿里云RDS for MySQL的若干优化
 
内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能
 
内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用
 
DB_Algorithm_and_Data_Structure_About_Sort
DB_Algorithm_and_Data_Structure_About_Sort DB_Algorithm_and_Data_Structure_About_Sort
DB_Algorithm_and_Data_Structure_About_Sort
 
Time Machine
Time MachineTime Machine
Time Machine
 
Alibaba patches in MariaDB
Alibaba patches in MariaDBAlibaba patches in MariaDB
Alibaba patches in MariaDB
 
Web design basics 1
Web design basics 1Web design basics 1
Web design basics 1
 
Fractal Tree Indexes : From Theory to Practice
Fractal Tree Indexes : From Theory to PracticeFractal Tree Indexes : From Theory to Practice
Fractal Tree Indexes : From Theory to Practice
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规
 
MongoDB and Fractal Tree Indexes
MongoDB and Fractal Tree IndexesMongoDB and Fractal Tree Indexes
MongoDB and Fractal Tree Indexes
 
Database Design and Implementation
Database Design and ImplementationDatabase Design and Implementation
Database Design and Implementation
 
Fractals presentation
Fractals presentationFractals presentation
Fractals presentation
 
R3L+ Overview of Grundtvig project "Quality Framework For Learning Regions"
R3L+ Overview of Grundtvig project "Quality Framework For Learning Regions"R3L+ Overview of Grundtvig project "Quality Framework For Learning Regions"
R3L+ Overview of Grundtvig project "Quality Framework For Learning Regions"
 
Kelly Ruggles
Kelly RugglesKelly Ruggles
Kelly Ruggles
 
Kelly C.Ruggles
Kelly C.RugglesKelly C.Ruggles
Kelly C.Ruggles
 
Układ drogowy Franowo
Układ drogowy FranowoUkład drogowy Franowo
Układ drogowy Franowo
 

Similar to MySQL新技术探索与实践

Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocketpwesh
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江thinkinlamp
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysqlpwesh
 
My sql优化、新特性和新架构
My sql优化、新特性和新架构My sql优化、新特性和新架构
My sql优化、新特性和新架构mysqlops
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 Lheima911
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOpenSourceCamp
 
MySQL基础技能与原理——基本原理
MySQL基础技能与原理——基本原理MySQL基础技能与原理——基本原理
MySQL基础技能与原理——基本原理Michael Zhang
 
Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongMichael Zhang
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发litaocheng
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿yiditushe
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发mysqlops
 
Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事freezr
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎frogd
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Harvey Zhang
 
Oracle Security 101
Oracle Security 101Oracle Security 101
Oracle Security 101Dahui Feng
 

Similar to MySQL新技术探索与实践 (20)

Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
 
My sql优化、新特性和新架构
My sql优化、新特性和新架构My sql优化、新特性和新架构
My sql优化、新特性和新架构
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 L
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 
MySQL基础技能与原理——基本原理
MySQL基础技能与原理——基本原理MySQL基础技能与原理——基本原理
MySQL基础技能与原理——基本原理
 
Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukong
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎
 
Cdc@ganji.com
Cdc@ganji.comCdc@ganji.com
Cdc@ganji.com
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化
 
Oracle Security 101
Oracle Security 101Oracle Security 101
Oracle Security 101
 

More from Lixun Peng

Double Sync Replication
Double Sync ReplicationDouble Sync Replication
Double Sync ReplicationLixun Peng
 
对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究Lixun Peng
 
A binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting functionA binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting functionLixun Peng
 
一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法Lixun Peng
 
中文分词算法设计
中文分词算法设计中文分词算法设计
中文分词算法设计Lixun Peng
 
DB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTreeDB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTreeLixun Peng
 

More from Lixun Peng (6)

Double Sync Replication
Double Sync ReplicationDouble Sync Replication
Double Sync Replication
 
对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究
 
A binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting functionA binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting function
 
一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法
 
中文分词算法设计
中文分词算法设计中文分词算法设计
中文分词算法设计
 
DB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTreeDB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTree
 

MySQL新技术探索与实践

  • 2. 新技术风起云涌 • 以Percona/XtraDB为代表的MySQL分支 (MariaDB、Drizzle……) • 以HandlerSocket为代表的新接口 (Memcached Plugin……) • 以XFS/EXT4为代表的高性能文件系统(Btrfs、 ZFS……) • 以Flashcache为代表的二级缓存架构 (InnoDB Secondary Buffer Pool……) • 以Fusion-IO为代表的PCI-E SSD • 以Intel C Compiler为代表的高性能编译器 • ……
  • 3. Topics • ICC • XFS • Percona • HandlerSocket
  • 4. Why ICC • 为何自己编译MySQL?  官方无静态编译的Innodb Plugin版本  可以加入第三方Patch或修改源码  可以将第三方库静态编译到可执行文件(TCMalloc) • 为何使用ICC编译?  原生Intel SSE2指令集,浮点运算效率高  内置Intel Math Lib,提升数学函数效率  内置Intel Thread Lib,提升多线程稳定性和效率
  • 5. ICC vs GCC(1) 硬件环境 CPU:Intel Xoen 5410 内存:24G 硬盘:10*15k SAS RAID10
  • 6. ICC vs GCC(2) 硬件环境 CPU:Intel Xoen 5520 内存:24G 硬盘:10*15k SAS RAID10 MySQL:5.1.40 Enterprise
  • 7. Why XFS • 为何不使用EXT3?  对SSD设备不友好,SSD是未来数据存储设备的趋势  删除文件速度慢,导致数据库Hang  对大文件读写性能不佳 • 为何选择XFS?  SGI已经在其大型机上应用多年(From 1994),稳定可靠  对SSD设备友好(延迟分配)  高并发下竞争少,性能好(分配组特性)  支持条带化分配,使得文件系统分配与RAID条带完全对 齐,最大化吞吐量  对大文件操作友好(基于Extent的分配方式)
  • 8. Why NOT EXT4? • EXT4也是一款非常好的文件系统 • 性能与XFS接近,甚至好一些 • 并且可以从EXT3无缝升级 • But ...... • 我们没有运维EXT4的经验
  • 9. XFS Tips • 分配组(Allocation Groups) • 延时分配(Delay Allocation) • 多线程DirectIO • 全B+ Tree管理空间
  • 10. EXT3 vs XFS(1) 硬件环境 CPU:Intel Xoen 5520 内存:24G 硬盘:10*15k SAS RAID10 MySQL:5.1.40 Enterprise
  • 11. EXT3 vs XFS(2) 硬件环境 CPU:Intel Xoen 5520 内存:24G 硬盘:10*15k SAS RAID10 MySQL:5.1.40 Enterprise
  • 12. Why Percona • Percona的优势  对SSD设备有专门的优化  对Flashcache有SQL层接口  允许XtraDB静态编译  支持多种页大小  提供额外的监控参数  有被生产环境考验过(SOHU) • Percona存在的问题  引入第三方补丁较多,可能存在Bug(可以接受)
  • 13. New Future(1) • 文件格式  Compressed结构:CPU换IO  Dynamic结构:ROW中不存大字段前缀 • IO参数  IO容量:innodb_io_capacity  IO线程数:innodb_read_io_threads(预读)、 innodb_write_io_threads(赃页回写)、 innodb_use_purge_thread(清理UNDO) • 赃页刷新方式  innodb_adaptive_checkpoint (XtraDB)  innodb_adaptive_flushing (InnoDB Plugin)
  • 14. New Future(2) • 扩展性  增强多处理机性能(About 24 Cores)  拆分Buffer Pool Mutex(buf_pool_mutex、 LRU_list_mutex、flush_list_mutex、page_hash_latch、 free_list_mutex、zip_free_mutex、zip_hash_mutex) • 功能  可变页大小(innodb_page_size)  可控的Insert Buffering和Adaptive Hash Index  可配置多回滚段(innodb_extra_rsegments)  快速Warn Up(innodb_buffer_pool_shm_key 、 XTRA_LRU_DUMP/XTRA_LRU_RESTORE)  快速创建索引和索引快速重命名
  • 15. New Future(3) • 监控  扩展information_schema – INDEX_STATISTICS – TABLE_STATISTICS – USER_STATISTICS  扩展InnoDB统计 – INNODB_TABLE_STATS – INNODB_INDEX_STATS  For Example – 可以获取未使用过的索引 – 可以获取索引被用于访问的行数 – 可以获取当前锁定信息 – 可以获取用户连接统计信息 – ……
  • 17. Why Handler Socket • SQL执行的Oprofile samples % app name symbol name 259130 4.5199 mysqld MYSQLparse(void*) 196841 3.4334 mysqld my_pthread_fastmutex_lock 106439 1.8566 libc-2.5.so _int_malloc …… 63435 1.1065 mysqld JOIN::optimize() 55825 0.9737 vmlinux wakeup_stack_begin 55054 0.9603 mysqld MYSQLlex(void*, void*) 50833 0.8867 libpthread-2.5.so pthread_mutex_trylock 49602 0.8652 ha_innodb_plugin.so.0.0.0 row_search_for_mysql …… 46499 0.8111 libc-2.5.so malloc
  • 18. Why Handler Socket • HandlerSocket执行的Oprofile samples % app name symbol name 984785 5.9118 bnx2 /bnx2 847486 5.0876 ha_innodb_plugin.so.0.0.0 ut_delay 545303 3.2735 ha_innodb_plugin.so.0.0.0 btr_search_guess_on_hash 317570 1.9064 ha_innodb_plugin.so.0.0.0 row_search_for_mysql …… 206057 1.2370 HandlerSocket.so dena::hstcpsvr_worker::run_one_ep() 183330 1.1006 ha_innodb_plugin.so.0.0.0 mutex_spin_wait 175738 1.0550 HandlerSocket.so dena::dbcontext:: cmd_find_internal(dena::dbcallback_i&, dena::prep_stmt const&, ha_rkey_function, dena::cmd_exec_args const&) …… 149611 0.8981 ha_innodb_plugin.so.0.0.0 row_sel_store_mysql_rec
  • 19. HS vs MC vs SQL 硬件环境 CPU:Intel Xoen 5520 内存:24G 硬盘:10*15k SAS RAID10 MySQL:5.1.48
  • 21. Our Solution(2) • RAID卡  关闭预读:预读效果不佳,直接读取磁盘  关闭磁盘Cache:RAID卡缓存已经缓冲了写操作,磁盘 Cache无电池  条带:默认64K,调整为1M • Linux  IO调度:/sys/block/sdb/queue/scheduler,默认cfq, 调整为deadline  减少预读:/sys/block/sdb/queue/read_ahead_kb,默 认128,调整为16  增大队列:/sys/block/sdb/queue/nr_requests,默认 128,调整为512  NUMA策略:numactl --interleave=all 或 -- cpunodebind=0 --localalloc
  • 22. Our Solution(3) • Flashcache  Block Size=4K:与SSD设备页对齐  dirty_thresh_pct = 90:一个SET内90%都是脏块则刷新  write_merge = 1:写入合并,提升写磁盘的性能  fast_remove = 1:解除绑定时无需将脏块写入磁盘 • Percona  页设置:innodb_page_size=4096、 innodb_fast_checksum=1  刷新策略:innodb_adaptive_checkpoint=3、 innodb_flush_neighbor_pages=0  IO容量:innodb_io_capacity>10000  IO线程:innodb_read_io_threads = 1、 innodb_write_io_threads = 16
  • 23. Our Solution(4) • 监控  Fusion-IO(fio-status): – Logical bytes written:逻辑写 – Logical bytes read :逻辑读 – Physical bytes written:物理写 – Physical bytes read:物理读  Flashcache(dmsetup status): – read hit percent:读命中 – write hit percent:写命中

Editor's Notes

  1. #include <iostream> #include <cstdlib> #include <time.h> #include <math.h> #define MAXN 2000000000 using namespace std; //计时器 class Timer { public : //构造函数 Timer (); //析构函数 ~Timer (); //开始计时 void begin(); //计时结束 void end(); //获取时间 float get_time(); private : clock_t start, finish; float time; }; Timer::Timer () { start = 0; finish = 0; } Timer::~Timer () { start = 0; finish = 0; } void Timer::begin () { start = clock(); } void Timer::end () { finish = clock(); } float Timer::get_time() { time = (float)(finish-start)/CLOCKS_PER_SEC; return time; } float pi(int n) { float s=0; float a; for(int i=1;i<=n;++i) { if(i%2==0) { a = 1.0/(2*i-1); s -= a; } else { a = 1.0/(2*i-1); s += a; } } s *= 4; return s; }; float sqrt1 (int n) { float a = 0; for (int i=1; i<=n; ++i) { /*if (i%2 == 0) { a += 1/sqrt(i); } else { a -= 1/sqrt(i); }*/ a += 1/sqrt(i); } return a; } float sqrt2 (float x) { float xhalf = 0.5f*x; int i = *(int*)&x; // get bits for floating VALUE i = 0x5f375a86- (i>>1); // gives initial guess y0 x = *(float*)&i; // convert bits BACK to float x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy return x; } float sqrt3 (int n) { float a = 0; for (int i=1; i<=n; ++i) { /*if (i%2 == 0) { a += sqrt2((float)i); } else { a -= sqrt2((float)i); }*/ a += sqrt2((float)i); } return a; } int main() { Timer timer; timer.begin (); float p = pi(MAXN); timer.end (); cout<<"1.PI Test(NULL):"<<timer.get_time()<<endl; timer.begin (); cout<<"\n2.PI="<<pi(MAXN)<<endl; timer.end (); cout<<"2.PI Test:"<<timer.get_time()<<endl; timer.begin (); sqrt1(MAXN); timer.end (); cout<<"\n3.system sqrt Test(NULL):"<<timer.get_time()<<endl; timer.begin (); cout<<"\n4.sqrt1="<<sqrt1(MAXN)<<endl; timer.end (); cout<<"4.system sqrt Test:"<<timer.get_time()<<endl; timer.begin (); float s = sqrt3(MAXN); timer.end (); cout<<"\n5.newton sqrt Test(NULL):"<<timer.get_time()<<endl; timer.begin (); cout<<"\n6.sqrt2="<<sqrt3(MAXN)<<endl; timer.end (); cout<<"6.newton sqrt Test:"<<timer.get_time()<<endl; return 0; }
  2. GCC编译参数:CC=gcc \ CXX=gcc \ CHOST="x86_64-pc-linux-gnu" \ CFLAGS=" -O3 \ -fomit-frame-pointer \ -pipe \ -march=nocona \ -mfpmath=sse \ -m128bit-long-double \ -mmmx \ -msse \ -msse2 \ -maccumulate-outgoing-args \ -m64 \ -ftree-loop-linear \ -fprefetch-loop-arrays \ -freg-struct-return \ -fgcse-sm \ -fgcse-las \ -frename-registers \ -fforce-addr \ -fivopts \ -ftree-vectorize \ -ftracer \ -frename-registers \ -minline-all-stringops \ -fno-exceptions \ -fno-rtti \ -fbranch-target-load-optimize2 \ -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free " \ CXXFLAGS="${CFLAGS}" \ LDFLAGS=" -ltcmalloc_minimal -lstdc++ " \ ./configure \ --with-server-suffix=-alibaba-edition \ --with-mysqld-user=mysql \ --with-plugins=heap,innodb_plugin,myisam,partition \ --with-charset=utf8 \ --with-collation=utf8_general_ci \ --with-extra-charsets=gbk,utf8,ascii \ --with-big-tables \ --with-fast-mutexes \ --with-zlib-dir=bundled \ --with-readline \ --with-pthread \ --enable-assembler \ --enable-profiling \ --enable-local-infile \ --enable-thread-safe-client \ --with-mysqld-ldflags=-all-static \ --without-embedded-server \ --without-query-cache \ --without-geometry \ --without-debug \ --without-ndb-binlog \ --without-ndb-debug ICC参数: CC=icc \ CXX=icpc \ LD=xild \ AR=xiar \ CFLAGS="-O3 -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -unroll2 -ip -fp-model fast=1 -restrict -fno-exceptions -fno-rtti -no-prec-div -fno-implicit-templates -static-intel -static-libgcc -static -xSSE2 -axSSE2 " \ CXXFLAGS="${CFLAGS}" \ CPPFLAGS=" -I/usr/alibaba/icc/include " \ LDFLAGS=" -L/usr/alibaba/icc/lib/intel64/ -lrt -ltcmalloc_minimal -lstdc++ " \ ./configure \ --with-server-suffix=-alibaba-edition \ --with-mysqld-user=mysql \ --with-plugins=heap,innodb_plugin,myisam,partition \ --with-charset=utf8 \ --with-collation=utf8_general_ci \ --with-extra-charsets=gbk,utf8,ascii \ --with-big-tables \ --with-fast-mutexes \ --with-zlib-dir=bundled \ --with-readline \ --with-pthread \ --enable-assembler \ --enable-profiling \ --enable-local-infile \ --enable-thread-safe-client \ --with-mysqld-ldflags=-all-static \ --without-embedded-server \ --without-query-cache \ --without-geometry \ --without-debug \ --without-ndb-binlog \ --without-ndb-debug
  3. 格式化参数: mkfs.xfs -f -i size=512,attr=2 -l size=128m,lazy-count=1 -d su=64k,sw=5 -L data /dev/sdb1 mount参数: /dev/sdb1 /data xfs defaults,noatime,nodiratime,noikeep,nobarrier,allocsize=8M,attr2,largeio,inode64,swalloc 0 0
  4. 测试场景为1G数据不断执行SELECT或GET操作同一条记录