探秘MySQL——排查与调优
文章目录
- 一、问题排查一:SQL执行出错
- 二、问题排查二:慢查询
- 0.几个重要参数
- 1.配置慢查询日志
- 命令行配置(重启失效)
- 修改配置文件(永久生效)
- 2.查看慢查询日志
- 3.问题排查1:Look_time耗时
- 4.问题排查2:索引
- 5.问题排查3:拆解复杂SQL
- 三、常见优化问题
- Q1.解决大SQL文件无法导入的问题
- Q2.大量执行update语句的优化
- Q3.分页的实现及优化
- Q4.回表查询优化
- 参考
一、问题排查一:SQL执行出错
使用工具: Navicat for MySQL
当执行了一条错误的SQL语句,会显示错误信息,包含了错误码、错误详情。
错误详情中会显示出错的原因和具体位置,方便我们进行位置的定位和排查。
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from admin' at line 1
一般来说,根据错误详情就能直接判断出错原因,但有时候,可能会出现一些我们从来没遇到过的问题,此时,借助互联网,对问题进行一个检索,并且还要甄别网络上提供的解决方式是否靠谱,可以多多尝试。
二、问题排查二:慢查询
使用工具: 慢查询日志
0.几个重要参数
# 是否开启慢查询日志,默认OFF,开启则设置为 ON
slow_query_log # 慢查询日志文件存储位置
slow_query_log_file # 是否把没有使用到索引的SQL记录到日志中,默认OFF,开启则设置为 ON
log_queries_not_using_indexes # 超过多少秒的查询才会记录到日志中,注意单位是秒
long_query_time
1.配置慢查询日志
命令行配置(重启失效)
在数据库中执行以下语句:
SET GLOBAL slow_query_log_file = 'D:/setup/mysql8.0.27/log/slow.log';
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL log_queries_not_using_indexes = 'ON';
SET GLOBAL long_query_time = 0.001;
通过查询看看是否配置成功:
SELECT @@global.slow_query_log_file;
修改配置文件(永久生效)
【先留个坑在这】
2.查看慢查询日志
打开慢查询日志,查看里面的一条记录:
# Time: 2023-03-12T09:32:24.818300Z
# User@Host: root[root] @ localhost [::1] Id: 11
# Query_time: 0.003975 Lock_time: 0.000116 Rows_sent: 393 Rows_examined: 786
SET timestamp=1678613544;
select * from text
order by application_no;
- 可以看到以下信息:
查询用户User
查询耗费时间Query_time
锁等待时间Lock_time
结果集行数Rows_sent
累积扫描行数Rows_examined
具体的SQL语句
这些信息可以协助我们排查慢查询问题。
3.问题排查1:Look_time耗时
Look_time耗时反映了事务的并发性能,如果慢查询日志中出现了很多这样的记录,说明是事务的并发性能出现了问题。
- 执行命令查询MySQL整体的锁状态:
show status like 'innodb_row_lock_%';
如果查询出来的值比较大,就意味着你当前MySQL服务器承载的并发压力过高,此时就急需进行系统的高并发优化。
4.问题排查2:索引
如果不是事务并发问题,那么很有可能是SQL本身有问题,比如可能是索引方面需要优化。
这个问题参考我的另一篇博客:这里
5.问题排查3:拆解复杂SQL
如果一条复杂的SQL出现效率问题,为了准确地定位问题所在,可以采取分解SQL子句的方式进行问题排查。
- 用explain检查每个SQL子句,初步定位问题;
- SQL子句逐条合并,每合并一次用explain检查一次。
三、常见优化问题
Q1.解决大SQL文件无法导入的问题
修改max_allowed_packet参数设置,可以通过命令行设置,也可以通过修改配置文件设置,二者的生效时间不同。
Q2.大量执行update语句的优化
优化方向:减少commit次数,每次commit会产生两次磁盘同步(写redo log和写bin log)
- 优化1:拼接多个update语句为一条语句
通过case when可以从一定程度上将update语句合并成一句。语句的减少会导致commit次数减少。 - 优化2:尽可能地把多个update语句放在一个事务中
一个事务仅commit一次。
Q3.分页的实现及优化
需求:某一页需要查询的记录为表中的第300-350条数据。
优化思路:聚集索引
- 使用limit:
explain select * from text limit 300,350;
用explain分析一下,会发现,type=all表示全表扫描。效率贼低。
- 走聚集索引:
explain select * from text where id>300 limit 50;
type=range表示只检索给定范围的行,因为加入了where子句,其中使用了主键,导致走了聚集索引,效率有所提升。
- 放弃limit,全部依靠聚集索引:
explain select * from text where id>300 and id<=350;
这种实现方式有一个问题就是,由于被删除了一部分记录,导致自增主键不连续,这时候就会出现页与页间有记录重叠的情况。
Q4.回表查询优化
优化思路:联合索引、索引覆盖
看下面一个语句:
explain SELECT date FROM text where application_no>'EP2567834';
在没有设置联合索引的时候,好家伙,直接全表扫描。
- 设置非聚集索引再执行:
ALTER TABLE text ADD INDEX(`application_no`);
可以用非聚集索引,为啥没用呢?因为 要回表查询 啊,比全表扫描还慢,要这索引有何用?
- 添加联合索引,成功解决回表问题:
ALTER TABLE text ADD INDEX union_index(application_no,date);
这次终于命中了,既不用全表扫描,也不用回表查询,嘿嘿。
参考
博客
慢查询
mysql配置文件
博客
update优化
分页优化
相关文章:

探秘MySQL——排查与调优
文章目录一、问题排查一:SQL执行出错二、问题排查二:慢查询0.几个重要参数1.配置慢查询日志命令行配置(重启失效)修改配置文件(永久生效)2.查看慢查询日志3.问题排查1:Look_time耗时4.问题排查2…...

【9.数据页结构】
概述 InnoDB 的数据是按「数据页」为单位来读写的,也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位,将其整体读入内存。数据库的 I/O 操作的最小单位是页,InnoDB 数据页…...

演唱会总是抢不到票?教你用Python制作一个自动抢票脚本
人生苦短 我用python 这个大家应该都知道吧? 是中国综合类现场娱乐票务营销平台, 业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域。 如何快速抢票? 那么, 今天带大家用Python来制作一个自动抢票的脚本小程序 本文源码python安…...

【系统开发】WebSocket + SpringBoot + Vue 搭建简易网页聊天室
文章目录一、数据库搭建二、后端搭建2.1 引入关键依赖2.2 WebSocket配置类2.3 配置跨域2.4 发送消息的控制类三、前端搭建3.1 自定义文件websocket.js3.2 main.js中全局引入websocket3.3 App.vue中声明websocket对象3.4 聊天室界面.vue3.5 最终效果一、数据库搭建 很简单的一个…...

Learning C++ No.14【STL No.4】
引言: 北京时间:2023/3/9/12:58,下午两点有课,现在先把引言给搞定,这样就能激励我更早的把这篇博客给写完了,万事开头难这句话还是很有道理的,刚好利用现在昏昏欲睡的时候,把这个没…...
高速PCB设计指南(八)
七、产品内部的电磁兼容性设计 1 印刷电路板设计中的电磁兼容性 1.1 印刷线路板中的公共阻抗耦合问题 数字地与模拟地分开,地线加宽。 1.2 印刷线路板的布局 ※对高速、中速和低速混用时,注意不同的布局区域。 ※对低模拟电路和数字逻辑要分离。…...

什么是腾讯云关系型数据库(MySQL/SQL Server/MariaDB/PostgreSQL详解)
什么是腾讯云关系型数据库?腾讯云关系型数据库提供 MySQL、SQL Server、MariaDB、PostgreSQL详细介绍。腾讯云关系型数据库让您在云中轻松部署、管理和扩展的关系型数据库,提供安全可靠、伸缩灵活的按需云数据库服务。腾讯云关系型数据库提供 MySQL、SQL…...
进程通信相关概念
一、概念 1.1 通信方式有哪些 管道:水管,男纸条放入水管,女看了拿走不回复 消息队列:大盒子,男放入纸条,女看了不拿走,男女都可放 共享内存:直接桌子,男放桌上&#…...

05.Java的运算符
1.运算符计算机的最基本的用途之一就是执行数学运算,比如:int a 10;int b 20;a b;a < b;上述 和 < 等就是运算符,即:对操作数进行操作时的符号,不同运算符操作的含义不同。作为一门计算机语言,Ja…...

轮转数组(力扣189)
轮转数组 题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7…...

主流的“对象转换工具”使用示例大全以及性能的对比
目录 前言 源码地址 代码示例 引入依赖 先定两个实体用于转换 定义一个接口让所有转换器都集成 Apache BeanUtils BeanCopier bean-mapping bean-mapping-asm Dozer 自己写get/set JMapper json2json MapStruct(推荐) ModelMapper OriK…...

分享10个不错的C语言开源项目
今天跟大家分享10个重量级的C语言开源项目,C语言确实经得住考验: Redis:Redis是一个开源的高性能的键值对数据库。它以C语言编写,具有极高的性能和可靠性。 Nginx:Nginx是一个高性能的HTTP和反向代理服务器࿰…...
【阅读笔记】JavaScript设计模式与开发实践2--闭包与单例、策略模式
目录闭包与高阶函数Function 扩展函数柯里化函数单例模式透明的单例模式惰性单例策略模式策略模式发展策略模式实现闭包与高阶函数 Array.prototype.sort 接受一个函数当作参数,用户可以自行在该函数内指定排序方式 // 由小到大排序 let res [1, 4, 2].sort((a, …...

设计模式(二十)----行为型模式之责任链模式
1、概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同…...

数据持久化层--冷热分离
业务场景 有一个系统的主要功能是这样的:它会对接客户的邮件服务器,自动收取发到几个特定客服邮箱的邮件,每收到一封客服邮件,就自动生成一个工单。之后系统就会根据一些规则将工单分派给不同的客服专员处理。 这家媒体集团客户两年多产生了近2000万的工单,工单的操作记…...

Ubuntu16.04系统 VSCode中python开发插件的安装
VSCode中python开发插件的安装 1. python python插件提供了代码分析,高亮,规范化等很多基本功能 2. Python for vscode 3. Python Preview 实时可视化你的代码结果。如果你Leedcode等题时,可以安装这个插件。能为VSCode切换各种主题皮肤…...
buuctf-pwn write-ups (12)
文章目录buu093-wustctf2020_easyfastbuu094-ciscn_2019_es_1buu095-wdb2018_guessbuu096-gyctf_2020_some_thing_excetingbuu097-axb_2019_heapbuu098-oneshot_tjctf_2016buu099-护网杯_2018_gettingstartbuu100-wustctf2020_number_gamebuu101-zctf2016_note2buu093-wustctf2…...

Linux- 系统随你玩之--网络上的黑客帝国
文章目录1、前言2、TCPDump介绍2.1、问题来了: 所有用户都可以采用该命令吗?2.2、抓包原理2.3、特点2.3.1、参数化支持2.2.2、 TCP功能3、 服务器安装Tcpdump3.1、安装3.2、检查安装是否正常。4、tcpdump 命令4.1、常用功能选项4.2、输出内容5、实操5.1、…...

Python每日一练(20230312)
目录 1. 提示用户输入的简单菜单 ★ 2. 字母异位词分组 ★★ 3. 俄罗斯套娃信封问题 ★★★ 🌟 每日一练刷题专栏 C/C 每日一练 专栏 Python 每日一练 专栏 1. 提示用户输入的简单菜单 如果用户选择菜单选项1,提示用户输入1到10之间的整数&a…...

人生又有几个四年
机缘 不知不觉,已经来 csdn 创作四周年啦~ 我是在刚工作不到一年的时候接触 csdn 的,当时在学习 node,对 node 的文件相关的几个 api 总是搞混,本来还想着在传统的纸质笔记本上记一下,但是想想我大学记了好久的笔记本…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...