mysql 性能排查
mysql 下常见遇到的问题有,mysql连接池耗尽,死锁、慢查、未提交的事务。等等我们可能需要看;我们想要查看的可能有
1.当前连接池连接了哪些客户端,进行了哪些操作
2.当前造成死锁的语句有哪些,是哪个客户端上的,我们如何杀掉结束掉这些连接?
3.我们当前的慢查询有哪些?执行了多少次?这些语句有没有记录下来?
4.如何查看是不是因为屋里内存、磁盘等原因导致mysql性能下降等?
一、查看mysql的物理性能
使用以下命令查看mysql进程 性能瓶颈排查 top/free/vmstat/sar/mpstat
查看mysqld进程的cpu消耗占比
确认mysql进程的cpu消耗是%user, 还是sys%高
确认是否是物理内存不够用了
确认是否有swap产生
使用下面工具查看
top (%cpu load %MMEM)free -gtvmstat -S m 1 (procs io cpu)sar -u 1 (%user)sar -d 1
查看mysql的物理连接池状态
show processlist; # 查询数据库的瞬时操作,查看当前连接运行的情况
show processlist

程序端一般采用线程池的hikriCP 、duriu等数据库线程池框架,在项目启动的时候就会连接上数据库,从这里我们也能看到数据库连接池线程连接行数据库的线程和每个线程的客户端的占用操作、是否有死锁等
各字段描述
- id:一个标识,kill一个语句的时候很有用 (如 kill 11)
- user:显示当前用户,如果不是root,这个命令就只显示你权限范围内的sql语句
- host:显示这个语句是从哪个端口上发出的,可用来追踪出问题语句的用户
- db:显示这个进程目前连接的是哪个数据库
- command:显示当前连接的执行命令,一般就是休眠(sleep),查询(query),连接(connect)
- time:这个状态持续的时间,单位是秒
- state(重要):显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,state只是语句执行中的某一个状态,一个SQL语句,已查询为例,可能需要经过copying to tmptable,sorting result, sending data等状态才可以完成;
状态为:sleeping,代表资源未释放
状态为:copying to tmptable on disk 临时表从内存存储转为磁盘存储,会导致大量的IO压力,频繁出现需要优化
状态为:locked 代表查询锁住了或有更新操作锁定(更新操作需要使用正确的索引)
状态为:sorting for group 正在处理select查询的记录,如果sending data连接过多,通常是某查询的影响结果集过大,需要优化
状态为:reading from net 如大量出现,迅速检查数据库到前端的网络状态和流量
info:显示这个SQL语句,因为长度有限,所以长的SQL语句就显示不全,但是一个判断问题语句的重要依据
status状态详解
status为 :sorting for group 的状态分析
长时间的Sending data从引擎层读取数据返回给server端
1.长时间存在的原因:
- 没有合适的索引 查询效率低下
- 读取大量数据 读取缓慢
- 系统负载高 读取缓慢
- 可能有长时间的没有提交的事务导致锁表等待
如何做:
- 1 加上合适的索引
- 2 改写sql
- 3 增加LIMIT限制每次读取量
- 4 检查&升级IO设备性能
status 长时间等待MDL锁 (waiting for table metadata lock) 分析
原因:
- DDL被阻塞 进而阻塞其他后续sql
- DDL之前的sql长时间未结束,这个表未释放锁
举例:
a.开启一个事务。未提交,这个时候fege表的id=1这行有一个排它锁。

START TRANSACTION; update t_goods set name = '李四' where id = 1
b.开启另外一个DDL事务,重新打开另外一个session连接

c.查看是什么事务进程id未释放,以及sql信息,打开另外一个mysql的session,
在事务没有完成之前,fege表上的锁不会释放,alter table同样获取不到metadata的独占锁。

d。找到未提交事物的sid,通过show processlist看不到Table上有任何操作,但实际上存在有未提交的事务,可以在 information_schema.innodb_trx或者performance_schema.events_statements_current中查看到。
select * from information_schema.innodb_trx


e. 执行 select * from performance_schema.events_statements_current\G; 可以看到当前未提交的sql信息
select * from performance_schema.events_statements_current


f 通过上面查看到未提交的THREAD_ID查看对应的进程id

g 通过查看:
select object_type,object_schema,object_name,lock_type,lock_duration,lock_status,owner_thread_id from performance_schema.metadata_locks;


#再次查看

如何做:
- 提高每条sql的效率
- kill掉长时间运行的sql
- 把DDL放在夜间低谷时段
- 采用pt-osc执行DDL
- 长时间的sleep
- 占用连接数
- 消耗内存未释放
可能有行锁(甚至是表锁未释放)
如何做: - 适当调低timeout
- 主动kill超时不活跃连接
- 定期检查锁、锁等待
- 可以利用pt-kill工具
其他状态 Copy to tmp table [on disk]
执行alter table修改表结构,需要生成临时表
建议放在夜间低谷进行, 或者用pt-osc
状态 Creating tmp table
常见于group by没有索引的情况
需要拷贝数据到临时表[内存/磁盘上]
执行计划中会出现Using temporary关键字
建议创建合适的索引,消除临时表
状态 Creating sort index
常见于order by没有索引的情况
需要进行filesort排序
执行计划中会出现Using filesort关键字
建议创建排序索引
其他排除方法
use information_schema; SELECT * from innodb_lock_waits;
show engine innodb status;
相关文章:
mysql 性能排查
mysql 下常见遇到的问题有,mysql连接池耗尽,死锁、慢查、未提交的事务。等等我们可能需要看;我们想要查看的可能有 1.当前连接池连接了哪些客户端,进行了哪些操作 2.当前造成死锁的语句有哪些,是哪个客户端上的&#x…...
SpringBoot+网易邮箱登录注册
文章目录 SpringBoot网易邮箱登录注册pom.xmlapplication.ymlsqlUserEmail.javaUserEmailMapper.javaUserEmailMapper.xmlEmailService.javaUserEmailService.javaUserEmailServiceImpl.javaUserEmailController.javaregister1.html 编写前参考 SpringBoot网易邮箱登录注册 po…...
SQL Server对象类型(7)——4.7.触发器(Trigger)
4.7. 触发器(Trigger) 4.7.1. 触发器概念 与Oracle中类似,SQL Server中,触发器是虚的、被定义的数据库代码对象,其本身并不存储数据,其通过数据库事件来自动触发预先定义的特定代码片段,以解决用户特定业务需求和完成特定任务。 4.7.2. 触发器注解 1)触发器的本质:…...
让@RefreshScope注解来帮助我们实现动态刷新
文章目录 前言举例作用参考文章总结 前言 在实际开发当中我们常常会看到有些类上会加一个注解:RefreshScope,有没有对应的小伙伴去思考过这个东西,这个注解有什么作用?为什么要加?下面我们就来看看这个 RefreshScope …...
c++ opencv使用drawKeypoints、line实现特征点的连线显示
前言 图像经过算子处理后得到若干特征点,使用opencv进行渲染显示出这些特征点并且连线,更直观的对比处理前后的一些差异性 demo核心代码 //画出特征点并连线 void drawFilterLinePoints(cv::Mat& srcMat, cv::Point2f pointStart, cv::Point2f po…...
Ruoyi-cloud / 若依 SpringCloud服务器部署
1、redis 环境 服务器安装redis ,注意 密码 端口 2、mysql 环境 服务器安装 mysql 5.7 以上的版本 代码中的sql 文件夹中有 sql 文件 创建数据库ry-cloud并导入数据脚本ry_2021xxxx.sql(必须),quartz.sql(可选&…...
Java面试题09
1.什么是反射? 反射是Java中的一种机制,允许在运行时获取类的信息、访问对象的属性和方法,以及调用 对象的方法,使得编程更加灵活,但也需要注意性能和安全问题。 在Java中,反射(Reflection&…...
Linux grep命令
目录 一. 前期准备二. 配置项2.1 -e 配置项2.2 -h 配置项 三. 正则表达式3.1 {} 或查询3.2 文件路径和查询关键词中均包含正则表达式 四. zgrep 一. 前期准备 ✅TEST-2023-07-11.txt MPLE0130 Exception 123 ExecTimeMPLE0190 ExecTime123 MPLE0150 TST 1234 ExecTime454 MPL…...
RPC之GRPC:什么是GRPC、GRPC的优缺点、GRPC使用场景
简介 gRPC是一个现代的开源高性能远程过程调用(RPC)框架,可以在任何环境中运行。它可以高效地连接数据中心内和跨数据中心的服务,支持负载平衡、跟踪、运行状况检查和身份验证。它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览…...
无人机光伏巡检代替人工,贵州电站运维升级
无人机光伏巡检如何做到降本增效?贵州省光伏电站有新招!某70MWp的光伏电站通过引入复亚智能无人机光伏巡检系统,专注于使用无人机对区域内的光伏面板进行自动巡航巡查,利用自动化巡检和故障识别技术,显著提升了光伏电站…...
【Q3——30min】
1、介绍一下数据库的三大范式 第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列) 第二范式(2NF):满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键&a…...
leetcode每日一题35
90. 子集 II 回溯嘛 子集啊排列组合啊棋盘啊都是回溯 回溯三部曲走起 跟78.子集比,本题给出的数组里存在重复元素了 所以在取元素时,如果同一层里取过某个元素,那么在该层就不能取重复的该元素了 如给出的数组[1,2,2] 可以在某一次递归中第一…...
第二十章——多线程
一.线程简介 线程的特点 1.进程是资源分配的最小单位,线程是最小的执行单位 2.一个进程可以有多个线程 3.线程共享进程资源 二.创建线程 1.继承Thread类 1.Thread类是java.lang包中的一个类,从这个类实例化的对象代表线程,程序员启动一个新…...
【FGPA】Verilog:JK 触发器 | D 触发器 | T 触发器 | D 触发器的实现
0x00 JK 触发器 JK 触发器是 RS 触发器和 T 触发器的组合,有两个输入端 J 和 K,如果两个输入端都等于 1,则将当前值反转。 行为表 状态图 Timing Diagram Circuit JK 触发器的设计目的是防止 RS 触发器在输入 S 和 R 均等于 …...
【人工智能】人工智能的技术研究与安全问题的深入讨论
前言 人工智能(Artificial Intelligence),英文缩写为AI。 它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是新一轮科技革命和产业变革的重要驱动力量。 📕作者简介&#x…...
苹果提醒事项怎么用?几个简单步骤就能学会!
苹果提醒事项可以帮助你轻松管理待办事项,让你更好地安排自己的时间和工作。但是,有些小伙伴可能对如何使用这个功能还有一些疑问。苹果提醒事项怎么用?不要担心,小编将为大家提供使用提醒事项的方法,帮助你学会如何使…...
<HarmonyOS第一课>从简单的页面开始 【课后考核】
判断题 在Column容器中的子组件默认是按照从上到下的垂直方向布局的,其主轴的方向是垂直方向,在Row容器中的组件默认是按照从左到右的水平方向布局的,其主轴的方向是水平方向。 正确(True)List容器可以沿水平方向排列,也可以沿垂…...
如何实现按需加载
如何实现按需加载 实现按需引入的步骤: ES6模块语法: 确保你的组件库使用了ES6模块语法,这是按需引入的基础。 拆分组件: 将组件库拆分成独立的模块,每个模块包含一个组件。这样,只有需要的组件才会被引入…...
Vue3-admin-template的表格合计计算
直接上代码: <el-table:data"lists"style"width: 100%"max-height"500":header-cell-style"{ textAlign: center }":cell-style"{ textAlign: center }"show-summary:summary-method"getSummaries"…...
spring JdbcTemplate 快速入门
概述 Spring JDBC Template 是 Spring Framework 提供的一个简化 JDBC 操作的模板类。它封装了一些常见的 JDBC 操作,使得开发者在使用 JDBC 时能够更加便捷、简洁,同时也提供了异常处理和资源管理等功能。 导入pom 使用C3P0作为数据源 <project x…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
