当前位置: 首页 > news >正文

MySQL数据库慢查询日志、SQL分析、数据库诊断

1 数据库调优维度

在这里插入图片描述

  • 业务需求:勇敢地对不合理的需求说不
  • 系统架构:做架构设计的时候,应充分考虑业务的实际情况,考虑好数据库的各种选择(读写分离?高可用?实例个数?分库分表?用什么数据库?)
  • SQL及索引:根据需求编写良好的SQL,并去创建足够高效的索引
  • 表结构:设计良好的表结构
  • 数据库参数设置:设置合理的数据库性能参数(join buffer、sort buffer…)
  • 系统配置:操作系统提供了各种资源使用策略,设置合理的配置,以便于数据库充分利用资源(swap应尽可能小 -> swappiness)
  • 硬件:SSD or 机械硬盘

2 查询日志

2.1 所有SQL执行日志

-- 开启查看所有查询日志,使用后立即关闭
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log = 'OFF';
-- 查看慢查询日志路径
show variables like '%general_log%';

2.2 慢查询日志

2.2.1 开启日志

  • 方式一:修改配置文件my.cnf,在[mysqld]段落中加入如上参数开启,需要重启MySQL
# 开启慢查询日志
[mysqld]
slow_query_log = ON
log_output = 'FILE,TABLE'
long_query_time = 2
# 重启MySQL
service mysqld restart
  • 方式二:通过全局变量设置,这种方式无需重启即可生效,但一旦重启,配置又会丢失
# 开启慢查询日志
set global slow_query_log = 'ON';
# 修改多慢算慢查询的定义long_query_time,需要切换session才能生效
set global long_query_time = 2;
# 将慢查询日志同时记录到文件以及mysql.slow_log表中
set global log_output = 'FILE,TABLE';

2.2.1 查看与分析慢查询日志

-- 查看TABLE中的记录
select * from mysql.slow_log;
-- 查看slow FILE文件,查看slow file路径,然后查看文本文件
show variables like '%slow_query_log_file%';
# 分析慢查询日志文件工具:mysqldumpslow
mysqldumpslow -s r -t 10 -a /var/lib/mysql/node3-26-slow.log
# 分析慢查询日志文件工具:pt-query-digest
pt-query-digest mysql-slow-2022-01-07.log > 0107.report

pt-query-digest工具官网

3 SQL性能分析

  • EXPLAIN:id越大越先执行,相同的id则上面的先执行,可视化分析可以使用:IDEA:Explain plan,MysqlWorkBench,show warnings; 用于展示分析结果
  • SHOW PROFILE: 简单、方便,已废弃
  • INFORMATION_SCHEMA.PROFILING: 和SHOW PROFILE本质一样
  • PERFORMANCE_SCHEMA: 未来之光,但目前来说使用不够方便
  • OPTIMIZER_TRACE:跟踪优化器做出的各种决策、了解优化器的执行细节、理解SQL的执行过程,进而优化SQL

4 数据库诊断

-- 查看当前正在运行的进程列表
SHOW FULL PROCESSLIST;
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;-- 按照客户端IP分组,看哪个客户端的连接数最多
select client_ip, count(client_ip) as client_num from (select substring_index ( host, ':', 1 ) as client_ip from information_schema.processlist) as connect_info group by client_ip order by client_num desc;
-- 查看正在执行的线程,并按time倒排序,看看有没有执行时间特别长的线程
select * from information_schema.processlist where command != 'sleep' order by Time desc limit 10\G
-- 找出所有执行时间超过5分钟的线程,拼凑出kill语句,方便后面查杀
select concat ('kill', id, ';') from information_schema.processlist where Command != 'Sleep' and Time > 300 order by Time desc;-- 查看状态
SHOW STATUS;show global status like '%slow%';
SHOW VARIABLES;SHOW VARIABLES like '%%';
SHOW TABLE STATUS;
SHOW INDEX FROM EMPLOYEES;
SHOW ENGINE INNODB STATUS\G
SHOW MASTER STATUS;
SHOW SLAVE STATUS;

相关文章:

  • 1.厦门面试
  • 学习Python的IDE功能--(一)入门导览
  • uniapp小程序上传pdf文件
  • 好玩的调度技术-场景编辑器
  • Linux内核编译安装 - Deepin,Debian系
  • llama-index,uncharted and llama2:7b run locally to generate Index
  • C语言从头学35——struct结构
  • Web开发:卡片翻转效果(HTML、CSS)
  • 文心一言:如何备考软考架构师
  • MySQL第一次作业
  • 数据库day2
  • 伪元素::before :: after的用法?
  • 微软GraphRAG +本地模型+Gradio 简单测试笔记
  • 【C#】Array和List
  • 深入解析公有IP与私有IP:地址分配与使用限制
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • canvas 五子棋游戏
  • ES6 ...操作符
  • ESLint简单操作
  • Golang-长连接-状态推送
  • LeetCode18.四数之和 JavaScript
  • LeetCode29.两数相除 JavaScript
  • node-glob通配符
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • 分布式事物理论与实践
  • 机器学习 vs. 深度学习
  • 离散点最小(凸)包围边界查找
  • 算法之不定期更新(一)(2018-04-12)
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 携程小程序初体验
  • 新版博客前端前瞻
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 《天龙八部3D》Unity技术方案揭秘
  • #laravel 通过手动安装依赖PHPExcel#
  • #LLM入门|Prompt#3.3_存储_Memory
  • #宝哥教你#查看jquery绑定的事件函数
  • $nextTick的使用场景介绍
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (js)循环条件满足时终止循环
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十八)SpringBoot之发送QQ邮件
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)原始图像数据和PDF中的图像数据
  • .htaccess配置重写url引擎
  • .net 4.0发布后不能正常显示图片问题
  • .NET 8.0 发布到 IIS
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .Net8 Blazor 尝鲜
  • .Net接口调试与案例