慢日志的性能问题
- 造成 I/O 和 CPU 资源消耗:慢日志通常会扫描大量非目的的数据,自然就会造成 I/O 和 CPU 的资源消耗,影响到其他业务的正常使用,有可能因为单个慢 SQL 就能拖慢整个数据库的性能,而且这种慢 SQL,在实际业务场景下,通常都是程序发起数个 SQL 请求,通过 SHOW PROCESSLIST 命令可以捕捉到同时有 N 个类似的 SQL 请求在执行。
- 锁等待消耗:由于慢 SQL(select 查询)会阻塞 MDL 锁的获取,所以针对 XtraBackup 全量备份和针对表的 DDL 操作都有可能被阻塞,一旦 DDL 被阻塞,针对表的请求就会变成串行阻塞,后续业务也就无法执行。
- 锁申请消耗:对于非 select 查询的慢事务, SQL 还会把持锁不释放,让后续事务无法申请到锁,造成等待失败,对业务本身来讲是不可以接受的。
怎么收集慢日志?
ELK 体系分析慢日志
- MySQL 开启慢日志——>文件记录慢日志
- ELK 环境搭建
- MySQL 服务器安装 Filebeat 并进行 mysql-slow.log 过滤处理配置
- ELK-WEB 进行维度查看
Percona 分析慢日志
Percona 的 pt-query-digest 是一款可以针对 MySQL 慢日志进行定制化分析的工具
- MySQL 开启慢日志——>文件记录慢日志
- Percona 组件安装并编写 pt-query-digest 定时脚本
- 远程数据库进行定期删除保留<