技术分享之《Mysql快速讲义》

前言:

      前两天在望京一朋友公司做了一次技术分享,算是有点收获吧。 先前我在16, 17年就在那边做过几次分享,因为是互相交流,所以大家彼此也都能学到些东西。这次过来捧场的还是那几个韩国人和老乡。韩国人能听懂?他们在中国很多年了,中国通. 

     长话短说,这次ppt已经整理出来了,有兴趣的朋友可以看看。 原来计划讲 Golang相关的设计实现,奈何这帮人对我上次讲的mysql acid实现记忆犹新,另外韩国那几个程序员对Golang普遍没兴致。这次主要讲解mysql相关的知识。 主要涉及到 研发人员在数据库中的各个选择,索引的使用, 日常维护, 提高数据库性能等。

     做分享很累的,原本在ppt梳理的都是比较简单的话题,但没想到一开讲搞了2小时。中间韩国人问的话题很有意思,mysql到底还能不能用在金融领域…. 



pdf 下载地址:  http://xiaorui.cc/mysql_fast.pdf

github pdf相关地址: https://github.com/rfyiamcool/share_ppt



更多ppt截图自己到github上看吧.

# xiaorui.cc

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

END.


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc