查看MySQL 連接信息--連接空閑時間及正在執行的SQL


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語句。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM