文章插图
3.2 慢SQL3.2.1 问题出现应用TPS下降 , 并出现SQL执行超时异常或者出现了类似如下的告警信息 , 则常常意味着出现了慢SQL 。
文章插图
3.2.2 问题分析分析执行计划:利用explain指令获得该SQL语句的执行计划 , 根据该执行计划 , 可能有两种场景 。
SQL不走索引或扫描行数过多等致使执行时长过长 。
SQL没问题 , 只是因为事务并发导致等待锁 , 致使执行时长过长 。
3.2.3 场景一3.2.3.1 优化SQL通过增加索引 , 调整SQL语句的方式优化执行时长 , 例如下的执行计划:
文章插图
该SQL的执行计划的type为ALL , 同时根据以下type语义 , 可知无索引的全表查询 , 故可为其检索列增加索引进而解决 。
文章插图
3.2.4 场景二3.2.4.1 查询当前事务情况可以通过查看如下3张表做相应的处理:
-- 当前运行的所有事务select *from information_schema.innodb_trx;-- 当前出现的锁SELECT * FROM information_schema.INNODB_LOCKS;-- 锁等待的对应关系select *from information_schema.INNODB_LOCK_WAITS;
(1)查看当前的事务有哪些:文章插图
(2)查看事务锁类型索引的详细信息:
文章插图
lock_table字段能看到被锁的索引的表名 , lock_mode可以看到锁类型是X锁,lock_type可以看到是行锁record 。
3.2.4.2 分析根据事务情况 , 得到表信息 , 和相关的事务时序信息:
DROP TABLE IF EXISTS `emp`;CREATE TABLE `emp` (`id` int(11) NOT NULL AUTO_INCREMENT,`salary` int(10) DEFAULT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idx_name` (`name`(191)) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
A事物锁住一条记录 , 不提交 , B事物需要更新此条记录 , 此时会阻塞 , 如下图是执行顺序:文章插图
3.2.4.3 解决方案(1)修改方案
由前一步的结果,分析事务间加锁时序 , 例如可以通过tx_query字段得知被阻塞的事务SQL,trx_state得知事务状态等 , 找到对应代码逻辑 , 进行优化修改 。
(2)临时修改方案
trx_mysql_thread_id是对应的事务sessionId , 可以通过以下命令杀死长时间执行的事务 , 从而避免阻塞其他事务执行 。
kill 105853
3.3 连接数过多3.3.1 问题出现常出现too many connections异常,数据库连接到达最大连接数 。3.3.2 解决方案解决方案:
通过set global max_connections=XXX增大最大连接数 。
先利用show processlist获取连接信息 , 然后利用kill杀死过多的连 。
常用脚本如下:
排序数据库连接的数目 mysql -h127.0.0.0.1 -uabc_test -pXXXXX -P3306 -A -e 'show processlist'| awk '{print $4}'|sort|uniq -c|sort -rn|head -10
3.4 相关知识3.4.1 索引3.4.1.1 MySql不同的存储引擎文章插图
3.4.1.2 InnoDB B+Tree索引实现主键索引(聚集索引):
- 叶子节点data域保存了完整的数据的地址 。
- 主键与数据全部存储在一颗树上 。
- Root节点常驻内存 。
- 每个非叶子节点一个innodb_page_size大小,加速磁盘IO 。
- 磁盘的I/O要比内存慢几百倍 , 而磁盘慢的原因在于机械设备寻找磁道慢 , 因此采用磁盘预读 , 每次读取一个磁盘页(page:计算机管理存储器的逻辑块-通常为4k)的整倍数 。
- 如果没有主键,MySQL默认生成隐含字段作为主键 , 这个字段长度为6个字节 , 类型为长整形 。
- 辅助索引结构与主索引相同,但叶子节点data域保存的是主键指针 。
- InnoDB以表空间Tablespace(idb文件)结构进行组织 , 每个Tablespace 包含多个Segment段 。
推荐阅读
- IPSec VPN中如何传输动态路由协议?理论知识分析实现原理
- 如何将多个网页合并成一个PDF文件
- 辨别普洱茶的品质好坏,如何辨别黄山毛峰的好坏
- 白毛尖如何冲泡,沩山白毛尖介绍
- 阴阳师阎魔的御魂应该如何选择
- gta5仿线上mod 圣安地列斯模仿gta5的mod包
- 六安瓜片如何存放,六安瓜片的味道口感和品茗技巧
- 如何正确穿戴防护用品 运动护具有哪些
- 旧房子贴墙纸怎么翻新 旧墙纸如何翻新最省事
- 详解飞书新功能,如何让开发者“爽”起来?