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

存储架构 2018-03-07

前言:

前两天在朋友公司做了一次技术分享,算是有点收获吧,毕竟我在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

# 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.

对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!

{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用! 帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.

如果想 赏钱 ,可以用微信扫描下面的二维码. 另外再次标注博客原地址 xiaorui.cc…… 感谢!

您可能感兴趣的

数据库分表之Mybatis+Mysql实践(含部分关键代码)... 2018年01月31日 随着我们系统用户数量的日增,业务数据处于一个爆发前,增长的数据量已经给我们的系统造成了很大的不确定。在上个周末用户量较多,并发较大的情况下,读写频繁的验证码表,数据量达到几十万上百万的时候出现了锁表阻塞,导致用户登录验证失败,进而导致系统的一度反应较慢,甚至登录不上等问题...
MySQL事务隔离级别的实现原理 回顾 在MySQL的众多存储引擎中,只有InnoDB支持事务,所有这里说的事务隔离级别指的是InnoDB下的事务隔离级别。 读未提交:一个事务可以读取到另一个事务未提交的修改。这会带来脏读、幻读、不可重复读问题。(基本没用) 读已提交:一个事务只能读取另一个事务已经提交的修改。其...
MySQL Data Access API Development Using Express.JS... In this article, we are looking into the introduction of Node.JS and Express.JS and then, I am going to create a simple MySQL data access API using Ex...
Update MySQL Statement from CodeIgniter I'm having a problem with this query for some reason: $this->db->query("UPDATE schools SET name = '$name', pop = '$pop', details = '$details',...
What’s wrong with this mySQL Codeigniter que... I have two tables for storing information about a user. One is for authentication, the other is information the user will enter themselves. I am wr...