MySQL如何查看正在运行的SQL详解 mysql 查看正在执行的语句

   2023-02-07 学习力0
核心提示:目录前言processlistthreadsevents_statements_current如何查看正在运行的SQL拿到正在执行的processlist_id拿到与processlist_id对应的thread_id拿到正在执行的sql语句完整SQL总结前言​ 在安装MySQL的时候会默认初始化几个MySQL运行所需的数据库:mysql, sys

前言

​ 在安装MySQL的时候会默认初始化几个MySQL运行所需的数据库:mysql, sys, information_schema, performance_schema.这几个库存储了MySQL在运行过程中的配置信息,运行信息,参数配置,数据库信息,表信息等等。今天这个要查看正在运行的SQL主要用到的是information_schema和performance_schema这两个库。

processlist

processlist表位于information_schema库中,主要是存储的MySQL线程的一些基本信息。我们使用

desc information_schema.processlist来查看表结构:

  • ID: 线程的id
  • USER: 线程属于哪一个用户
  • HOST:客户端的host信息:hostname+端口
  • DB:线程在哪一个数据库下
  • COMMAND:线程使用哪一种命令在执行,空闲的线程状态为sleep
  • TIME:线程已经运行的时间,秒为单位
  • STATE:线程正在做什么:当前的状态,行为,或者事件
  • INFO:线程正在执行的语句,但是这个并不是很准确,所以需要使用其他的方式来完成我们的目标。

使用show processlist 或者 select * from information_schema.processlist查看processlist表

threads

threads 位于performance_schema库中,每一行记录的是一条服务器线程。当performance_schema初始化的时候,它会根据当时存在的线程填充线程表,之后每当服务器创建线程时,都会添加一条新数据。当线程结束线程表中也会删除这条数据。使用 desc performance_schema.threads 来查看表结构:

  • THREAD_ID:线程唯一id
  • NAME:与服务器中的线程监测代码相关联的名称
  • TYPE:线程类型。分为前台和后台。用户连线程是前台线程,与内部服务器活动相关的线程是后端线程。例如InnoDB内部线程。
  • PROCESSLIST_ID:上边的processlist的id
  • PROCESSLIST_USER:上边的processlist的user
  • PROCESSLIST_HOST:上边的processlist的host
  • PROCESSLIST_DB:上边的processlist的DB
  • PROCESSLIST_COMMAND:上边的processlist的COMMAND
  • PROCESSLIST_TIME:上边的processlist的TIME
  • PROCESSLIST_STATE:上边的processlist的STATE
  • PROCESSLIST_INFO:上边的processlist的INFO
  • PARENT_THREAD_ID:衍生线程的id值
  • ROLE:未使用
  • INSTRUMENTED:线程执行的事件是否插装,(YES or ON)
  • HISTORY:是否为线程记录历史事件
  • CONNECTION_TYPE:用于建立连接的协议,或者NULL用于后台线程。
  • THREAD_OS_ID:MySQL线程对应于操作系统的线程id

events_statements_current

events_statements_current 位于performance_schema库中,它存储的是当前的语句事件,表为每个线程存储一行,显示贤臣哥最近监视的语句事件的当前状态。使用desc performance_schema.events_statements_current查看表结构:

  • THREAD_ID:与事件关联的线程id,与上边threads的id对应
  • EVENT_ID:事件启动时的线程当前事件号

THREAD_ID和EVENT_ID一起标志唯一一行,没有两行具有相同的键值对

  • END_EVENT_ID:在事件开始时设置null,并在事件结束时更新为线程当前事件号
  • EVENT_NAME:事件的名称
  • SOURCE:包含生成事件的监测代码的源文件名称和监测发生所在文件的行号
  • TIMER_START,TIMER_END,TIMER_WAIT:事件的时间信息,开始时间,结束时间,事件的运行时间,单位是皮秒(万分之一秒)。
  • LOCK_TIME:等待表锁花费的时间。微妙为单位
  • SQL_TEXT:SQL语句的文本,对于没有关联SQL语句的命令为null
  • DIGEST:MD5的32个字符
  • DIGEST_TEXT:规范化语句摘要文本。
  • CURRENT_SCHEMA:语句的默认数据库
  • OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAME :对于嵌套语句这些列包含有关父语句的信息
  • OBJECT_INSTANCE_BEGIN:语句在内存的对象地址
  • MYSQL_ERRNO:语句错误号
  • RETURNED_SQLSTATE:sql状态返回
  • MESSAGE_TEXT:错误信息
  • ERRORS:该语句是否发生错误。
  • WARNINGS:警告次数
  • ROWS_AFFECTED:受语句影响的行数
  • ROWS_SENT:语句返回的行数
  • ROWS_EXAMINED:服务器层检查的行数
    • CREATED_TMP_DISK_TABLES
    • CREATED_TMP_TABLES
    • SELECT_FULL_JOIN
    • SELECT_FULL_RANGE_JOIN
    • SELECT_RANGE
    • SELECT_RANGE_CHECK
    • SELECT_SCAN
    • SORT_MERGE_PASSES
    • SORT_RANGE
    • SORT_ROWS
    • SORT_SCAN
    • NO_INDEX_USED
    • NO_GOOD_INDEX_USED
    • NESTING_EVENT_ID
    • NESTING_EVENT_TYPE
    • NESTING_EVENT_LEVEL

如何查看正在运行的SQL

1、processlist表记录的是MySQL正在运行的线程信息,而每一个线程在threads表中都有用线程的一个唯一id >>> thread_id。events_statements_current表中记录着唯一线程id和该线程对应的SQL语句sql_text.

2、所以我们可以先在processlist拿到processlist对应的id

3、通过threads表的字段分析,我们之后一个processlist_id和thread_id一一对应,所以之后在threads表中通过processlist_id拿到thread_id

4、最后一步就是关键,我们通过thread_id在events_statements_current表中拿到sql_text,也就是我们需要拿到的sql语句。

拿到正在执行的processlist_id

select id from information_schema.processlist

拿到与processlist_id对应的thread_id

select thread_id from performance_schema.threads where processlist_id in (上一步拿到的processlist_id列表)

拿到正在执行的sql语句

select thread_id, sql_text from performance_schema.events_statements_current where thread_id in (上一步拿到的thread_id列表)

完整SQL

SELECT a.*, c.thread_id, c.sql_text from information_schema.processlist a
LEFT JOIN performance_schema.threads b on a.id = b.PROCESSLIST_ID
LEFT JOIN performance_schema.events_statements_current c on c.THREAD_ID = b.THREAD_ID

总结

原文地址:https://blog.csdn.net/weixin_40920359/article/details/125992280
 
标签: mysql 运行 sql
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • mysql_pconnect的水挺深,apache下的数据库长连
      php的mysql持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看apache的脸色,还得听mysql指挥。  对于做为apache模块运行的php来说,要实现mysql持久化连接,首先得取决于apache这个
    02-10
  • linux下mysql开启远程访问权限及防火墙开放3306端口
    linux下mysql开启远程访问权限及防火墙开放3306
    开启mysql的远程访问权限默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限。主流的有两种方法,改表法和授权法。相对而言,改表法比较容易一点,个人也是比较倾向于使用这种方法,因此,这
    02-10
  • php+apache+mysql
    apache2.4.7+php5.4[http://www.myhack58.com/Article/sort099/sort0100/2012/35578.htm] apachehttpd.conf:DocumentRoot:网站根目录,默认/htdocsDirectoryIndex:默认显示的文件名.默认index.html,可以有多个值.如index.html index.jsp.用空格分开Listen:端
    02-10
  • Windows下搭建apache+mysql+php开发环境
    Windows下搭建apache+mysql+php开发环境
      最近因在windows环境下搭建php开发环境遇到了各式各样的问题,故在此加以归纳总结。目的有二,一是为了避免以后再次遇到类似的问题,二是为需要的同学提供启示和借鉴。  一:下载需要的软件apache   httpd-2.2.22-win32-x86-no_ssl.msimysql     mys
    02-10
  • PHP从零开始:Apache+PHP+MySQL安装配置
    初学一个东西,最怕的恐怕就是环境配置了。我就经常碰到这样的事而浪费很多时间。  今天在网上搜索到一个图文并茂的Apache+PHP+MySQL教程,按着一步一步安装和配置下来,很快就搞定了!这里贴一下教程的地址,希望其他初学者也可以很快搞定~http://tech.163
    02-10
  • Linux测试环境搭建apache+mysql+php
    LinuxRed Hat Enterprise Linux Server release 5.4 (Tikanga)Kernel \r on an \mApache +Mysql+php搭建准备:Apache postgresql-libs-8.1.11-1.el5_1.1.i386.rpmapr-1.2.7-11.el5_3.1.i386.rpmapr-util-1.2.7-7.el5_3.2.i386.rpmhttpd-2.2.3-31.el5.i386.rpm
    02-10
  • windows支持apache、mysql、php集成环境推荐wam
    对英文不感冒的同学很容易下载到更新包,而且官方的下载速度很慢,此文件为官方原版下载,现在分享给大家。链接:https://pan.baidu.com/s/1LYyJi6FddvkQQNrLp4L6Ww 提取码:edsaMD5: 4C32136656EB25E2951E1539D264339ESHA1: 15EAC178B27EE5298883DC3BA351B81
    02-10
  • 如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境
    如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境在网上搜资料,自己在本地虚拟机上尝试搭建,弄了整整一天一夜,终于弄好了.网上的资料,虽然很多,但大多都是重复的,拿去试了之后,又很多都不能得到正确的结果.最终找到了适合我的linux环境的搭建方式;在这里贴出来:这
    02-10
  • CentOS 6下搭建Apache+MySQL+PHP+SSL
    网上的一些文章都已经比较老了,现在版本高了之后,其实配置是很省力的(不考虑什么负载的话)分享全过程,出了文中提到的安装epel rpmfushion 源指令不同外,其他的过程也适用与Centos 51.安装CentOS 6 ,可以选择最小安装,也可以安装桌面2.升级系统yum upda
    02-10
  • lnamp完整版[linux+apache2.4+php5.6.6+mysql5.
    Lnamp环境安装实录将采用的开源软件:Apache [WEB动态脚本服务器,做nginx的反向代理8080端口]Tengine [WEB静态文件服务器80端口]MySQL PHP 1.Apache安装A.apr安装wget -c http://mirror.bjtu.edu.cn/apache/apr/apr-1.5.1.tar.gztar -zxvf apr-1..5.tar.gzcd
    02-10
点击排行