MySQL优化
树图思维导图提供 MySQL优化 在线思维导图免费制作,点击“编辑”按钮,可对 MySQL优化 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:4f2dd6e4ccf64bad0a38c46d384e5a9f
MySQL优化思维导图模板大纲
硬件太老
硬件我们这里主要从CPU,内存,磁盘三个方面来说下,还有一些因素比如网卡,机房网络等因为文章篇幅关系,就不一一介绍了,以后还有机会可以聊。 首先我们来看下MySQL对CPU的利用特点: 5.1可以利用4个核,5.5可以利用到24个核,5.6可以利用到64个核 比如MySQL5.6能用到48个CORE以上,跑得好的,64个CORE都能用到(48CORE-64CORE之间,官方公布48个CORE,我实际测试能跑到64个CORE)。 MySQL 5.6 可以用到48 core+ MySQL 5.1 前最多可以用到4个核 现在一般的生产环境服务器,都是32CORE以上。 所以我这里都推荐大家尽量得去用MySQL5.5或MySQL5.6, 除非你们公司的服务器一直用的很老旧的服务器,只有4个核,或1个核。 因为5.1以前(5.0一样)都是在内部代码里写死了,是基于innobase的存储引擎,数据库对硬件的利用率较差。 后面演进为了InnoDB引擎后,好了很多。
数据库设计不好
比如用了很多的数据库特性,像Trigger, 分区,非常多的存储过程、函数等等。 我们经常说什么,小而美,意思就是简单才是最好的。你把数据库的所有功能都用上了,数据库的性能自然就会被拖慢,可能碰到的BUG,底层故障的几率也就增加了。 所以大家要明白,一个好的数据库项目设计,是小而美,精而简的。另外,数据库也只是整体项目的一部分,像Trigger,存储过程这些能实现的,在整体项目里面肯定也可以用应用程序代码来完成。 所以,我们用MySQL,就是用它厉害的地方,比如:表、索引、事务这些,而不是要它所有的功能都得用上。 另外有一点,在MySQL5.6之前,生产环境的主库里面是不允许使用子查询的。 MySQL5.6之前子查询的性能特别差。(语法上是支持的,但SQL性能非常差)。 比如大家现在如果是用Oracle,想把Oracle迁移到MySQL上的话,建议大家用MySQL5.6版本,MySQL5.6对子查询的支持和性能上都做了较大的改善。 MySQL5.6跑子查询的性能会大大提高。
程序写太烂
要让应用使用数据库连接池,特别是像基于JAVA开发的大型高并发应用里,一定要使用连接池。 使用连接池的好处:就是可以限制应用的连接数,另外,不用再额外地去创建每个连接,MySQL创建连接的开销也是较大的,因为创建一个新连接相当于MySQL创建了一个thread。
复杂的SQL语句
无效逻辑
全表扫描
要分批更新
原因1. 上面说的,MySQL的一个query只能用到一个CORE。SQL事务太大,复杂度太高需要很久才能运行出来,容易造成拥堵。 原因2. 线上环境,MySQL一般都是Master/Slave架构,如果Master发生100W行的大更新事务,很可能造成SLAVE卡在那里,因为SLAVE是单线程结构,造成同步延迟。 MySQL写SQL,干成小事务SQL,快速执行,快速提交。让每个query完成得更快,让连接更快地释放出来。
字段类型
表字段个数
满足范式,适度冗余
普通索引
复合索引
前缀索引
主键索引
唯一索引
全文索引
适当冗余
水平分隔
垂直分隔
读写分离
调整最大并发数
调整缓存大小
MySQL服务器硬件升级
定时清除不需要的数据,定时时行碎片整理
优化慢查有三宝: pt-query-digest explain show profiling
树图思维导图提供 工艺流程图 在线思维导图免费制作,点击“编辑”按钮,可对 工艺流程图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:a8e31ea83041e28a9ece5f7d7121fc30
树图思维导图提供 10.15-付费推广 ·(十一)· 全站配合搜索节奏解析与引力魔方数据优化 在线思维导图免费制作,点击“编辑”按钮,可对 10.15-付费推广 ·(十一)· 全站配合搜索节奏解析与引力魔方数据优化 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:ca82ce4ec961ffd61f0a484a5c579820