MySQL服务状态查看和监控方式

2023-10-27

运行中的MySQL状态查看可以通过以下方式进行监控和衡量不同指标:

show global status like 'Uptime';  服务器已运行的秒数。重启服务器后会置零。以下内容使用的Uptime均为此字段。

1、QPS (每秒查询量)

查询命令:
show global status like 'Queries' ; 服务器执行的语句数量。与"Questions"变量不同,该变量包括在存储过程中执行的语句。它不计算COM_PING或COM_STATISTICS命令。
show global status like 'Questions' ; 服务器执行的语句数量。这只包括由客户端发送到服务器的语句,而不包括在存储过程中执行的语句。该变量不计算COM_PING、COM_STATISTICS、COM_STMT_PREPARE、COM_STMT_CLOSE或COM_STMT_RESET命令。
公式:QPS = Questions(or Queries) / Uptime

2、TPS (每秒事务量)

查询命令:
show global status like 'Com_commit' ;已提交事务的计数。
show global status like 'Com_rollback';回滚事务的计数。
公式:TPS = (Com_commit + Com_rollback) / Uptime

3、Key Buffer 缓存命中率(用于MyISAM引擎)

查询命令:
show global status like 'key%'  
show global status like 'key_read_requests' ;从MyISAM键缓存读取键块的请求次数。
show global status like 'key_reads' ;从磁盘物理读取键块到MyISAM键缓存中的次数。如果Key_reads很大,则可能是的key_buffer_size值可能太小。
show global status like 'Key_write_requests' ;向MyISAM键缓存写入键块的请求次数。
show global status like 'Key_writes' ;将键块从MyISAM键缓存物理写入磁盘的次数。
公式:
key_buffer_read_hits = (1 - key_reads / key_read_requests) * 100%   
key_buffer_write_hits = (1 - key_writes / key_write_requests) * 100%

4、InnoDB Buffer 缓存命中率(Hit rate)

查询命令:
show status like 'Innodb_buffer_pool_read_requests';从InnoDB缓冲池中读取的总请求数
show status like 'Innodb_buffer_pool_reads';表示从磁盘读取的次数
公式:innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%

5、查询缓存Query Cache 命中率(8.0以后弃用了)

查询命令:
show status like 'Qcache%'
公式:Query_cache_hits = (Qcache_hits / (Qcache_hits + Qcache_inserts )) * 100%

6、Table Cache 状态量

查询命令:
show global status like 'open_tables';表示当前打开的table总和,即所有connection打开的table总数。
show global status like 'opend_tables';打开过的表的数量总和。如果Opened_tables很大,你的table_open_cache值可能太小了。
Opened_tables/Uptime的值过大说明table_open_cache过小,导致一些table对象(即下文说的table对象)经常会刷出server层,需要的时候再创建,最终导致此计数过大。

7、Thread Cache 命中率

查询命令:
show global status like 'Threads_created';为处理连接而创建的线程数。如果Threads_created很大,可能需要增加thread_cache_size的值。可以计算缓存未命中率,公式为Threads_created/Connections。
show global status like 'Connections';对MySQL服务器的连接尝试总次数;
公式:Thread_cache_hits = (1 - Threads_created / connections) * 100%

8、锁定状态

查询命令:
show global status like 'Table_locks_waited';服务器状态变量表示请求表锁时未立即授予并需要等待的次数。该值反映了MySQL服务器中表锁争用的程度。
如果Table_locks_waited的值很高,并且您遇到性能问题,则意味着存在大量的表锁争用。为了解决这个问题,您应该首先优化查询,以最小化所需的表锁数量。这可能涉及改进查询结构、添加索引或重写效率低下的SQL语句。
如果优化查询无法足够减少争用,您有几个选择:
分割表:您可以将大型表分割为较小的表,以分散工作负载并减少表锁争用。如果存在经常需要锁定的特定列或行组,这种方法可能非常有效。
复制:实施复制可以通过允许将读密集型操作转移到副本服务器来帮助缓解表锁争用。通过将工作负载分布在多个实例上,您可以减少主服务器上对表锁的需求。
show global status like 'Table_locks_immediate'; 立即获得表锁的次数。
注意观察 Table_locks_waited/Table_locks_immediate 比值,如果较大,可能表锁造成严重阻塞;也要注意 Innodb_row_lock_waits,过高可能是间隙锁造成的

9、主从复制信息

查询命令:
SHOW MASTER STATUS;此命令将显示主服务器当前复制状态的相关信息,包括二进制日志文件名和位置。

show SHOW SLAVE STATUS;此命令将显示从服务器当前复制状态的详细信息。\G选项以更易读的格式显示输出。其中:

  • Seconds_Behind_Master: 这个字段表示主库和从库之间的延迟时间,以秒为单位。如果该值为0,则表示从库与主库同步完全。

  • Slave_IO_Running: 这个字段表示从库的IO线程是否正在运行。IO线程负责从主库读取并写入二进制日志文件中的事件。如果该值为Yes,则表示IO线程正在正常工作;如果该值为No,则表示IO线程停止了,可能由于网络连接或权限问题导致。

  • Slave_SQL_Running: 这个字段表示从库的SQL线程是否正在运行。SQL线程负责读取并执行从主库复制过来的二进制日志中的事件。如果该值为Yes,则表示SQL线程正在正常工作;如果该值为No,则表示SQL线程停止了,可能由于错误的SQL语句或其他问题导致。

10、Tmp Table 状况 (临时表状况)

查询命令:
show status like 'Created_tmp_disk_tables';服务器在执行语句期间创建的内部临时表写到磁盘的数量。
注意
由于已知限制,Created_tmp_disk_tables不计算在内存映射文件中创建的磁盘临时表。默认情况下,TempTable存储引擎的溢出机制在内存映射文件中创建内部临时表。此行为由temptable_use_mmap变量控制,默认情况下启用。
show status like 'Created_tmp_tables';服务器在执行语句期间创建的内部临时表的数量。
观察比值 Created_tmp_disk_tables/Created_tmp_tables,最好不要超过10%;如果 Created_tmp_tables 值较大,可能是排序语句过多或连接语句未优化。

11、Binlog Cache 使用状况

查询命令:
show status like 'Binlog_cache_disk_use';(二进制日志缓存磁盘使用次数)
这是使用临时二进制日志缓存的大小超过binlog_cache_size的值, 导致二进制日志事务缓存写入磁盘的数量。非事务语句数量单独在Binlog_stmt_cache_disk_use状态变量中记录。
如果 Binlog_cache_disk_use 值不为0,可能需要增加 binlog_cache_size 的大小

12、Innodb_log_waits 等待写入完成的日志数量

查询命令:
show status like 'innodb_log_waits';表示等待写入完成的日志数量。
在InnoDB中,事务的持久性主要通过将日志记录到redo日志(也称为事务日志或者重做日志)来实现。当一个事务提交时,它的日志记录会被写入到磁盘上的redo日志文件中。在某些情况下,如果系统负载过高或者IO延迟较高,可能会导致其他事务需要等待直到日志写入完成。
Innodb_log_waits变量用于监控这些等待事件的数量。如果该值较高,表示有许多事务在等待日志写入完成。这可能意味着I/O子系统存在性能问题,因此可以借助该状态变量来识别和解决潜在的性能瓶颈。

13、InnoDB存储引擎的死锁情况

使用管理员权限执行以下命令来获取InnoDB存储引擎的状态信息:
查询命令:SHOW ENGINE INNODB STATUS;
执行该命令后,会返回一个结果集。在结果集中,找到名为"InnoDB"的部分,查找名为"LATEST DETECTED DEADLOCK"的子节。这个子节提供了有关最近检测到的死锁的详细信息。

14、查看连接线程

查询命令:show processlist

  • Id(连接ID):每个客户端连接都被分配一个唯一的连接ID。
  • User(用户名):与连接关联的MySQL用户。
  • Host(主机名):连接到数据库服务器的主机名或IP地址。
  • db(数据库):当前正在使用的数据库名称。如果没有选择任何数据库,则显示为NULL。
  • Command(命令):客户端正在执行的命令类型。常见的命令类型包括SELECT、INSERT、UPDATE、DELETE等。
  • Time(运行时间):连接在当前状态下已经运行的时间(以秒为单位)。
  • State(状态):描述连接当前所处的状态。可以是"Sleep"(空闲)、"Locked"(锁定)、"Sending data"(发送数据)等等。
  • Info(信息):给出有关查询或操作的更多详细信息,如SQL语句。
15、innodb脏页比例

查询命令:
show global status like 'Innodb_buffer_pool_pages_dirty'; 脏页数
show global status like 'Innodb_buffer_pool_pages_total';Innodb缓存总页数
公式:Innodb_buffer_pool_pages_dirty/Innodb_buffer_pool_pages_total

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

MySQL服务状态查看和监控方式 的相关文章

  • MySQL 按主键排序

    某些 SQL 服务器允许使用通用语句 例如ORDER BY PRIMARY KEY 我不相信这适用于 MySQL 是否有任何此类解决方法可以允许跨多个表自动选择 或者是否需要查找查询来确定主键 我一直在研究的解决方法包括调用SHOW COL
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 使用按位函数查询 BIT 字段时,MySQL 不使用索引

    我的 MySQL 表中有一个 BIT 类型的字段 我想使用位值存储记录的状态 例如 1 status1 2 status2 4 status3 8 status4 每条记录可以同时具有多种状态 对于 status1 和 status3 该值
  • 如何将 MySQL 数据库更改为 UTC?

    我使用的是 Windows 7 对数据库方面的东西有点陌生 我尝试在 Google 上搜索如何将系统时区更改为 UTC 但文档有些高级 我不太确定如何更改此字段 在 my ini 文件的 mysqld 部分下 添加以下行 default t
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • Mysql innoDB 不断崩溃[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的数据库 mysql 服务器不断崩溃 重新启动 我不知道该怎么办 我不断在 dbname org err 文件中收到以下内容 13120
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • MySQL Connector/C++ 库链接错误问题

    PROBLEM 好吧 我一直在尝试遵循 MySQL Forge Wiki 和其他一些网站上的示例代码 这些网站提供了有关如何获得简单数据库连接的教程 但由于某种原因 我的项目总是因链接错误而失败 我可以我自己不明白为什么或如何解决它 我仍在
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • 即使使用“autoReconnect=true”,MySql JDBC 也会超时[重复]

    这个问题在这里已经有答案了 有时 我的 Java Tomcat6 Debian Squeeze 应用程序无法与 MySql 服务器通信 Tomcat 应用程序位于前端服务器上 而 MySql 位于单独的 仅限 MySql 的机器上 一个典型
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou

随机推荐

  • java类型信息与反射

    初步理解 https www cnblogs com xuanlin666 p 10826809 html
  • 使用Electron开发过程中不能使用remote模块解决

    在 electron 渲染进程中引入BrowserWindow报错 const BrowserWindow require electron remote BrowserWindow 报错 Cannot read properties of
  • c++ADO编程-connection对象

    Connection对象的属性有如下几个 1 ConnectionString属性 是连接字符串 通过传递包含一系列由分号分隔的 argument value 语句的详细连接字符串 可指定用于建立连接数据源的信息 连接串格式根据数据源的不同
  • 3.2面向对象

    面向对象与面向过程的区别 面向过程指的是工作过程如何执行 而面向对象指的是工作该让谁来完成 面向对象三大思想 OOA 面向对象分析 Object Oriented Analysis OOD 面向对象设计 Object Oriented De
  • 剑指 Offer 15. 二进制中1的个数(java+python)

    编写一个函数 输入是一个无符号整数 以二进制串的形式 返回其二进制表达式中数字位数为 1 的个数 也被称为 汉明重量 提示 请注意 在某些语言 如 Java 中 没有无符号整数类型 在这种情况下 输入和输出都将被指定为有符号整数类型 并且不
  • 一万字关于java数据结构堆的讲解,让你从入门到精通

    目录 java类和接口总览 队列 Queue 1 概念 2 队列的使用 以下是一些常用的队列操作 1 入队操作 2 出队操作 3 判断队列是否为空 4 获取队列大小 5 其它 优先级队列 堆 1 优先级队列概念 Java中的Priority
  • uvicorn启动fastapi项目实现热部署

    一 创建在不同的文件中 通过import引入 将app对象定义在一个模块中 如app py 在主模块 如main py 中导入app并运行 app py from fastapi import FastAPI app FastAPI mai
  • 真题详解(关系模型)-软件设计(六十六)

    真题详解 ICMP 软件设计 六十五 https blog csdn net ke1ying article details 130475620 2017年下半年 内存按字节编址 若存储容量为32K 8bit的存储芯片构成地址从A0000H
  • C++基础知识 - 子类的析构函数

    子类的析构函数 注意 为了防止内存泄露 最好是在基类析构函数上添加virtual关键字 使基类析构函数为虚函数 目的在于 当使用delete释放基类指针时 会实现动态的析构 如果基类指针指向的是基类对象 那么只调用基类的析构函数 如果基类指
  • 【DSP】TMS320F28335的ADC模块

    一 功能说明 12位内建采样保持的模数转换器 模拟输入电平 0 3V 16个转换通道 最快转换时钟频率12 5MHz 奈奎斯特定则 25MHz最高能采样12 5MHz的信号 多触发源 软件 ePWM和GPIO 两种采样模式 级联和双通道模式
  • 张大哥笔记-从零开始自己创建一个网站的操作指南

    随着互联网时代的发展 无论是个人还是企业 都想拥有一个自己的网站 通过网站快速展示自己的商品信息 有很多人不了解一个网站是如何形成的 制作一个网站需要多少时间 具体由哪些细节都是全然不知 他们甚至感觉搭建一个网站是一件非常复杂的事情 其实
  • C语言经典100例题(37)--给10个数排序(选择排序和冒泡排序)

    目录 题目 问题分析 选择排序法 冒泡排序法 代码 选择排序法 冒泡排序法 运行结果 题目 给10个数排序 问题分析 选择排序法 从后9个比较过程中 选择一个最小的与第一个元素交换 下次类推 即用第二个元素与后8个进行比较 并进行交换 每一
  • Appium + IOS 自动化环境搭建教程(实践+总结+踩坑)

    文章目录 前言 IOS 自动化相关框架介绍 自动化测试类工具 内测发布工具 Appium驱动IOS测试原理 关于 WebDriverAgent 基础环境搭建 基础环境 安装内容 前提环境 通用环境 iOS 环境 iOS 真机调试环境配置 I
  • Pandas学习之to_csv()

    用法 df to csv 输出路径 参数1 参数2 参数3 sep 以逗号 作为数据的分隔符 如果分隔符不为逗号 则包含符双引号 就会消失 分隔符为Tab时 写法如下 df to csv new csv sep t na rep NA 确实
  • if-else常见的优化方案

    前言 代码中如果if else比较多 阅读起来比较困难 维护起来也比较困难 很容易出bug 接下来 本文将介绍优化if else代码的八种方案 优化方案一 提前return 去除不必要的else 如果if else代码块包含return语句
  • HBase 比较过滤器

    一 行过滤器 RowFilter 测试RowFilter过滤器 Test public void testRowFilter throws IOException Configuration conf HBaseConfiguration
  • echars-all.js 2.2.7组织结构图及自定义右键菜单的实现思路及源码

    组织结构图一般是树图结构 echars是一个很好的开源数据工具 2 x版本也有对树图的定义 要做组织结构图的需求拿到手里后 在网上也翻阅了很多echarts的官网资料及网友的实现思路 最终在网友及自身的努力下完成了这项任务 以上 先上最终结
  • Linux下gdb attach的使用(调试已在运行的进程)

    在Linux上 执行有多线程的程序时 当程序执行退出操作时有时会遇到卡死现象 如果程序模块多 代码量大 很难快速定位 此时可试试gdb attach方法 测试代码main cpp如下 这里为了使程序退出时产生卡死现象 在第51行时push线
  • 服务器连接超时是怎么回事呢?

    服务器连接超时就是在程序默认的等待时间内没有得到服务器的响应 网络连接超时可能的原因有那些呢 1 网络断开 不过经常显示无法连接 网络阻塞 导致你不能在程序默认等待时间内得到回复数据包 2 网络不稳定 网络无法完整传送服务器信息 系统问题
  • MySQL服务状态查看和监控方式

    运行中的MySQL状态查看可以通过以下方式进行监控和衡量不同指标 show global status like Uptime 服务器已运行的秒数 重启服务器后会置零 以下内容使用的Uptime均为此字段 1 QPS 每秒查询量 查询命令