如何定位 Mysql 负载高

当 MySQL 服务器负载较高时,定位问题的核心是找出影响性能的瓶颈。以下是系统化的排查步骤和工具,帮助你快速定位和解决 MySQL 的高负载问题。


1. 检查系统资源

1.1. 检查服务器总体负载
  • 使用 tophtop 查看整体 CPU、内存使用情况:

    top
    
    • CPU:观察 MySQL 是否占用了大量的 CPU。
    • 内存:是否存在内存不足或 MySQL 使用过多内存导致的交换(swap)。
  • 使用 iostatvmstat 检查 I/O 瓶颈:

    iostat -x 1
    
    • 看看磁盘的 await 是否较高(>10ms 表示可能有 I/O 问题)。
    • %util 是否接近 100%。
1.2. 网络负载
  • 使用 sarifstat 检查网络流量:
    sar -n DEV 1
    
    • 如果网络流量异常大,可能是由于大批量的查询或备份任务。

2. 分析 MySQL 的当前状态

2.1. 查看 MySQL 当前连接数
  • 检查活跃连接和等待连接数:
    SHOW PROCESSLIST;
    
    • 关键字段:
      • Command:显示线程状态,QuerySleep 过多可能导致资源浪费。
      • Time:长时间运行的查询可能是瓶颈。
      • State:如 Copying to tmp tableWaiting for table metadata lock 等可能是问题的根源。
2.2. 使用 SHOW STATUS 查看关键指标
SHOW GLOBAL STATUS LIKE 'Threads%';
SHOW GLOBAL STATUS LIKE 'Connections';
SHOW GLOBAL STATUS LIKE 'Queries';
SHOW GLOBAL STATUS LIKE 'Slow_queries';
  • 关键指标:
    • Threads_running:活跃线程数,持续高于 10 表示有压力。
    • Threads_connected:当前连接数。
    • Slow_queries:慢查询数量。
2.3. 检查锁等待
  • 查看锁争用:
    SHOW ENGINE INNODB STATUS\G;
    
    • TRANSACTIONS 部分显示是否有大量锁等待。
    • LATEST DETECTED DEADLOCK 检查是否存在死锁。
2.4. 分析慢查询日志
  • 确保开启慢查询日志:
    SET GLOBAL slow_query_log = 1;
    SHOW VARIABLES LIKE 'slow_query_log_file';
    
    • 查看运行时间最长的查询。
2.5. 查询性能概要
  • 使用 EXPLAIN 分析慢查询:
    EXPLAIN SELECT ...;
    
    • 观察 type 字段:如 ALL 表示全表扫描。
    • 检查 rows 字段:大于预期表明查询需要优化。

3. 使用工具深入分析

3.1. 使用 mysqladmin
  • 快速查看关键指标:
    mysqladmin -u root -p status
    
3.2. 使用 pt-query-digest
  • 分析慢查询日志:
    pt-query-digest /path/to/slow_query.log
    
    • 识别耗时最高的 SQL 查询。
3.3. 使用 Performance Schema
  • 开启 Performance Schema:
    SHOW VARIABLES LIKE 'performance_schema';
    
  • 查询热点:
    SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT
    FROM performance_schema.events_waits_summary_global_by_event_name
    ORDER BY SUM_TIMER_WAIT DESC;
    
3.4. 使用 MySQLTuner
  • 下载并运行 MySQLTuner 来检查数据库配置是否需要优化:
    wget http://mysqltuner.pl -O mysqltuner.pl
    perl mysqltuner.pl
    

4. 优化建议

4.1. 优化查询
  1. 检查索引:

    • 确保所有查询使用适当的索引。
    • 使用 SHOW INDEX FROM table_name 检查表索引。
  2. 优化慢查询:

    • 避免全表扫描,添加必要的索引。
    • 使用分页查询时避免 OFFSET 太大。
4.2. 调整配置
  1. 调整最大连接数:

    SET GLOBAL max_connections = 500;
    
  2. 调整缓冲区:

    • 增大 innodb_buffer_pool_size(一般设置为内存的 70%-80%):
      SET GLOBAL innodb_buffer_pool_size = 4G;
      
  3. 配置查询缓存:

    • 如果大量重复查询,开启查询缓存:
      SET GLOBAL query_cache_size = 128M;
      
4.3. 减轻写入压力
  1. 批量插入
    • 合并小批量插入为大批量事务。
  2. 异步操作
    • 使用队列(如 Redis)暂存高频写入操作。
4.4. 分库分表
  • 数据量过大时,考虑使用分库分表或分区表。

5. 实战场景分析

场景 1:CPU 使用率高
  • 检查是否有大量复杂查询或排序。
  • 优化慢查询,添加索引。
  • 增加 CPU 或分布式部署。
场景 2:磁盘 I/O 高
  • 增加 innodb_buffer_pool_size
  • 检查是否有大量的临时表操作:
    SHOW GLOBAL STATUS LIKE 'Created_tmp%';
    
  • 减少磁盘写入操作,优化大表。
场景 3:连接数过多
  • 检查是否有未正确关闭的连接。
  • 使用连接池管理连接。
  • 增加 max_connections,但需结合硬件资源。

总结

MySQL 高负载通常是由查询优化、索引、配置或资源限制引起的。通过系统排查(资源监控 + SQL 分析 + 配置优化),可以快速找到瓶颈并加以解决。

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

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

相关文章

【bug】使用transformers训练二分类任务时,训练损失异常大

使用transformers训练二分类任务时,训练损失异常大 问题分析 问题 training_loss异常大,在二分类损失中,收敛在1~2附近,而eval_loss却正常(小于0.5) 分析 参考: Bug in gradient accumulation…

深入解析 EasyExcel 组件原理与应用

✨深入解析 EasyExcel 组件原理与应用✨ 官方:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网 在日常的 Java 开发工作中,处理 Excel 文件的导入导出是极为常见的需求。 今天,咱们就一起来深入了解一款非常实用的操作 Exce…

Gradio学习笔记记录

安装指令:pip install gradio方法介绍 Interface》用于构建一些简单的页面,可以直接用这个指令搞定 形式》接收三个参数分别为处理函数、输入、输出三部分,呈现一般左/上为输入,右或下为输出 fn:将用户界面 &#xff0…

养老院管理系统+小程序项目需求分析文档

智慧综合养老服务平台是以业务为牵引、场景为驱动,围绕“老人”业务域,持续沉淀和打磨形成适应不同养老业务发展需要的业务能力,推动业务模式升级,为养老服务提供数字化解决方案,并依托实体站点与养老机构实现线上线下…

React的基本知识:事件监听器、Props和State的区分、改变state的方法、使用回调函数改变state、使用三元运算符改变state

这篇教学文章涵盖了大量的React基本知识。 包括: 事件监听器Props和State的区分改变state的方法使用回调函数改变state使用三元运算符改变state处理state中的数组处理state中的object条件渲染 &&条件渲染 三元运算符React中的forms 1. Event Listeners 在…

repmgr安装及常用运维指令

简介 repmgr 由 EDB 与其他个人和组织的贡献一起开发,安装部署相对较为简单 安装 repmgr官网上传对应的安装到服务器上 安装前/etc/hosts IP映射、始终同步、免密通信本文忽略 repmgr的安装相对较为简单,目前repmgr-5仅仅支持到postgresql-15 postgresql必要参数…

opencv-python 分离边缘粘连的物体(距离变换)

import cv2 import numpy as np# 读取图像,这里添加了判断图像是否读取成功的逻辑 img cv2.imread("./640.png") # 灰度图 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯模糊 gray cv2.GaussianBlur(gray, (5, 5), 0) # 二值化 ret, binary cv2…

SATA接口不通分析案例分享

问题: 反馈有台NVR的某个接口SATA不通(共有4个SATA接口,采用SATA HUB JMB575),挂载硬盘不上。 分析: 1、直接对换问题口SATA1与正常口SATA2的SATA数据线,SATA1口还是异常,挂在不上…

【Web前端】如何构建简单HTML表单?

HTML 表单是 Web 开发中非常重要的组成部分。它们是与用户交互的主要方式,能够收集用户输入的数据。表单的灵活性使它们成为 HTML 中最复杂的结构之一,但若使用正确的结构和元素,可以确保其可用性和无障碍性。 表单的基本结构 HTML 表单使用…

Flutter:AnimatedIcon图标动画,自定义Icon通过延时Interval,实现交错式动画

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// late延迟初始化 AnimationControllerlate AnimationController _controller;overridevoid initStat…

PyQt学习笔记

一.PyQt5的安装 当我们安装好开发环境后&#xff0c;打开pycharm在其设置里面点击按钮自动安装即可。 安装完成后我们会在这里面看到这几个东西说明安装成功了。 二.PyQt5 GUI程序框架 1.一个简单的PyQt5应用程序 首先我们用pycharm创建一个demo.py的文件。 我们创建文件为s…

HTML5好看的音乐播放器多种风格(附源码)

文章目录 1.设计来源1.1 音乐播放器风格1效果1.2 音乐播放器风格2效果1.3 音乐播放器风格3效果1.4 音乐播放器风格4效果1.5 音乐播放器风格5效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&…

ReactPress(阮一峰推荐工具):一款基于Next.js的免费开源博客CMS系统

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 此项目是用于构建博客网站的&#xff0c;包含前台展示、管理后台和后端。 此项目是基于 React antd NestJS NextJS MySQL 的&#xff0c;项目已经开源&#xff0c;项目地址在 …

pytorch自定义算子导出onnx

文章目录 1、为什么要自定义算子&#xff1f;2、如何自定义算子3、自定义算子导出onnx4、example1、重写一个pytorch 自定义算子&#xff08;实现自定义激活函数&#xff09;2、现有算子上封装pytorch 自定义算子&#xff08;实现动态放大超分辨率模型&#xff09; 1、为什么要…

构建高效在线教育:SpringBoot课程管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理在线课程管理系统的相关信息成为必然。开发…

CSS3新特性——字体图标、2D、3D变换、过渡、动画、多列布局

目录 一、Web字体 二、字体图标 三、2D变换 1.位移 &#xff08;1&#xff09;浮动 &#xff08;2&#xff09;相对定位 &#xff08;3)绝对定位和固定定位 &#xff08;4&#xff09;位移 用位移实现盒子的水平垂直居中 2.缩放 利用缩放调整字体到12px以下&#xff…

python Flask指定IP和端口

from flask import Flask, request import uuidimport json import osapp Flask(__name__)app.route(/) def hello_world():return Hello, World!if __name__ __main__:app.run(host0.0.0.0, port5000)

linux ubuntu的脚本知

目录 一、变量的引用 二、判断指定的文件是否存在 三、判断目录是否存在 四、判断最近一次命令执行是否成功 五、一些比较符号 六、"文件"的读取和写入 七、echo打印输出 八、ubuntu切换到root用户 N、其它可以参考的网址 脚本功能强大&#xff0c;用起来也…

C++(进阶) 第1章 继承

C&#xff08;进阶) 第1章 继承 文章目录 前言一、继承1.什么是继承2.继承的使用 二、继承方式1.private成员变量的&#xff08;3种继承方式&#xff09;继承2. private继承方式3.继承基类成员访问⽅式的变化 三、基类和派生类间的转换1.切片 四、 继承中的作⽤域1.隐藏规则&am…

Load-Balanced-Online-OJ(负载均衡式在线OJ)

负载均衡式在线OJ 前言1. 项目介绍2. 所用技术与环境所用技术栈开发环境 3. 项目宏观结构3.1 项目核心模块3.2 项目的宏观结构 4. comm公共模块4.1 日志&#xff08;log.hpp &#xff09;4.1.1 日志主要内容4.1.2 日志使用方式4.1.2 日志代码 4.2 工具&#xff08;util.hpp&…