- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者帳戶
- MySQL - 解鎖使用者帳戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 截斷表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - INSERT 查詢
- MySQL - SELECT 查詢
- MySQL - UPDATE 查詢
- MySQL - DELETE 查詢
- MySQL - REPLACE 查詢
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION vs JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - BEFORE INSERT 觸發器
- MySQL - AFTER INSERT 觸發器
- MySQL - BEFORE UPDATE 觸發器
- MySQL - AFTER UPDATE 觸發器
- MySQL - BEFORE DELETE 觸發器
- MySQL - AFTER DELETE 觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式 & 運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 通用表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字元集
- MySQL - 校對規則
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 今日日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - 顯示程序列表
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - Coalesce() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 顯示程序列表
MySQL 資料庫提供多使用者環境,允許多個客戶端同時訪問資料庫。程序定義為使用者在 MySQL 伺服器上執行的操作。多個使用者可以在 MySQL 伺服器上同時執行多個程序。
什麼是 MySQL 程序列表?
MySQL 程序列表定義為當前正在由伺服器中執行的一組使用者執行緒執行的操作列表。
如果使用者具有 PROCESS 許可權,他們可以檢視伺服器中的所有執行緒,包括其他使用者的執行緒。但是,如果使用者沒有此許可權,非匿名使用者只能訪問其自身執行緒的資訊;而匿名使用者則無法訪問執行緒資訊。
要檢索有關在 MySQL 伺服器上執行的這些程序的資訊,我們可以使用 SHOW PROCESSLIST 命令。
MySQL SHOW PROCESSLIST 命令
MySQL SHOW PROCESSLIST 命令用於顯示有關當前在 MySQL 伺服器上執行的程序的資訊。
當處理“連線過多”錯誤時,此語句特別有用,因為它提供了有關這些連線及其操作的詳細資訊。此外,MySQL 為具有 CONNECTION_ADMIN 許可權(或舊版本中的 SUPER 許可權)的管理員保留一個額外的連線,以確保他們始終可以訪問系統。
語法
以下是 SHOW PROCESSLIST 命令的語法:
SHOW [FULL] PROCESSLIST
這裡,FULL 關鍵字是可選的。但是,如果您省略 FULL 關鍵字,SHOW PROCESSLIST 只顯示 Info 欄位中每個語句的前 100 個字元。
示例
讓我們來看一個示例,以顯示 SHOW PROCESSLIST 命令的用法。我們將使用 '\G' 分隔符來垂直列印資訊表:
SHOW PROCESSLIST\G
輸出
以下是獲得的輸出:
*************************** 1. row ***************************
Id: 5
User: event_scheduler
Host: localhost
db: NULL
Command: Daemon
Time: 1065209
State: Waiting on empty queue
Info: NULL
*************************** 2. row ***************************
Id: 56
User: root
Host: localhost:51995
db: customers
Command: Query
Time: 0
State: init
Info: SHOW PROCESSLIST
2 rows in set (0.00 sec)
示例
現在,讓我們也嘗試在 SHOW PROCESSLIST 命令中使用 FULL 關鍵字,如下例所示:
SHOW FULL PROCESSLIST\G
輸出
獲得的輸出如下所示:
*************************** 1. row ***************************
Id: 5
User: event_scheduler
Host: localhost
db: NULL
Command: Daemon
Time: 1065138
State: Waiting on empty queue
Info: NULL
*************************** 2. row ***************************
Id: 56
User: root
Host: localhost:51995
db: customers
Command: Query
Time: 0
State: init
Info: SHOW FULL PROCESSLIST
2 rows in set (0.00 sec)
輸出解釋
從 SHOW PROCESSLIST 命令獲得的輸出結果集包含以下列:
Id - 它是連線的標識。
User - 這包含發出語句的 MySQL 使用者的名稱。
Host - 發出語句的客戶端的主機名(系統使用者除外,因為它沒有主機)。TCP/IP 連線的主機名以“主機名:客戶端埠”格式表示,以便更容易確定客戶端的操作。
db - 這是執行緒的預設資料庫,如果沒有選擇任何資料庫,則為 NULL。
Command - 顯示相應執行緒代表客戶端執行的命令型別,如果會話處於空閒狀態,則顯示 Sleep。
Time - 執行緒處於當前狀態的秒數。
State - 一個動作、事件或狀態,指示執行緒正在執行的操作。大多數狀態對應於非常快速的操作。如果執行緒在給定狀態下停留許多秒,則可能存在需要調查的問題。
Info - 執行緒正在執行的語句。如果它沒有執行任何語句,則顯示 NULL。
使用客戶端程式顯示程序列表
我們還可以使用客戶端程式顯示程序列表。
語法
要透過PHP程式檢索MySQL伺服器上正在執行的程序資訊,我們需要使用mysqli函式query()執行“SHOW PROCESSLIST”命令,如下所示:
$sql = "SHOW PROCESSLIST"; $mysqli->query($sql);
要透過JavaScript程式檢索MySQL伺服器上正在執行的程序資訊,我們需要使用mysql2庫的query()函式執行“SHOW PROCESSLIST”命令,如下所示:
sql = "SHOW PROCESSLIST"; con.query(sql)
要透過Java程式檢索MySQL伺服器上正在執行的程序資訊,我們需要使用JDBC函式executeQuery()執行“SHOW PROCESSLIST”命令,如下所示:
String sql = "SHOW PROCESSLIST"; statement.executeQuery(sql);
要透過Python程式檢索MySQL伺服器上正在執行的程序資訊,我們需要使用MySQL Connector/Python的execute()函式執行“SHOW PROCESSLIST”命令,如下所示:
show_processlist_query = "SHOW PROCESSLIST" cursorObj.execute(show_processlist_query)
示例
以下是程式示例:
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$db = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db);
if ($mysqli->connect_errno) {
printf("Connect failed: %s
", $mysqli->connect_error);
exit();
}
//printf('Connected successfully.
');
$sql = "SHOW PROCESSLIST";
if($result = $mysqli->query($sql)){
printf("Show query executed successfully...!\n");
printf("Process list: \n");
while($row = mysqli_fetch_array($result)){
print_r($row);
}
}
if($mysqli->error){
printf("Error message: ", $mysqli->error);
}
$mysqli->close();
輸出
獲得的輸出如下所示:
Show query executed successfully...!
Process list:
Array
(
[0] => 5
[Id] => 5
[1] => event_scheduler
[User] => event_scheduler
[2] => localhost
[Host] => localhost
[3] =>
[db] =>
[4] => Daemon
[Command] => Daemon
[5] => 886450
[Time] => 886450
[6] => Waiting on empty queue
[State] => Waiting on empty queue
[7] =>
[Info] =>
)
Array
(
[0] => 602
[Id] => 602
[1] => root
[User] => root
[2] => localhost:54978
[Host] => localhost:54978
[3] => tutorials
[db] => tutorials
[4] => Sleep
[Command] => Sleep
[5] => 2994
[Time] => 2994
[6] =>
[State] =>
[7] =>
[Info] =>
)
Array
(
[0] => 641
[Id] => 641
[1] => root
[User] => root
[2] => localhost:56444
[Host] => localhost:56444
[3] => tutorials
[db] => tutorials
[4] => Query
[Command] => Query
[5] => 0
[Time] => 0
[6] => init
[State] => init
[7] => SHOW PROCESSLIST
[Info] => SHOW PROCESSLIST
)
var mysql = require('mysql2');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "Nr5a0204@123"
});
// Connecting to MySQL
con.connect(function (err) {
if (err) throw err;
console.log("Connected!");
console.log("--------------------------");
// Create a new database
sql = "Create Database TUTORIALS";
con.query(sql);
sql = "USE TUTORIALS";
con.query(sql);
sql = "SHOW PROCESSLIST"
con.query(sql, function(err, result){
if (err) throw err
console.log("**usage of SHOW PROCESSLIST command**");
console.log(result);
console.log("--------------------------");
});
sql = "SHOW FULL PROCESSLIST"
con.query(sql, function(err, result){
if (err) throw err
console.log("**usage of FULL keyword with the SHOW PROCESSLIST command:**");
console.log(result);
});
});
輸出
獲得的輸出如下所示:
Connected!
--------------------------
**usage of SHOW PROCESSLIST command**
[
{
Id: 5,
User: 'event_scheduler',
Host: 'localhost',
db: null,
Command: 'Daemon',
Time: 1279159,
State: 'Waiting on empty queue',
Info: null
},
{
Id: 310,
User: 'root',
Host: 'localhost:64181',
db: null,
Command: 'Sleep',
Time: 6,
State: '',
Info: null
},
{
Id: 311,
User: 'root',
Host: 'localhost:64182',
db: null,
Command: 'Sleep',
Time: 4,
State: '',
Info: null
},
{
Id: 329,
User: 'root',
Host: 'localhost:64371',
db: 'tutorials',
Command: 'Query',
Time: 0,
State: 'init',
Info: 'SHOW PROCESSLIST'
}
]
--------------------------
**usage of FULL keyword with the SHOW PROCESSLIST command:**
[
{
Id: 5,
User: 'event_scheduler',
Host: 'localhost',
db: null,
Command: 'Daemon',
Time: 1279159,
State: 'Waiting on empty queue',
Info: null
},
{
Id: 310,
User: 'root',
Host: 'localhost:64181',
db: null,
Command: 'Sleep',
Time: 6,
State: '',
Info: null
},
{
Id: 311,
User: 'root',
Host: 'localhost:64182',
db: null,
Command: 'Sleep',
Time: 4,
State: '',
Info: null
},
{
Id: 329,
User: 'root',
Host: 'localhost:64371',
db: 'tutorials',
Command: 'Query',
Time: 0,
State: 'init',
Info: 'SHOW FULL PROCESSLIST'
}
]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class ProcessList {
public static void main(String[] args) {
String url = "jdbc:mysql://:3306/TUTORIALS";
String user = "root";
String password = "password";
ResultSet rs;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, user, password);
Statement st = con.createStatement();
//System.out.println("Database connected successfully...!");
String sql = "SHOW PROCESSLIST";
rs = st.executeQuery(sql);
System.out.println("Show statement executed successfully...!");
System.out.println("ProcessList: ");
while(rs.next()) {
String p_list = rs.getString(1);
System.out.println(p_list);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
輸出
獲得的輸出如下所示:
Show statement executed successfully...! ProcessList: 5 13 43
import mysql.connector
# Establishing the connection
connection = mysql.connector.connect(
host='localhost',
user='root',
password='password',
database='tut'
)
# Creating a cursor object
cursorObj = connection.cursor()
# show trigger
show_processlist_query = "SHOW PROCESSLIST"
cursorObj.execute(show_processlist_query)
result = cursorObj.fetchall()
print("Processlist in the database:")
for row in result:
print(row)
# close the cursor and connection
cursorObj.close()
connection.close()
輸出
獲得的輸出如下所示:
Processlist in the database: (5, 'event_scheduler', 'localhost', None, 'Daemon', 1029217, 'Waiting on empty queue', None) (322, 'root', 'localhost:56077', 'tut', 'Sleep', 309, '', None) (384, 'root', 'localhost:58907', 'tut', 'Query', 0, 'init', 'SHOW PROCESSLIST')