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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 实体更新记录:如何捕获和记录字段变化到日志

方案一&#xff1a;粗糙但可用 var changes new List<string>();void CompareAndAddChange<T>(string propertyName, T oldValue, T newValue, Func<T, string> descriptionFunc null) {if (!EqualityComparer<T>.Default.Equals(oldValue, newVa…

分支定界法(Branch and Bound, 简称BB)是一种求解整数规划问题的有效算法。

分支定界法&#xff08;Branch and Bound&#xff09;详解与Python代码示例 分支定界法概述 分支定界法&#xff08;Branch and Bound, 简称B&B&#xff09;是一种求解整数规划问题的有效算法。它结合了搜索与迭代的思想&#xff0c;通过系统地枚举候选解来寻找最优解。在…

Java Web常见框架寻找路由技巧

在Java Web代码审计中&#xff0c;寻找和识别路由是很关键的部分。通过注册的路由可以找到当前应用对应的Controller&#xff0c;其作为MVC架构中的一个组件&#xff0c;可以说是每个用户交互的入口点。简单介绍下Java Web中常见框架&#xff08;Spring Web、Jersey&#xff09…

【SASS/SCSS(二)】模块化语法

目录 一、use 1、命名空间 2、私有变量 3、用with改变模块中的默认值 二、forward 1、给forward模块起别名&#xff0c;让成员加前缀 2、利用hide or show手动控制成员的可访问性 三、import 1、不存在命名空间&#xff0c;成员变量在import之后直接公开 2、可以在嵌…

springboot防止重复提交的方案有哪些

在Spring Boot中&#xff0c;防止接口或表单重复提交有多种策略&#xff0c;以下是几种常见且有效的方案&#xff1a; 前端控制&#xff1a; 禁用提交按钮&#xff1a;在表单提交后&#xff0c;使用JavaScript立即禁用提交按钮&#xff0c;防止用户再次点击。响应式提示&#x…

十、Java集合 ★ ✔(模块18-20)【泛型、通配符、List、Set、TreeSet、自然排序和比较器排序、Collections、可变参数、Map】

day05 泛型,数据结构,List,Set 今日目标 泛型使用 数据结构 List Set 1 泛型 1.1 泛型的介绍 ★ 泛型是一种类型参数&#xff0c;专门用来保存类型用的 最早接触泛型是在ArrayList&#xff0c;这个E就是所谓的泛型了。使用ArrayList时&#xff0c;只要给E指定某一个类型…

讲真,现在留给2024年下半年软考的时间还够吗?

常识是个好东西&#xff0c;但是有时候却容易蒙蔽咱们的双眼&#xff0c;就拿下半年软考而言&#xff0c;看起来现在才7月份&#xff0c;刚刚入伏&#xff0c;考试要到11月份&#xff0c;是冬天呢&#xff0c;中间还隔了一个完整的秋季&#xff0c;常识感觉还很遥远&#xff0c…

【Vue3】4个比较重要的设计模式!!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 在我投身于前端开发的职业生涯期间,曾有一次承接了一个大型项目的维护工作。此项目运用的是 Vue 框架,然而其代码结构紊乱不堪,可维护性极度糟糕😫。 这使我深刻领会到,理解并运用 Vue 中的重要设计模式是何等关键! …

对LinkedList ,单链表和双链表的理解

一.ArrayList的缺陷 二.链表 三.链表部分相关oj面试题 四.LinkedList的模拟实现 五.LinkedList的使用 六.ArrayList和LinkedList的区别 一.ArrayList的缺陷: 1. ArrayList底层使用 数组 来存储元素&#xff0c;如果不熟悉可以来再看看&#xff1a; ArrayList与顺序表-CSDN…

一些常见的网络故障

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…

【数据分析】Python数据分析实战:从零开始构建数据管道

Python数据分析实战&#xff1a;从零开始构建数据管道 引言一、数据获取二、数据清洗三、数据分析四、数据可视化五、案例研究&#xff1a;预测股票价格结论 我尝试访问您所提供的链接&#xff0c;但似乎该链接指向的内容已失效或被移除&#xff0c;因此无法直接获取并阅读该文…

【iOS】——ARC源码探究

一、ARC介绍 ARC的全称Auto Reference Counting. 也就是自动引用计数。使用MRC时开发者不得不花大量的时间在内存管理上&#xff0c;并且容易出现内存泄漏或者release一个已被释放的对象&#xff0c;导致crash。后来&#xff0c;Apple引入了ARC。使用ARC&#xff0c;开发者不再…

BUUCTF逆向wp [HDCTF2019]Maze

第一步 查壳&#xff0c;本题是32位&#xff0c;有壳&#xff0c;进行脱壳。 第二步 这里的 jnz 指令会实现一个跳转&#xff0c;并且下面的0EC85D78Bh被标红了&#xff0c;应该是一个不存在的地址&#xff0c;这些东西就会导致IDA无法正常反汇编出原始代码&#xff0c;也称…

中文科技核心论文发表

中文科技核心论文题目如下&#xff1a; 1.混凝土结构用纤维增强塑料筋的耐久性评述&#xff1a;适合建筑、结构、材料等专业 2.建筑工程用阻燃塑料的研究进展&#xff1a;适合建筑、材料专业 3.纤维增强热塑性塑料在面部护具中的应用研究&#xff1a;适合化工、医学、材料等专…

springcloud2021.x使用nacos做配置中心

spirngcloud2021.0.5使用nacos做配置中心遇到的问题 环境 jdk1.8&#xff0c;spring-boot 2.6.13&#xff0c;spring-cloud-alibaba 2021.0.5.0 &#xff0c;spring-cloud 2021.0.5 方案一 application.properties # Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts…

C++中的condition_variable:条件变量

理解 C 中的条件变量&#xff08;Condition Variable&#xff09; 在多线程编程中&#xff0c;我们常常需要一个线程等待某个条件的变化&#xff0c;比如等待数据的生成或某个标志位的设置。如果没有条件变量&#xff08;condition_variable&#xff09;&#xff0c;线程可能会…

启智畅想火车类集装箱号码识别技术,软硬件解决方案

集装箱号码识别需求&#xff1a; 实时检测车皮号、火车底盘号码、集装箱号码&#xff0c;根据火车类型分为以下三种情况&#xff1a; 1、纯车皮&#xff0c;只检测车皮号&#xff1b; 2、火车拉货箱&#xff08;半车皮&#xff09;&#xff0c;检测车皮号集装箱号码&#xff1b…

如何从0搭建一个Ai智体day01

&#x1f4da;《AI破局行动&#xff5c;AI智能体&#xff08;coze&#xff09;实战手册》&#xff1a; https://d16rg8unadx.feishu.cn/wiki/XQESwHW5HiPFlrkZbkqc0Xp7nEb 说明 这个是授权访问的&#xff0c;想学习加我 微信/ Github:** watchpoints &#x1f4fa;Day1-大圣直播…

玩转HarmonyOS NEXT之常用布局三

轮播&#xff08;Swiper&#xff09; Swiper组件提供滑动轮播显示的能力。Swiper本身是一个容器组件&#xff0c;当设置了多个子组件后&#xff0c;可以对这些子组件进行轮播显示。通常&#xff0c;在一些应用首页显示推荐的内容时&#xff0c;需要用到轮播显示的能力。 针对…

git开发流程

分支介绍 master - 主分支 所有提供给用户使用的正式版本&#xff0c;都在这个主分支上发布 开发者在此分支 不可进行 push 操作 dev - 开发分支 日常开发所使用的分支&#xff0c;开发者完成的阶段性功能模块将首先被合并到此分支 此分支亦是团队内部测试、阶段性工作验证…