mysql性能瓶颈排查

2023-05-16

mysql性能瓶颈排查 top/free/vmstat/sar/mpstat

查看mysqld进程的cpu消耗占比

确认mysql进程的cpu消耗是%user, 还是sys%高

确认是否是物理内存不够用了

确认是否有swap产生

##使用下面工具查看

top (%cpu load %MMEM)

free -gt

vmstat -S m 1 (procs io cpu)

sar -u 1 (%user)

sar -d 1

如何优化

一:硬件优化

查看mysql线程状态 show [full] processlist

长时间的Sending data

从引擎层读取数据返回给server端

1.长时间存在的原因:

1 没有合适的索引 查询效率低下

2 读取大量数据 读取缓慢

3 系统负载高 读取缓慢

如何做:

1 加上合适的索引

2 改写sql

3 增加LIMIT限制每次读取量

4 检查&升级IO设备性能

2.长时间等待MDL锁 (waiting for table metadata lock)

原因:

DDL被阻塞 进而阻塞其他后续sql

DDL之前的sql长时间未结束,这个表未释放锁

举例:

a.开启一个事务。未提交,这个时候fege表的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 performance_schema.events_statements_current\G; 可以看到当前未提交的sql信息

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

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

这里,重点关注lock_status,"PENDING"代表线程在等待MDL,而"GRANTED"则代表线程持有MDL。

#再次查看

如何做:

1 提高每条sql的效率

2 kill掉长时间运行的sql

3 把DDL放在夜间低谷时段

4 采用pt-osc执行DDL

长时间的sleep

占用连接数

消耗内存未释放

可能有行锁(甚至是表锁未释放)

如何做:

1 适当调低timeout

2 主动kill超时不活跃连接

3 定期检查锁、锁等待

4 可以利用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;

测试环境调低long_query_time的值 开启log_queries_not_using_indexes 分析慢日志

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql性能瓶颈排查 的相关文章

  • SQL UPDATE 语句根据另一个现有行更新列

    基本上我有一个与下表具有相似格式的表格 我想做的是根据这个逻辑更新 Col4 如果 Col2 为空 则用 Col3 更新 Col4 如果 Col2 不为 null 则在 Col1 中查找与 Col2 中的值匹配的值 使用 col3 中的相应
  • 在 Mysql 上使用 EntityManager JPA 运行脚本

    我正在尝试运行脚本 sql 文件 但由于我尝试了多种方法 因此出现多个错误 这是我的主要 sql 脚本 INSERT INTO Unity VALUES 11 paq 0 2013 04 15 11 41 37 Admin Paquete
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 计算 mysql 数据库行数的最佳方法

    在遇到 mysql 查询加载时间慢的问题后 我现在正在寻找计算行数的最佳方法 我曾经愚蠢地使用过mysql num rows 函数来做到这一点 现在意识到这是最糟糕的方法 我实际上正在制作一个分页来用 PHP 制作页面 我找到了几种计算行数
  • 当复选框条件更改时,如何使用ajax更新mysql数据库?

    我有一个在客户端按行显示的文章表 每篇文章都有一个唯一的 ID 并包含一个复选框以指示该文章是否被选中为收藏夹 如果它是最喜欢的 则该复选框已被选中 如果没有 则未选中 现在 如果特定于每一行的复选框条件发生变化 我需要 js 或 jque
  • Laravel 5.4 升级 - 违反完整性约束 - 列不能为空

    奇怪的是 所有这些都在 5 2 中工作 但我不知道可以改变什么来实现这一点 下面是错误和正在插入的数组 SQLSTATE 23000 Integrity constraint violation 1048 Column gender can
  • PHP使用auto_increment生成短唯一ID?

    我想生成一个简短的 唯一的 ID 而不必检查冲突 我目前正在做类似的事情 但是我当前生成的 ID 是随机的 并且在循环中检查冲突很烦人 并且如果记录数量显着增加 将会变得昂贵 通常担心冲突不是问题 但我想要生成的唯一 ID 是一个由 5 8
  • MySQL Python 关于重复键更新值

    我正在研究使用 python 将 JSON 数据上传到 MySQL 我需要在插入语句中包含 ON DUPLICATE KEY UPDATE VALUES 但在 Python 中遇到了问题 如果我运行以下代码 一切正常 import json
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • MySQL - 多个结果集

    我正在使用 NET Connector 连接到 MySQL 在我的应用程序中 很少有线程使用相同的连接 因此如果 MySQLDataReader 尚未关闭并且某个线程正在尝试执行查询 则会出现该错误 已经有一个打开的 DataReader
  • mysql表中的数据非常大。即使 select 语句也需要很多时间

    我正在开发一个数据库 它是一个相当大的数据库 有 13 亿行和大约 35 列 这是我检查表状态后得到的结果 Name Table Name Engine InnoDB Version 10 Row format Compact Rows 1
  • 无法在 mysql-apt-config [Ubuntu 14.04] 中选择“确定”

    我使用的是 Ubuntu 14 04 sudo apt get update总是给我这个选项来配置 mysql apt config 我尝试选择版本 按 tab gt 在 确定 上突出显示的键 按 Enter 但没有任何反应 它再次返回并突
  • MySQL 左连接 WHERE table2.field = "X"

    我有以下表格 pages Field Type Null Key Default Extra page id int 11 NO PRI NULL auto increment type varchar 20 NO NULL
  • MySQL 和 PHP 参数 1 作为资源

    好吧 当我运行下面提到的代码时 PHP 向我抛出此错误 在日志中 Error mysql num rows 期望参数 1 为资源 第 10 行 place 中给出的字符串 9 11号线 queryFP SELECT FROM db coun
  • MySQL - 从数字列表中选择在表的 id 字段中没有对应项的数字

    我有一个数字列表 例如 2 4 5 6 7 我有一个表 foos 带有 foos ID 包括 1 2 3 4 8 9 我想获取我的号码列表 并在我的表的 ID 字段中找到那些没有对应项的号码 实现此目的的一种方法是创建一个表格栏 在 ID
  • 将IP保存到数据库中

    当用户登录时 我想将他们的 IP 保存在数据库中 我该怎么做呢 MySQL 字段最适合使用哪种类型 获取IP的PHP代码是什么样的 我正在考虑将其用作登录 会话内容的额外安全功能 我正在考虑使用用户现在拥有的 IP 检查用户从数据库登录的
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI

随机推荐

  • 异常检测从入门到应用

    作者 xff1a 成森 64 知乎 来源 xff1a https zhuanlan zhihu com p 116235115 异常检测 Anomaly Detection 作为机器学习的一个重要分支 xff0c 实际应用领域广泛 xff0
  • Jetson Nano配置踩坑全记录

    Jetson Nano配置踩坑全记录 Jetson Nano相关参数 xff1a JetPack 4 6 xff0c cuda 10 2 xff0c SD卡内存 xff1a 512G 一 Jetson Nano系统镜像烧录 在Nvidia官
  • kubeadm的rbac

    什么是 Kubernetes RBAC 基于角色的访问控制 xff08 Role Based Access Control 即 34 RBAC 34 xff09 xff1a 使用 rbac authorization k8s io API
  • kubeadm部署dashboard-2.0.0版本

    kubeadm部署dashboard 2 0 0版本 创建dashboard的secret的私钥 root 64 yunwei CA openssl genrsa out od com key 2048 创建dashboard的secret
  • redis5.0的主从跟哨兵

    redis的主从跟哨兵 安装redis 5 0 12 下载地址 xff1a https download redis io releases 1 下载安装redis root 64 master01 cd opt root 64 maste
  • ROS运行gazebo提示“process has die”问题-已解决

    ROS运行gazebo提示 process has die 问题 已解决 解决方案概述升级gazebo方法 解决方案概述 无数次出现这个问题 xff0c 看了好多教程 xff0c 有的是把这个命令添加到 bashrc文件中 xff1a ex
  • Elasticsearch7.9集群部署,head插件,canal同步mysql数据到es,亲自测试,无坑

    Elasticsearch集群部署 1 服务器规划 10 4 7 11 node1 10 4 7 12 node2 10 4 7 13 node3 1 集群相关 一个运行中的 Elasticsearch 实例称为一个节点 xff0c 而集群
  • elasticsearch备份

    es集群主机分布 10 4 7 11 node1 10 4 7 12 node2 10 4 7 21 node3 10 4 7 22 nfs 1 在主机10 4 7 22部署nfs root 64 localhost yum install
  • 批量拷贝公钥到指定的主机,实现免秘钥登录

    一 xff1a copy公钥脚本 root 64 ansible tmp cat copy pubkey sh bin bash PassWord 61 1 rpm qa grep sshpass 2 gt amp 1 gt dev nul
  • centos7内核参数优化以及内核升级

    一 xff1a 修改内核配置文件 vim etc sysctl conf 刷新配置文件 sysctl p 关IPv6 net ipv6 conf all disable ipv6 61 1 net ipv6 conf default dis
  • k8s的ceph

    ceph安装 地址 xff1a https rook io docs rook v1 8 quickstart html 特性丰富 1 xff0c 支持三种存储接口 xff1a 块存储 文件存储 对象存储 2 xff0c 支持自定义接口 x
  • prometheus监控k8s集群

    prometheus监控k8s集群 实现思路 pod性能 xff1a 使用cadvisor进行实现 xff0c 监控容器的CPU 内存利用率 Node性能 xff1a 使用node exporter实现 xff0c 主要监控节点CPU 内存
  • centos7部署vsftpd虚拟用户

    vsftpd部署 一 xff1a 安装vsftpd 1 首先要查看你是否安装vsftpd rpm qa grep vsftpd vsftpd 3 0 2 10 el7 x86 64 2 安装vsftpd yum install y vsft
  • Ceph OSD扩容与缩容

    在企业生产环境中 xff0c 随着时间的迁移数据会存在磁盘空间不足 xff0c 或者机器节点故障等情况 OSD又是实际存储数据 xff0c 所以扩容和缩容OSD就很有必要性 随着我们数据量的增长 xff0c 后期可能我们需要对osd进行扩容
  • mysql的条件查询基础知识(一)

    一 xff1a 条件查询基础知识 语法 xff1a select 查询列表 from 表名 where 筛选条件 二 xff1a 分类 xff1a 主要分为3类 xff1a 一 按条件表达式筛选 简单条件运算符 xff1a gt lt 61
  • 【C++构造函数后面的冒号作用】

    C 43 43 构造函数后面的冒号作用 功能1 对基类进行初始化2 对类成员进行初始化3 对类中const变量进行初始化 功能 1 对基类进行初始化 多重继承中 xff0c 对多个基类进行初始化 冒号后面有多个参数 xff0c 中间用逗号隔
  • mysql基础知识常见函数(二)

    一 xff1a 常见函数概念 概念 xff1a 类似于java的方法 xff0c 将一组逻辑语句封装在方法体中 xff0c 对外暴露方法名 好处 xff1a 1 隐藏了实现细节 2 提高代码的重用性 调用 xff1a select 函数名
  • mysql基础知识分组函数跟分组查询(三)

    一 xff1a 分组函数 功能 xff1a 用作统计使用 xff0c 又称为聚合函数或统计函数或组函数 分类 xff1a sum 求和 avg 平均值 max 最大值 min 最小值 count 计算个数 特点 xff1a 1 sum av
  • $*和$@的区别

    一 xff1a 解析 xff1a 会把接收到的所有参数当成一个整体对待 xff0c 表示一个参数 64 会对待接收到的所有参数进行区分 以空格分隔开 xff0c 独立的多个参数 二 xff1a 举例说明 root 64 fengge sh
  • mysql性能瓶颈排查

    mysql性能瓶颈排查 top free vmstat sar mpstat 查看mysqld进程的cpu消耗占比 确认mysql进程的cpu消耗是 user 还是sys 高 确认是否是物理内存不够用了 确认是否有swap产生 使用下面工具