SlideShare a Scribd company logo
Mysql快速讲义
峰云就她了了
xiaorui.cc
about me
Name: 峰云就她了
Blog: xiaorui.cc
Github: github.com/rfyiamcool
Desc: 喜欢研究高性能服务端、数据库相关
LIST
01
02
03
04
Mysql Basic
Mysql集群
Mysql Ops
Mysql Optimize
01 基本选择
版本
Mysql >= 5.7
Percona # recommend
Mariadb
more …
引擎的选择
Myisam # 淘汰的玩意
Innodb # 优秀
Tokudb # ⾼压缩率
Myrocks # 基于lsm的rocksdb
表结构设计
innodb⼀定要有主键
主键最好整型, 并单调递增
将text/blob⼤对象独⽴存放
要注意字符集/ 校验集的⼀致性, 避免类型隐式转换
尽量不要使⽤外键
表使⽤规范
使⽤Not null, default ‘’
少⽤limit m, n取范围
多⽤limit, 减少检索及输出
避免 select *
避免使⽤ 存储过程
表使⽤规范
表的索引不要太多
表的字段不要太多
单表⾏数在1000w
索引基本规则
idx(a, b, c) HIT where a = x and b = x
idx(a, b, c) HIT where a > x
idx(a, b, c) Not HIT where b > x
idx(a, b, c) Not HIT where a > x and b = x
idx(a, b, c) Not HIT where a = x and c = x
索引基本规则
idx(sex)
没必要建⽴索引
显⽰ 和 隐式 join 性能与结果⼀致
from a,b vs from a inner join b on
索引⾼级规则
idx(a, b, c) HIT where a = x order by b
idx(a, b, c) HIT where a > x order by a
idx(a, b, c) HIT where a = x and b > x order by a
idx(a, b, c) Not HIT where a > x order by b
idx(a, b, c) HIT where a = x group by a, b
idx(a, b, c) Not HIT where a = x group by b
联表索引
驱动表
笛卡尔积
nested loop join
for each row in t1 matching range {
for each row in t2 matching refer key {
for each row in t3 {
if row satisfies join conditions,
send to client
}
}
}
联表查询
简单说, ⼩表驱动⼤表
右表的条件列⼀定要加上索引
显⽰ 和 隐式 join 性能与结果⼀致
from a, b vs from a inner join b on
Inner⾃动选择驱动表, left join 选择左⾯表.
关键
多⽤Explain
多看慢查询
优化器会随着数据量变⼤发⽣变化
explain
using index;
using where;
using where; using index;
using filesort;
using temporary;
High
Low
02 排查问题
事务锁
INFORMATION_SCHEMA.INNODB_TRX
INNODB_LOCKS
INNODB_LOCK_WAITS
通过三表信息能快速发现哪些事务在阻塞其他事务
慢查询
slow_query_log # 开关
slow_query_log_file # ⽇志路径
long_query_time # 超时时间
开启定义慢查询条件及开关
管理连接
show processlist; # 正在进⾏行行的sql语句句 .
Sleep
Sending data
Waiting for tables
more…
kill id;
杀掉某任务
03 Ops Mysql
修改表结构
阻塞
alter table xxxx
非阻塞
pecona/ pt-online-schema-change
触发器⽅案
github/ gh-ost
模拟主从协议
percona toolkit
pt-heartbeat
pt-table-checksum
pt-table-sync
pt-archiver
pt-kill
热备份
Mysqldump
⾮非⼀一致性备份
Mysqlpump
基于表并发
Percona XtraBackup
binlog2sql
1. binlog ⽇日志格式为 row
2. 找到相关的sql pos点
3. 导出回溯sql语句句
4. 导⼊入重写修改的数据
后悔药
04 Optimize Mysql
cmd
iostat -x 1
uptime
dstat
free -m
mpstat -p ALL
top
最重要 !!!
io
cpu
innodb
innodb_buffer_pool_size
innodb_log_file_size
innodb_log_buffer_size
innodb_flush_log_at_trx_commit
innodb_file_per_table
innodb_buffer_pool_instances
再提⾼
硬件
升级 SSD
升级 ⼤大内存
分布式
分库分表
中间件
system
⽂文件系统xfs/zfs
软中断
磁盘算法
05 mysql cluster
Master/Slave
Master
Slave
SlaveSlave
级联复制
HA
Master Slave
Master
Slave
Slave convert new Master !!!
mha ha
可靠 ?
slave replication
semi replication
semi replication +
主从切换的集群环境下:
不能保证消息的一致性
how ?
阿⾥里里⾃自研
腾讯⾃自研
京东⾃自研
各⼤大云⼚厂商⾃自研
more
通过paxos, raft来保证消息的一致性.
HA
keepalived multi master repl
heartbeat drdb
mysql galera
mha # recommend
mysql group replication # recommend
mgr
MasterMasterMaster
client client
中间件
Mycat # recommend
Kingshard
DBProxy
Cobar
More
Q & A

More Related Content

PDF
Golang 高性能实战
PPTX
cdn的那些事儿
PDF
Redis cluster那些事儿
PDF
Golang advance
PDF
聊聊我接触的集群管理
PDF
MongoDB at Qihoo 360
PDF
Java线上应用问题排查方法和工具(空望)
PDF
Ria的强力后盾:rest+海量存储
Golang 高性能实战
cdn的那些事儿
Redis cluster那些事儿
Golang advance
聊聊我接触的集群管理
MongoDB at Qihoo 360
Java线上应用问题排查方法和工具(空望)
Ria的强力后盾:rest+海量存储

What's hot (20)

PPTX
Java内存管理问题案例分享
PPTX
并发编程交流
PPTX
Sun jdk 1.6内存管理 -使用篇
PPT
Redis分享
PPT
C1000K高性能服务器构建技术
KEY
nodejs在微博前端开发中的应用
PPTX
线上问题排查交流
PPT
高性能并发Web服务器实现核心内幕
PPTX
Sun JDK 1.6内存管理 -调优篇
PPT
深入Docker的资源管理
PDF
百姓网如何优化网速-Qcon2011
PPTX
Redis介绍
PPTX
高性能的Java代码编写及常见问题排查
PPTX
Windbg入门
PPT
Lamp优化实践
PPTX
Java常见问题排查
PDF
Infiniflash benchmark
PPT
高性能并发网络服务器设计与实现
PPT
Redis 常见使用模式分析
PPTX
HBase@taobao for 技术沙龙
Java内存管理问题案例分享
并发编程交流
Sun jdk 1.6内存管理 -使用篇
Redis分享
C1000K高性能服务器构建技术
nodejs在微博前端开发中的应用
线上问题排查交流
高性能并发Web服务器实现核心内幕
Sun JDK 1.6内存管理 -调优篇
深入Docker的资源管理
百姓网如何优化网速-Qcon2011
Redis介绍
高性能的Java代码编写及常见问题排查
Windbg入门
Lamp优化实践
Java常见问题排查
Infiniflash benchmark
高性能并发网络服务器设计与实现
Redis 常见使用模式分析
HBase@taobao for 技术沙龙
Ad

Similar to Mysql fast share (20)

PDF
Mysql数据库开发的三十六条军规 石展_完整
PDF
My sql数据库开发的三十六条军规
PDF
MySQL数据库开发的三十六条军规
PPT
Optimzing mysql
PPSX
Mysql遇到的一些问题
PDF
Sql调优clustering factor影响数据删除速度一例
PPTX
基于Innodb开发的最佳实践
PPT
Sql Server 高级技巧系列之三整体优化
PDF
百度分布式数据实践与进展
PPT
Mysql introduction-and-performance-optimization
PDF
2011 06-12-lamp-mysql-顾春江
PDF
2011 06-12-lamp-mysql
PPT
Tokyo Cabinet
PPT
Tokyo Cabinet Key Value数据库及其扩展应用
PDF
MySQL运维那些事
PDF
Build 1 trillion warehouse based on carbon data
PPTX
Avm2虚拟机浅析与as3性能优化
PPTX
N-layer design & development
PPT
PHP Coding Standard and 50+ Programming Skills
Mysql数据库开发的三十六条军规 石展_完整
My sql数据库开发的三十六条军规
MySQL数据库开发的三十六条军规
Optimzing mysql
Mysql遇到的一些问题
Sql调优clustering factor影响数据删除速度一例
基于Innodb开发的最佳实践
Sql Server 高级技巧系列之三整体优化
百度分布式数据实践与进展
Mysql introduction-and-performance-optimization
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql
Tokyo Cabinet
Tokyo Cabinet Key Value数据库及其扩展应用
MySQL运维那些事
Build 1 trillion warehouse based on carbon data
Avm2虚拟机浅析与as3性能优化
N-layer design & development
PHP Coding Standard and 50+ Programming Skills
Ad

More from rfyiamcool (9)

PDF
python高级内存管理
PDF
Micro service
PPTX
分析mysql acid 设计实现
PPTX
Raft
PPTX
大话redis设计实现
PPTX
python gil
PPTX
async io frame
PDF
异步io框架的实现
PPTX
美妙的多进程管理
python高级内存管理
Micro service
分析mysql acid 设计实现
Raft
大话redis设计实现
python gil
async io frame
异步io框架的实现
美妙的多进程管理

Mysql fast share