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服务状态查看和监控方式 的相关文章

  • 用户消息系统

    我正在考虑创建一个用户消息系统 类似于 Facebook 我想知道的本质上是表结构应该是什么样子 我的要求如下 消息在用户之间交换 发送者可以选择多个用户来发送消息 消息以线程式布局显示 作为一对一对话 即每个收件人的回复将出现在其自己的线
  • Update 查询中的 MySQL 子查询 select 语句

    我有 2 个表 tbl taxclasses tbl taxclasses regions 这是一对多关系 其中主记录 ID 是classid 我在第一个表中有一个名为regionscount 因此 我在表 1 中创建一个税类 然后在表 2
  • 如何左连接或内连接表本身

    例如 我将这些数据存储在表中 id name parent parent id 1 add self 100 2 manage null 100 3 add 10 200 4 manage null 200 5 add 20 300 6 m
  • 无法使用 Spring Boot 创建 mysql 数据库

    我试图在没有像 h2 和 derby 这样的嵌入式数据库的情况下实现 Spring Boot 而是使用 mysql 我不断收到未知的数据库错误 pom xml
  • 需要使用同一数据库中另一表的数据填充一个表

    我正在尝试使用 mysql 从另一个表填充一个表 第一个表是用户 第二个表是技术人员 用户包含 用户ID 姓氏 名字 登录ID 密码 访问级别 技术人员包含 techID tech surname tech firstname tech l
  • 使用正则表达式选择查询 - MySql

    如果特定列的名称中包含数字 我想选择记录 表格1 ID EmpCode EmpName 1 1C Name1 2 2C Name2 3 C3 Name3 4 CD Name4 5 CD Name4 6 C6D Name6 7 7CD Nam
  • 如何让 YEARWEEK() 将星期日视为一周的开始?

    我试图让 YEARWEEK 函数将星期日视为一周的第一天 日期示例为 2009 年 3 月 1 日星期日 这是我的sql SELECT YEARWEEK 2009 03 01 结果是 gt 200909 这是第 9 周 我相信它告诉我这是第
  • 在codeigniter中处理存储过程输出参数

    我在 mysql 中有一个带有输出参数的存储过程 我需要将结果发送到使用 codeigniter 的 php 寄存器模式 public function registerUser data sql call register new use
  • MySQL 连接器/python 在 django 中不工作

    我正在学习 Django 以 MySQL 作为后端 我安装了Oracle的mysql连接器来连接mysql 然而 当我跑步时python manage py我收到这个错误 回溯 最近一次调用最后一次 文件 C Python33 lib si
  • Laravel 4 中如何知道查询是否失败?

    我将 Laravel 4 与 MySQL 结合使用 我想知道如何控制在数据库中插入 更新或删除记录时可能出现的错误 例如 如果我进行如下更新 DB table user gt where id id gt update userdata 我
  • 为什么这个递归连接会产生:数据太长

    我在 MySQL 8 上有这个表 create table tbl id varchar 2 val int insert into tbl values A 1 B 2 C 3 D 4 E 5 以下查询应找出哪些记录集的值之和不大于 6
  • 相当于 pandas 'transform' 的 SQL 是什么?

    假设您有以下 SQL 表 A B C 2 1 4 3 4 5 3 1 1 1 4 0 5 0 1 并且您想要添加 显示一个列 其中包含 A 列对于 B 列的每个不同值的平均值 或任何其他聚合函数 您想要保留所有列 所以结果会是这样的 A B
  • MySQL JOIN 的评估顺序是什么?

    我有以下查询 SELECT c FROM companies AS c JOIN users AS u USING companyid JOIN jobs AS j USING userid JOIN useraccounts AS us
  • Ubuntu 12.04.5 LTS 中无法通过套接字“/var/run/mysqld/mysqld.sock”连接到本地 MySQL 服务器

    我遇到了错误无法在 Ubuntu 12 04 5 LTS 中通过套接字 var run mysqld mysqld sock 连接到本地 MySQL 服务器 So I 卸载了mysql 5 5从 Ubuntu 12 04 5 LTS 开始
  • 使用 MySQL 作为元存储从 HIVE 查询元数据

    我正在寻找一种使用 HiveQL 命令查询 HIVE 数据元数据的方法 我配置了一个 MySQL 元存储 但需要通过 HIVE 命令查询元数据 因为然后我想通过 ODBC 连接到 HIVE 系统来访问数据 要从 Hive 查看它们 必须使用
  • 如何重置 MySQL 5.7 上的默认“root”用户行为

    我对新的 MySQL 5 7 root 用户行为感到满意 它只允许本地主机上的linux root用户以MySQL root用户身份登录MySQL 我最近导入了我的旧用户表 它覆盖了这个更改 现在任何人都可以使用密码在本地主机上以 root
  • 在重复密钥更新时插入...在哪里?

    我正在做一个INSERT ON DUPLICATE KEY UPDATE但我需要更新部分是有条件的 只有在某些额外条件发生变化时才进行更新 然而 WHERE不允许这样做UPDATE 有什么解决方法吗 我无法执行 INSERT UPDATE
  • SourceTree 中通过 textconv 自定义差异

    我正在尝试比较和合并 SourceTree 中的 MySQL WorkBench 文件 为此 我创建了一个小型 shell 脚本 用于提取 mwb 文件的内容 并从其中的 XML 文件中删除一些无用的计数器 然后我将此行添加到项目根目录中的
  • 使用从另一个表 MYSQL 获取的值从一个表中选择行

    我的数据库中目前有 2 个 mysql 表 Film and Film Ratings Report Film 的主键是filmid用于识别电影分级Film Ratings Report table 我想知道是否可以仅使用 MYSQL 查询
  • MySQL:“SELECT 将检查超过 MAX_JOIN_SIZE 行”

    我正在使用 PHP 和 MySQL 在我的程序中 有一个涉及连接的选择查询 当我在本地主机上运行它时 它工作正常 但是当我将它上传到我的服务器上并尝试执行它时 它会生成以下错误 The SELECT would examine more t

随机推荐

  • 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 每秒查询量 查询命令