MySQL 客户端与MySQL server建立连接后,就可以执行SQL语句了。

如何查看一个连接上是否正在执行SQL语句,或者连接是否处于空闲呢?

下面我们做下测试。

1.查看连接的空闲时间

首先看下测试程序。

代码中,每3s执行一条sql语句。

//conn_idle_time.go
package main import (
"database/sql"
"log"
"time" _ "github.com/go-sql-driver/mysql" ) var DB *sql.DB
var dataBase = "root:Aa123456@tcp(127.0.0.1:3306)/?loc=Local&parseTime=true" func mysqlInit() {
var err error
DB, err = sql.Open("mysql", dataBase)
if err != nil {
log.Fatalln("open db fail:", err)
} DB.SetMaxOpenConns(1) err = DB.Ping()
if err != nil {
log.Fatalln("ping db fail:", err)
}
} func main() {
mysqlInit() for {
execSql()
time.Sleep(3*time.Second)
}
} func execSql() {
var connection_id int
err := DB.QueryRow("select CONNECTION_ID()").Scan(&connection_id)
if err != nil {
log.Println("query connection id failed:", err)
return
} log.Println("connection id:", connection_id)
}

启动程序,输出结果如下:

2019/10/13 12:20:59 connection id: 5
2019/10/13 12:21:02 connection id: 5
2019/10/13 12:21:05 connection id: 5
2019/10/13 12:21:08 connection id: 5
2019/10/13 12:21:11 connection id: 5
2019/10/13 12:21:14 connection id: 5
2019/10/13 12:21:17 connection id: 5
2019/10/13 12:21:20 connection id: 5
2019/10/13 12:21:23 connection id: 5
2019/10/13 12:21:26 connection id: 5
2019/10/13 12:21:29 connection id: 5

可以看到,连接MySQL的connection id 为5。

接着,通过show processlist查看连接情况:

mysql> show processlist;
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 5 | root | localhost:51823 | NULL | Sleep | 0 | | NULL |
+----+------+-----------------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 5 | root | localhost:51823 | NULL | Sleep | 3 | | NULL |
+----+------+-----------------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 5 | root | localhost:51823 | NULL | Sleep | 1 | | NULL |
+----+------+-----------------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 5 | root | localhost:51823 | NULL | Sleep | 3 | | NULL |
+----+------+-----------------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 5 | root | localhost:51823 | NULL | Sleep | 2 | | NULL |
+----+------+-----------------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 5 | root | localhost:51823 | NULL | Sleep | 1 | | NULL |
+----+------+-----------------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec)

可以看到localhost:51823是连接MySQL server使用的端口,当Command列为Sleep时,表示当前连接是空闲的,Time列显示了处于当前状态的时间。

每执行一次SQL语句,Sleep状态的Time都会被重置为0.

如果当前连接一直没有执行SQL语句,那么Sleep状态的Time会一直增加,直到达到连接最大时间(由参数wait_timeout控制),最后连接断开。

再来看下,如何查看正在执行的SQL语句。

2.查看连接正在执行的SQL

将上面示例程序执行的SQL语句改为:

select SLEEP(10)

查看连接情况:

mysql> show processlist;
+----+------+-----------------+------+---------+------+------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+------------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 6 | root | localhost:52186 | NULL | Query | 1 | User sleep | select SLEEP(10) |
+----+------+-----------------+------+---------+------+------------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+------------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 7 | root | localhost:52200 | NULL | Query | 3 | User sleep | select SLEEP(10) |
+----+------+-----------------+------+---------+------+------------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+------------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 7 | root | localhost:52200 | NULL | Query | 7 | User sleep | select SLEEP(10) |
+----+------+-----------------+------+---------+------+------------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+------------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 7 | root | localhost:52200 | NULL | Query | 8 | User sleep | select SLEEP(10) |
+----+------+-----------------+------+---------+------+------------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+------------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 7 | root | localhost:52200 | NULL | Query | 10 | User sleep | select SLEEP(10) |
+----+------+-----------------+------+---------+------+------------+------------------+
2 rows in set (0.00 sec) mysql> show processlist;
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+------------------+
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 7 | root | localhost:52200 | NULL | Sleep | 12 | | NULL |
+----+------+-----------------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec)

从输出可以看到,CommandQuery表示正在执行语句,Info列显示了正在执行的具体SQL语句。

查看MySQL 连接信息--连接空闲时间及正在执行的SQL的更多相关文章

  1. 查看mysql 库信息和表结构与表创建方法

    一.查看基础信息 1.查看数据库存储位置 show global variables like "%datadir%"; 2.查看数据库的版本 select version(); ...

  2. 查看mysql相关信息

    查看本机mysql的相关信息,执行以下SQL即可: SHOW VARIABLES LIKE "%char%";

  3. mysql中如何在命令行中,执行一个SQL脚本文件?

    需求描述: 在mysql数据库的使用中,有的时候,需要直接在shell的命令行中,执行某个SQL脚本文件, 比如,要初始化数据库,创建特定的存储过程,创建表等操作,这里进行一个基本的测试. 一般情况, ...

  4. 如何查看MySQL connection id连接id

    每个MySQL连接,都有一个连接ID,可以通过 connection_id()查看. 连接id也可以通过以下方式查看: show processlist中id列 information_schema. ...

  5. 查看MySQL数据的连接

      show processlist;   select host from information_schema.processlist;   查看那台机器及连接数 select host, cur ...

  6. mysql 查看mysql相关信息

    登入数据库的时候: select @@version; select version(); 复制代码 mysql> select @@version; +-----------+ | @@ver ...

  7. mysql工具——使用mysqlshow查看mysql对象信息,查看mysql表大小

    关键词:查看表大小,mysqlshow mysqlshow --count -uroot -p test

  8. 查看mysql数据库的所有配置信息和服务器的各种状态

    查看MySQL服务器配置信息 mysql> show variables; 2, 查看MySQL服务器运行的各种状态值 mysql> show global status;

  9. 查看mysql是否安装成功和mysql的版本信息

    转自:https://blog.csdn.net/hellocsz/article/details/81241204 使用快捷键win+R打开 进入mysql的安装目录下的\bin(本人安装路劲为E: ...

随机推荐

  1. 5.SpringMVC 配置式开发-处理器适配器

    处理器适配器HandlerAdapter 1.SimpleControllerHandlerAdapter(默认) 所有实现了 Controller 接口的处理器 Bean,均是通过SimpleCon ...

  2. react 预览pdf 转换

    function getReader(response){ return new Promise(function(resolve,reject){ response.blob().then( blo ...

  3. dedecms:限制栏目列表生成的最大页数防止被采集

    dedecms:限制栏目列表生成的最大页数防止被采集 如果您的网站数据量较大,列表很多的话甚至达到上千页,生成列表时就特别耗费时间,这个缺点可以被优化掉:网站好不容易建起来,担心网站内容被采集走,如果 ...

  4. Delphi 声明特性

  5. django请求周期和请求信息

    Django的请求周期 1,概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页. 那么: Djan ...

  6. asp.net 身份验证(Update)

    ASP.NET   有四种 身份验证, 用的最广的就是 Froms   这几天 做项目    想用到 配置文件, 比较了 MVC 和ASP.NET  发现 还是 MVC 给力(MVC 叫做 过滤器  ...

  7. linux kill某一用户的所有tomcat进程

    1.查看Tomcat进程 ps -ef|grep tomcat  显示当前所有进程: ps -ef|grep tomcat-web  进程中有不同的进程,查询全名,精准kill. 2.根据进程号kil ...

  8. 车型识别API调用与批量分类车辆图片

    版权声明:本文为博主原创文章,转载 请注明出处 https://blog.csdn.net/sc2079/article/details/82189824 9月9日更:博客资源下载:链接: https ...

  9. Build with runtime packages

    编译问题:为什么我去掉Build with runtime packages,编译没问题??? 如果不去掉,就有错误:[Linker Error] Unresolved external 'TXNet ...

  10. HDU 5876 补图最短路

    开两个集合,一个存储当前顶点可以到达的点,另一个存储当前顶点不能到达的点.如果可以到达,那肯定由该顶点到达是最短的,如果不能,那就留着下一次再判. #include<bits/stdc++.h& ...