数据库监控与调优【七】—— MySQL数据库诊断命令

这篇具有很好参考价值的文章主要介绍了数据库监控与调优【七】—— MySQL数据库诊断命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySQL数据库诊断命令

TIPS

本文基于MySQL 8.0,理论支持MySQL 5.0及更高版本。

本文整理了常用的MySQL诊断命令,可以帮助我们了解数据库的运行情况。

SHOW PROCESSLIST

作用:

SHOW [FULL] PROCESSLIST用于查看当前正在运行的线程。如果执行此命令的用户拥有 PROCESS 权限,则可看到所有线程;否则只能看到自己的线程(即与当前登录用户关联的线程)。如果不使用FULL关键字,只在Info字段中展示前100个字符。

当遇到“too many connections”错误信息时,想要了解发生了什么,SHOW PROCESSLIST就非常有用。MySQL保留了一个额外的连接,用于让拥有 CONNECTION_ADMIN (或已废弃的 SUPER )权限的账户使用,从而确保管理员始终能够连接并检查系统。

可使用 KILL 语句杀死线程。

语法:

## 不写FULL返回结果里的info字段只会展示前100个字符,超过100个字符会被截断,写了FULL就不会,完整展示
SHOW [FULL] PROCESSLIST                                                       

示例:

mysql> SHOW FULL PROCESSLIST\G
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db: NULL
Command: Connect
Time: 1030455
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 1004
State: Has read all relay log; waiting for the slave
       I/O thread to update it
Info: NULL
*************************** 3. row ***************************
Id: 3112
User: replikator
Host: artemis:2204
db: NULL
Command: Binlog Dump
Time: 2144
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
*************************** 4. row ***************************
Id: 3113
User: replikator
Host: iconnect2:45781
db: NULL
Command: Binlog Dump
Time: 2086
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
*************************** 5. row ***************************
Id: 3123
User: stefan
Host: localhost
db: apollon
Command: Query
Time: 0
State: NULL
Info: SHOW FULL PROCESSLIST
5 rows in set (0.00 sec)

由结果可知,结果包含如下几列:

  • Id:连接的唯一标识,是CONNECTION_ID()函数的返回。

  • User:发出该语句的MySQL用户。

    • system_user表示服务器产生的非客户端线程,用于处理内部任务。这可能是用来在从库复制或延迟行处理器的IO/SQL线程。对于system_user,Host字段将会为空
    • unauthenticated user是指与客户端连接,但尚未完成客户端用户身份认证的线程。
    • event_scheduler是指事件调度器的监控线程。(有关事件调度器可详见 “Using the Event Scheduler” )

    TIPS

    User字段的值是system_user和 SYSTEM_USER 权限不是一回事,前者指内部线程,后者用来区分系统账户和普通账户的类别,不要搞混了。

  • Host:发出该语句的客户端的主机名(当User是system_user时,Host为空)。TCP/IP链接的主机名以 host_name:client_port 格式上报,以便更轻松地了解哪个客户端在干什么。

  • db:当前执行的命令是在哪一个数据库上。如果没有指定数据库,则值为NULL

  • Command:当前线程正在执行的命令。有关线程命令的描述,可详见 “Examining Thread Information” 。

  • Time:线程处于当前状态的时间(单位秒)。对于从库的SQL线程,该字段的值表示上次复制事件的时间和从库机器的实际时间之间经过了多少秒。详见 “Replication Implementation Details”

  • State:指示线程正在执行的操作、事件或状态。大多数State对应于非常快速的操作。如果线程在给定状态下很久,则需要排查下。

  • Info:当前线程正在执行的语句,如果未执行任何语句则值为NULL。该语句可能是发送到服务器的那条语句,也可能是内部的语句(如果某个语句执行了其他语句)。例如一条CALL语句执行了一条正在执行SELECT语句的存储过程,则Info字段会展示SELECT语句。

Command取值:

TIPS

参考 Thread Command Values

  • Binlog Dump:主库上的线程,用于将binlog内容发送到从库
  • Change user:线程正在执行更改用户操作
  • Close stmt:线程正在关闭一个prepared statement
  • Connect:一个复制从库已连接到其主库
  • Connect Out:一个复制从库正在连接到其主库
  • Create DB:线程正在执行create-database操作
  • Daemon:服务器内部线程,而非为客户端连接提供服务的线程
  • Debug:该线程正在生成调试信息
  • Delayed insert:该线程是延迟插入处理程序
  • Drop DB:线程正在执行drop-database操作。
  • Error:你懂的
  • Execute:线程正在执行一个prepared statement
  • Fetch:正在从Prepared Statement 中获取执行结果
  • Field List:该线程正在获取表的字段信息
  • Init DB:线程正在选择默认数据库。
  • Kill:该线程正在杀死另一个线程
  • Long Data:正在从prepared statement中检索long data
  • Ping:线程正在处理server-ping请求。
  • Prepare:该线程正在准备一个prepared statement
  • Processlist:该线程正在生成服务器线程相关信息
  • Query:线程正在执行一条语句
  • Quit:线程正在终止
  • Refresh:该线程是刷新表,日志或缓存;或者正在重置状态变量或在复制服务器信息。
  • Register Slave:该线程正在注册一个从库
  • Reset stmt:线程正在重置prepared statement
  • Set option:线程正在设置或重置client statement-execution选项
  • Shutdown:线程正在关闭服务器
  • Sleep:线程正在等待客户端向其发送statement
  • Statistics:该线程正在生成服务器状态信息
  • Table Dump:线程正在将表内容发送到从属服务器。
  • Time:Unused

State取值:

State的取值非常多,有一两百个,这里就不展开了,读者可直接前往官方文档查询。详见:

  • General Thread States
  • Replication Master Thread States
  • Replication Slave I/O Thread States
  • Replication Slave SQL Thread States
  • Replication Slave Connection Thread States
  • NDB Cluster Thread States
  • Event Scheduler Thread States

等价操作:

下面两个命令作用等价:

SHOW FULL PROCESSLIST
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;                                                        

事实上,SHOW PROCESSLIST的结果就是从INFORMATION_SCHEMA.PROCESSLIST表中获取的。

实用SQL:

分享几个操作 INFORMATION_SCHEMA.PROCESSLIST 表的实用SQL。

-- 按照客户端IP分组,看哪个客户端的连接数最多
select client_ip, count(client_ip) as client_num
from (select substring_index(host, ':', 1) as client_ip
      from `information_schema`.processlist) as connect_info
group by client_ip
order by client_num desc;

-- 查看正在执行的线程,并按 Time 倒排序,看看有没有执行时间特别长的线程
select *
from `information_schema`.processlist
where Command != 'Sleep'
order by Time desc;

-- 找出所有执行时间超过 5 分钟的线程,拼凑出 kill 语句,方便后面查杀
select concat('kill ', id, ';')
from `information_schema`.processlist
where Command != 'Sleep'
  and Time > 300
order by Time desc;                                                      

参考文档:

  • SHOW PROCESSLIST Statement
  • mysql: show processlist 详解

SHOW STATUS

作用:查看MYSQL服务器相关信息。返回结果解读详见:Server Status Variables

语法:

SHOW [GLOBAL | SESSION] STATUS
    [LIKE 'pattern' | WHERE expr]                                                          

示例:

SHOW STATUS;
SHOW GLOBAL STATUS like '%Slow%';                                                   

参考文档:

SHOW STATUS Statement

SHOW VARIABLES

作用:查看MySQL的变量,内容解读详见: Server System Variables

语法:

SHOW [GLOBAL | SESSION] VARIABLES
    [LIKE 'pattern' | WHERE expr]                                                        

示例:

SHOW VARIABLES;                                                        

参考文档:

SHOW VARIABLES Statement

SHOW TABLE STATUS

作用:查看表以及视图的状态

语法:

SHOW TABLE STATUS
    [{FROM | IN} db_name]
    [LIKE 'pattern' | WHERE expr]                                                           

示例:

SHOW TABLE STATUS from employees;                                                         

参考文档:

SHOW TABLE STATUS Statement

SHOW INDEX

作用:查看索引相关信息

语法:

SHOW [EXTENDED] {INDEX | INDEXES | KEYS}
    {FROM | IN} tbl_name
    [{FROM | IN} db_name]
    [WHERE expr]                                                        

示例:

SHOW INDEX FROM mytable FROM mydb;
SHOW INDEX FROM mydb.mytable;                                                      

参考文档:

SHOW INDEX Statement

SHOW ENGINE

作用:展示有关存储引擎的相关信息。

语法:

SHOW ENGINE engine_name {STATUS | MUTEX};                                                      

示例:

-- 有关innodb的内容解读详见:https://dev.mysql.com/doc/refman/8.0/en/innodb-standard-monitor.html
-- 查看INNODB这款数据库引擎相关信息
SHOW ENGINE INNODB STATUS;
SHOW ENGINE INNODB MUTEX;                                                        

参考文档:

SHOW ENGINE Statement

SHOW MASTER STATUS

作用:展示有关master binlog文件的相关信息

语法:

SHOW MASTER STATUS                                                          

示例:

SHOW MASTER STATUS;                                                        

参考文档:

SHOW MASTER STATUS Statement

SHOW SLAVE STATUS

作用:展示slave线程的相关信息

语法:

SHOW SLAVE STATUS [FOR CHANNEL channel]                                                        

示例:

SHOW SLAVE STATUS;                                                        

参考文档:

SHOW SLAVE STATUS Statement

SHOW PROCEDURE

作用:返回存储过程相关信息

语法:

SHOW PROCEDURE STATUS
    [LIKE 'pattern' | WHERE expr]                                                           

示例:

SHOW PROCEDURE STATUS LIKE 'sp1';                                                         

参考文档:

SHOW PROCEDURE STATUS Statement

SHOW FUNCTION STATUS

作用:查看函数相关信息

语法:

SHOW FUNCTION STATUS
    [LIKE 'pattern' | WHERE expr]                                                        

示例:

SHOW FUNCTION STATUS;                                                          

参考文档:

SHOW FUNCTION STATUS Statement

SHOW TRIGGERS

作用:查看触发器相关信息

语法:

SHOW TRIGGERS
    [{FROM | IN} db_name]
    [LIKE 'pattern' | WHERE expr]                                                           

示例:

SHOW TRIGGERS LIKE 'acc%';                                                       

参考文档:

SHOW TRIGGERS Statement

SHOW WARNINGS

作用:展示error、warning、note级别的诊断信息

语法:

SHOW WARNINGS [LIMIT [offset,] row_count]
SHOW COUNT(*) WARNINGS                                                         

示例:

mysql> CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4));
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO t1 VALUES(10,'mysql'), (NULL,'test'), (300,'xyz');
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 3

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1265
Message: Data truncated for column 'b' at row 1
*************************** 2. row ***************************
  Level: Warning
   Code: 1048
Message: Column 'a' cannot be null
*************************** 3. row ***************************
  Level: Warning
   Code: 1264
Message: Out of range value for column 'a' at row 3
3 rows in set (0.00 sec)

参考文档:

SHOW WARNINGS Statement

SHOW ERRORS

作用:展示error级别的诊断信息,和show warnings类似。

语法:

SHOW ERRORS [LIMIT [offset,] row_count]
SHOW COUNT(*) ERRORS                                                           

示例:

SHOW COUNT(*) ERRORS;
SELECT @@error_count;                                                         

参考文档:

SHOW ERRORS Statement

SHOW BINARY LOGS

作用:列出服务器上的所有binary log

语法:

SHOW BINARY LOGS
SHOW MASTER LOGS                                                           

示例:

SHOW BINARY LOGS;                                                        

参考文档:SHOW BINARY LOGS Statement

SHOW BINLOG EVENTS

作用:查看binary log中的事件

语法:

SHOW BINLOG EVENTS
   [IN 'log_name']
   [FROM pos]
   [LIMIT [offset,] row_count]                                                       

示例:

SHOW BINLOG EVENTS;                                                        

参考文档:SHOW BINLOG EVENTS Statement

SHOW RELAYLOG EVENTS

作用:查看复制从库的relay log事件相关信息

语法:

SHOW RELAYLOG EVENTS
    [IN 'log_name']
    [FROM pos]
    [LIMIT [offset,] row_count]
    [channel_option]

channel_option:
    FOR CHANNEL channel                                                           

示例:

SHOW RELAYLOG EVENTS;                                                          

参考文档

SHOW RELAYLOG EVENTS Statement

本文只列出了MySQL常用的诊断命令,还有一些其他的,详见 SHOW Statements文章来源地址https://www.toymoban.com/news/detail-503309.html

到了这里,关于数据库监控与调优【七】—— MySQL数据库诊断命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 性能测试之Mysql数据库调优

    性能调优前提:无监控不调优,对于mysql性能的监控前几天有文章提到过,有兴趣的朋友可以去看一下 1、我们在监控图表中关注的性能指标大概有这么几个:CPU、内存、连接数、io读写时间、io操作时间、慢查询、系统平均负载以及memoryOver 2、介绍下Grafana模板中各性能指标的

    2024年02月04日
    浏览(20)
  • MySQL高级第十一篇:数据库调优策略(定位-调优-结构)

    1.尽可能节省系统资源,以便系统可以提供更大负荷的服务。 (吞吐量更大) 2.合理的结构设计和参数调整,以提高用户操作响应的速度。 (响应速度更快) 3.减少系统的瓶颈,提高MySQL数据库整体的性能。 用户是我们的服务对象,因此他们的反馈是最直接的。虽然他们不会

    2023年04月10日
    浏览(16)
  • 面试八股文Mysql:(2)数据库调优

    数据库优化在提升系统性能是很重要的一个方面,不管是MySQL还是MongoDB还是其它的数据库。 SQL优化在提升系统性能中是成本最低 优化效果最明显的途径,可以让 吞吐量更大,响应速度更快 。如果你的团队在SQL优化这方面搞得很优秀,对你们整个大型系统可用性方面无疑是一

    2024年02月13日
    浏览(11)
  • MYSQL数据库连接池及常见参数调优

    数据库连接池是一种用于优化数据库连接的技术,它通过在应用程序和数据库之间建立一个连接池来管理和复用数据库连接,以提高数据库访问效率和性能。数据库连接池通常包含以下参数: 初始连接数(initialSize):连接池初始建立的连接数; 最小连接数(minIdle):连接

    2024年02月05日
    浏览(34)
  • Zabbix监控MySQL数据库实战

    zabbix监控mysql的方式 只是安装agent 启用模板监控 启用自定义脚本的模板监控 使用zabbix模版及结合shell脚本监控mysql 创建mysql的zabbix授权用户 mysql grant all PRIVILEGES on *.* to zabbix@\\\'localhost\\\' identified by \\\'zabbix\\\';  ###创建一个有权限的访问用户lqb密码设置zabbix Query OK, 0 rows affected (0.04 s

    2024年02月12日
    浏览(7)
  • zabbix监控mysql数据库、nginx、Tomcat

    host IP 部署 zabbix-server 192.168.198.17 zabbix服务器搭建 zabbix-mysql 192.168.198.15 zabbix客户端搭建 请参考以下配置:https://blog.csdn.net/Katie_ff/article/details/132171211?spm=1001.2014.3001.5501 需要提前在客户端安装mysql服务,具体安装过程如下: https://blog.csdn.net/Katie_ff/article/details/131640949?ops_reques

    2024年02月13日
    浏览(11)
  • MySQL进阶之性能优化与调优技巧

    1.1.2 介绍 多表查询:查询时从多张表中获取所需数据 单表查询的SQL语句:select 字段列表 from 表名; 要执行多表查询,只需要使用逗号分隔多张表即可,如: select 字段列表 from 表1, 表2; 查询用户表和部门表中的数据: 此时,我们看到查询结果中包含了大量的结果集,总共85条

    2024年02月05日
    浏览(24)
  • 使用开源实时监控系统 HertzBeat 5分钟搞定 Mysql 数据库监控告警

    Mysql 数据库介绍 MySQL是一个开源关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的开源关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 HertzBeat 介绍 H

    2024年02月10日
    浏览(13)
  • 【linux命令讲解大全】125.硬盘维护与调优:fsck和hdparm命令的使用

    检查并且试图修复文件系统中的错误 fsck 命令被用于检查并且试图修复文件系统中的错误。当文件系统发生错误时,可使用 fsck 指令尝试修复。 -a :自动修复文件系统,不询问任何问题; -A :依照 /etc/fstab 配置文件的内容,检查文件内所列的全部文件系统; -N :不执行指令

    2024年02月06日
    浏览(13)
  • zabbix-server监控mysql数据库及httpd服务、监控apache、监控ftp

    目录 一、监控mysql数据库及httpd服务 1、为server.Zabbix.com添加服务模板 2、server.zabbix.com服务端 操作 3、编辑chk_mysql.sh脚本 4、server.zabbix.com测试  二、监控apache 1、获取键值 2、服务器操作 3、zabbix监控web端导入监控模板 4、server.zabbix.com添加apache模板  三、监控ftp 1、这里用age

    2024年02月16日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包