欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL使用SHOW PROCESSLIST的實(shí)現(xiàn)

 更新時間:2025年03月28日 11:36:32   作者:半桶水專家  
本文主要介紹了MySQL使用SHOW PROCESSLIST的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、SHOW PROCESSLIST 顯示進(jìn)程列表

SHOW [FULL] PROCESSLIST 用于查看當(dāng)前MySQL服務(wù)器上的所有運(yùn)行中的進(jìn)程列表信息。這個命令可以幫助我們了解哪些查詢正在執(zhí)行,它們的狀態(tài)是什么,以及它們已經(jīng)執(zhí)行了多長時間。
示例:

mysql> SHOW PROCESSLIST;
+----+------+-----------+----+---------+------+-------+------------------+
| Id | User | Host      | db | Command | Time | State | Info             |
+----+------+-----------+----+---------+------+-------+------------------+
| 5  | root | localhost |    | Query   | 0    | init  | show processlist |
+----+------+-----------+----+---------+------+-------+------------------+
1 row in set (0.00 sec)

其中每行顯示的信息包括:

  • Id: 線程的唯一標(biāo)識符。
  • User: 執(zhí)行該命令的用戶名。
  • Host: 用戶的主機(jī)名。通常是客戶端IP地址、端口號或者都有。
  • db: 當(dāng)前線程正在工作的數(shù)據(jù)庫。如果沒有選定數(shù)據(jù)庫,則為NULL。
  • Command: 線程正在執(zhí)行的命令類型。例如:Sleep,Query,Locked等。
  • Time: 命令開始執(zhí)行以來的秒數(shù)。對于'Sleep'命令,這是線程進(jìn)入睡眠狀態(tài)的時間。
  • State: 顯示線程的狀態(tài)信息。這對找出性能問題特別有用。
  • Info: 顯示線程正在執(zhí)行的查詢。若沒有查詢在執(zhí)行則該列為NULL。

如果沒有 FULL 關(guān)鍵字, SHOW PROCESSLIST 則僅顯示 Info 字段中每個語句的前 100 個字符。

2、線程Command有以下值:

  • Binlog Dump:這是用于將二進(jìn)制日志內(nèi)容發(fā)送到副本的復(fù)制源上的線程。
  • Change user:線程正在執(zhí)行更改用戶操作。
  • Close stmt:線程正在關(guān)閉預(yù)備語句。
  • Connect:被連接到源的復(fù)制接收器線程以及復(fù)制工作器線程使用。
  • Connect Out:副本正在連接到其源。
  • Create DB:線程正在執(zhí)行創(chuàng)建數(shù)據(jù)庫操作。
  • Daemon:此線程對服務(wù)器內(nèi)部而言,不是為客戶端連接提供服務(wù)的線程。
  • Debug:線程正在生成調(diào)試信息。
  • Delayed insert:線程是一個延遲插入處理器。
  • Drop DB:線程正在執(zhí)行刪除數(shù)據(jù)庫操作。
  • Error:Execute:線程正在執(zhí)行預(yù)備語句。
  • Fetch:線程正在獲取執(zhí)行預(yù)備語句的結(jié)果。
  • Field List:線程正在檢索表列的信息。
  • Init DB:線程正在選擇默認(rèn)數(shù)據(jù)庫。
  • Kill:線程正在殺死另一個線程。
  • Long Data:線程正在檢索執(zhí)行預(yù)備語句結(jié)果中的長數(shù)據(jù)。
  • Ping:線程正在處理服務(wù)器ping請求。
  • Prepare:線程正在準(zhǔn)備預(yù)備語句。
  • Processlist:線程正在生成關(guān)于服務(wù)器線程的信息。
  • Query:用戶客戶端在執(zhí)行查詢時使用,由單線程復(fù)制應(yīng)用程序線程使用,以及由復(fù)制協(xié)調(diào)器線程使用。
  • Quit:線程正在終止。
  • Refresh:線程正在刷新表、日志或緩存,或重置狀態(tài)變量或復(fù)制服務(wù)器信息。
  • Register Slave:線程正在注冊副本服務(wù)器。
  • Reset stmt:線程正在重置預(yù)備語句。
  • Set option:線程正在設(shè)置或重置客戶端語句執(zhí)行選項(xiàng)。
  • Shutdown:線程正在關(guān)閉服務(wù)器。
  • Sleep:線程正在等待客戶端發(fā)送新的語句給它。
  • Statistics:線程正在生成服務(wù)器狀態(tài)信息。
  • Time:未使用。

3、線程狀態(tài)State分類有以下值

以下列表描述了與通用查詢處理相關(guān)的線程State值,并且不涉及更專門的活動,如復(fù)制。其中許多對于在服務(wù)器中查找錯誤非常有用。

  • After create:當(dāng)線程創(chuàng)建一個表(包括內(nèi)部臨時表)時,會出現(xiàn)這種情況,在創(chuàng)建表的函數(shù)結(jié)束時。即使由于某些錯誤無法創(chuàng)建表,也會使用此狀態(tài)。
  • altering table:服務(wù)器正在執(zhí)行就地ALTER TABLE。
  • Analyzing:線程正在計(jì)算MyISAM表鍵分布(例如,用于ANALYZE TABLE)。
  • checking permissions:線程正在檢查服務(wù)器是否具有執(zhí)行語句所需的權(quán)限。
  • Checking table:線程正在執(zhí)行表檢查操作。
  • cleaning up:線程已處理一條命令,并準(zhǔn)備釋放內(nèi)存并重置某些狀態(tài)變量。
  • closing tables:線程正在將更改后的表數(shù)據(jù)刷新到磁盤并關(guān)閉已使用的表。這應(yīng)該是一個快速的操作。如果不是,驗(yàn)證你是否沒有滿磁盤,并且磁盤沒有在非常繁重的使用中。
  • committing alter table to storage engine:服務(wù)器已完成就地ALTER TABLE并正在提交結(jié)果。
  • converting HEAP to ondisk:線程正在將內(nèi)部臨時表從MEMORY表轉(zhuǎn)換為磁盤上的表。
  • copy to tmp table:線程正在處理ALTER TABLE語句。在已創(chuàng)建新結(jié)構(gòu)的表之后但在將行復(fù)制進(jìn)去之前發(fā)生此狀態(tài)。
  • 對于此狀態(tài)的線程,可以使用性能模式來獲取復(fù)制操作的進(jìn)度。
  • Copying to group table:如果語句具有不同的ORDER BY和GROUP BY條件,則將按組排序行并復(fù)制到臨時表中。
  • Copying to tmp table:服務(wù)器正在將數(shù)據(jù)復(fù)制到內(nèi)存中的臨時表。
  • Copying to tmp table on disk:服務(wù)器正在將數(shù)據(jù)復(fù)制到磁盤上的臨時表。臨時結(jié)果集已經(jīng)變得過大。因此,線程正在將臨時表從內(nèi)存格式更改為基于磁盤的格式以節(jié)省內(nèi)存。
  • Creating index:線程正在處理MyISAM表的ALTER TABLE ... ENABLE KEYS。
  • Creating sort index:線程正在處理使用內(nèi)部臨時表解析的SELECT。
  • creating table:線程正在創(chuàng)建表。這包括創(chuàng)建臨時表。
  • Creating tmp table:線程正在在內(nèi)存或磁盤上創(chuàng)建臨時表。如果在內(nèi)存中創(chuàng)建了表,但稍后將其轉(zhuǎn)換為磁盤上的表,則在該操作期間的狀態(tài)為Copying to tmp table on disk。
  • deleting from main table:服務(wù)器正在執(zhí)行多表刪除的第一部分。它只從第一個表中刪除,并保存列和偏移量以用于從其他(引用)表中刪除。
  • deleting from reference tables:服務(wù)器正在執(zhí)行多表刪除的第二部分,并從其他表中刪除匹配的行。
  • discard_or_import_tablespace:線程正在處理ALTER TABLE ... DISCARD TABLESPACE或ALTER TABLE ... IMPORT TABLESPACE語句。
  • end:在ALTER TABLE,CREATE VIEW,DELETE,INSERT,SELECT或UPDATE語句的結(jié)束但在清理之前發(fā)生。
  • 對于結(jié)束狀態(tài),可能正在發(fā)生以下操作:
  • 將事件寫入二進(jìn)制日志
  • 釋放內(nèi)存緩沖區(qū),包括blob:executing:線程已開始執(zhí)行語句。
  • Execution of init_command:線程正在執(zhí)行init_command系統(tǒng)變量的值中的語句。
  • freeing items:線程已執(zhí)行一條命令。這個狀態(tài)通常在cleaning up之前出現(xiàn)。
  • FULLTEXT initialization:服務(wù)器正在準(zhǔn)備進(jìn)行自然語言全文搜索。
  • init:在初始化ALTER TABLE,DELETE,INSERT,SELECT或UPDATE語句之前發(fā)生。在這種狀態(tài)下,服務(wù)器采取的操作包括刷新二進(jìn)制日志和InnoDB日志。
  • Killed:有人向線程發(fā)送了一個KILL語句,它應(yīng)該在下次檢查kill標(biāo)志時中止。該標(biāo)志在MySQL的每一個主要循環(huán)中都會被檢查,但在某些情況下,線程可能還需要短暫的時間才能死亡。如果線程被其他線程鎖定,則在其他線程釋放其鎖定后立即生效。
  • Locking system tables:線程正在嘗試鎖定一個系統(tǒng)表(例如,一個時區(qū)或日志表)。
  • logging slow query:線程正在將語句寫入慢查詢?nèi)罩尽?/li>
  • login:連接線程的初始狀態(tài),直到客戶端成功進(jìn)行身份驗(yàn)證。
  • manage keys:服務(wù)器正在啟用或禁用表索引。
  • Opening system tables:線程正在嘗試打開一個系統(tǒng)表(例如,一個時區(qū)或日志表)。
  • Opening tables:線程正在嘗試打開表。這應(yīng)該是非??焖俚倪^程,除非有什么阻止打開。例如,ALTER TABLE或LOCK TABLE語句可以阻止打開表,直到語句完成。還值得檢查您的table_open_cache值是否足夠大。
  • 對于系統(tǒng)表,使用Opening system tables狀態(tài)代替。
  • optimizing:服務(wù)器正在為查詢執(zhí)行初始優(yōu)化。
  • preparing:此狀態(tài)在查詢優(yōu)化期間發(fā)生。
  • preparing for alter table:服務(wù)器正在準(zhǔn)備執(zhí)行就地ALTER TABLE。
  • Purging old relay logs:線程正在刪除不需要的中繼日志文件。
  • query end:處理查詢后但在freeing items狀態(tài)之前發(fā)生此狀態(tài)。
  • Receiving from client:服務(wù)器正在從客戶端讀取數(shù)據(jù)包。
  • Removing duplicates:查詢正在以SELECT DISTINCT的方式使用,以致MySQL無法在早期階段優(yōu)化掉DISTINCT操作。由于此原因,MySQL需要一個額外的階段來移除所有重復(fù)的行,然后再將結(jié)果發(fā)送給客戶端。
  • removing tmp table:線程在處理完SELECT語句后正在移除內(nèi)部臨時表。如果沒有創(chuàng)建臨時表,則不使用此狀態(tài)。
  • rename:線程正在重命名表。
  • rename result table:線程正在處理ALTER TABLE語句,已經(jīng)創(chuàng)建了新表,并正將其重命名以替換原始表。
  • Reopen tables:線程獲取了表的鎖,但在獲取鎖后發(fā)現(xiàn)表的底層結(jié)構(gòu)已更改。它已釋放了鎖,關(guān)閉了表,正在嘗試重新打開它。
  • Repair by sorting:修復(fù)代碼使用排序來創(chuàng)建索引。
  • Repair done:線程已完成MyISAM表的多線程修復(fù)。
  • Repair with keycache:修復(fù)代碼使用一次通過鍵緩存創(chuàng)建一個鍵。這比Repair by sorting慢得多。
  • Rolling back:線程正在回滾事務(wù)。
  • Saving state:對于MyISAM表操作,如修復(fù)或分析,線程正在將新表狀態(tài)保存到.MYI文件頭。狀態(tài)包括行數(shù)、AUTO_INCREMENT計(jì)數(shù)器和鍵分布等信息。
  • Searching rows for update:線程正在進(jìn)行第一階段,查找所有匹配的行,然后更新它們。如果UPDATE改變了用于查找所涉及行的索引,則必須這樣做。
  • Sending data:在MySQL 8.0.17之前:線程正在讀取和處理SELECT語句的行,并將數(shù)據(jù)發(fā)送給客戶端。因?yàn)樵诖藸顟B(tài)期間發(fā)生的操作傾向于執(zhí)行大量的磁盤訪問(讀取),所以它通常是給定查詢在其生命周期內(nèi)運(yùn)行時間最長的狀態(tài)。MySQL 8.0.17及更高版本:此狀態(tài)不再單獨(dú)指示,而是包含在Executing狀態(tài)中。
  • Sending to client:服務(wù)器正在將數(shù)據(jù)包寫入客戶端。
  • setup:線程開始進(jìn)行ALTER TABLE操作。
  • Sorting for group:線程正在執(zhí)行排序以滿足GROUP BY。
  • Sorting for order:線程正在執(zhí)行排序以滿足ORDER BY。
  • Sorting index:線程正在對索引頁進(jìn)行排序,以便在MyISAM表優(yōu)化操作期間更有效地訪問。
  • Sorting result:對于SELECT語句,此為與Creating sort index類似,但適用于非臨時表。
  • starting:語句執(zhí)行開始的第一階段。
  • statistics:服務(wù)器正在計(jì)算統(tǒng)計(jì)信息以制定查詢執(zhí)行計(jì)劃。如果線程在此狀態(tài)下停留了很長時間,那么服務(wù)器可能在磁盤綁定中執(zhí)行其他工作。
  • System lock:線程已調(diào)用mysql_lock_tables()并且自那時起線程狀態(tài)未更新。這是一個非常通用的狀態(tài),可能出于許多原因。
  • 例如,線程將請求或正在等待表的內(nèi)部或外部系統(tǒng)鎖。當(dāng)InnoDB在執(zhí)行LOCK TABLES期間等待表級鎖時,可能會發(fā)生這種情況。如果由于請求外部鎖而導(dǎo)致這種狀態(tài),并且您沒有使用訪問相同MyISAM表的多個mysqld服務(wù)器,則可以使用--skip-external-locking選項(xiàng)禁用外部系統(tǒng)鎖。然而,默認(rèn)情況下是禁用外部鎖定的,所以有可能這個選項(xiàng)沒有效果。對于SHOW PROFILE,此狀態(tài)意味著線程正在請求鎖(不是等待它)。
  • 對于系統(tǒng)表,使用Locking system tables狀態(tài)代替。
  • update:線程準(zhǔn)備開始更新表。
  • Updating:線程正在搜索要更新的行并更新它們。
  • updating main table:服務(wù)器正在執(zhí)行多表更新的第一部分。它只更新第一個表,并保存列和偏移量以用于更新其他(引用)表。
  • updating reference tables:服務(wù)器正在執(zhí)行多表更新的第二部分,并更新其他表中的匹配行。
  • User lock:線程將請求或正在等待使用GET_LOCK()調(diào)用請求的咨詢鎖。對于SHOW PROFILE,這種狀態(tài)意味著線程正在請求鎖(而不是等待它)。
  • User sleep:線程已調(diào)用SLEEP()。
  • Waiting for commit lock:FLUSH TABLES WITH READ LOCK正在等待提交鎖。
  • waiting for handler commit:線程正在等待事務(wù)提交,與查詢處理的其他部分相比。
  • Waiting for tables:線程收到通知,表的底層結(jié)構(gòu)已經(jīng)更改,它需要重新打開表以獲取新的結(jié)構(gòu)。但是,要重新打開表,它必須等待所有其他線程都關(guān)閉了所述表。
  • 如果另一個線程在所述表上使用了FLUSH TABLES或以下語句之一:FLUSH TABLES tbl_name,ALTER TABLE,RENAME TABLE,REPAIR TABLE,ANALYZE TABLE,OPTIMIZE TABLE,則會發(fā)生此通知。
  • Waiting for table flush:線程正在執(zhí)行FLUSH TABLES并等待所有線程關(guān)閉其表,或者線程收到通知說表的底層結(jié)構(gòu)已經(jīng)更改,它需要重新打開表以獲取新的結(jié)構(gòu)。但是,要重新打開表,它必須等待所有其他線程都關(guān)閉了所述表。
  • 如果另一個線程在所述表上使用了FLUSH TABLES或以下語句之一:FLUSH TABLES tbl_name,ALTER TABLE,RENAME TABLE,REPAIR TABLE,ANALYZE TABLE,OPTIMIZE TABLE,則會發(fā)生此通知。
  • Waiting for lock_type lock:服務(wù)器正在等待獲得THR_LOCK鎖或元數(shù)據(jù)鎖定子系統(tǒng)的鎖,其中l(wèi)ock_type指示鎖的類型。
  • 這種狀態(tài)表示等待一個THR_LOCK:
  • Waiting for table level lock:這些狀態(tài)表示等待元數(shù)據(jù)鎖:
  • Waiting for event metadata lock:Waiting for global read lock:Waiting for schema metadata lock:Waiting for stored function metadata lock:Waiting for stored procedure metadata lock:Waiting for table metadata lock:Waiting for trigger metadata lock:有關(guān)表鎖指標(biāo)的信息。有關(guān)元數(shù)據(jù)鎖定的信息。要查看哪些鎖阻止了鎖請求。
  • Waiting on cond:線程在等待某個條件變?yōu)檎娴耐ㄓ脿顟B(tài)。沒有特定的狀態(tài)信息可用。
  • Writing to net:服務(wù)器正在將數(shù)據(jù)包寫入網(wǎng)絡(luò)。

相關(guān)文章

  • 面試官問訂單ID是如何生成的?難道不是MySQL自增主鍵

    面試官問訂單ID是如何生成的?難道不是MySQL自增主鍵

    最近在考慮訂單id怎么生成,下面這篇文章主要給大家介紹了關(guān)于面試官問訂單ID是如何生成的?難道不是MySQL自增主鍵的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • mysql常見的錯誤提示問題處理小結(jié)

    mysql常見的錯誤提示問題處理小結(jié)

    本文總結(jié)了在使用mysql過程中經(jīng)常遇到的3種錯誤提示(error1067,error1061,error1045)的問題的處理方法,都是本人在實(shí)際應(yīng)用中處理檢驗(yàn)過的,希望對大家有所幫助
    2014-08-08
  • MySQL動態(tài)SQL拼接實(shí)例詳解

    MySQL動態(tài)SQL拼接實(shí)例詳解

    動態(tài)SQL呢?首先是SQL語句,是根據(jù)條件來拼接SQL,下面這篇文章主要給大家介紹了關(guān)于MySQL動態(tài)SQL拼接的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • 淺析MYSQL REPEATABLE-READ隔離級別

    淺析MYSQL REPEATABLE-READ隔離級別

    REPEATABLE-READ 即可重復(fù)讀,autocommit= 0或者START TRANSACTION狀態(tài)下select表的內(nèi)容不會改變
    2014-07-07
  • 配置mysql允許遠(yuǎn)程連接的方法

    配置mysql允許遠(yuǎn)程連接的方法

    默認(rèn)情況下,MySQL只允許本地登錄,如果要開啟遠(yuǎn)程連接,則需要修改/etc/my.cnf文件
    2013-02-02
  • mysql批量刪除大量數(shù)據(jù)

    mysql批量刪除大量數(shù)據(jù)

    這篇文章主要介紹了mysql批量刪除大量數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • MySQL查看表和清空表的常用命令總結(jié)

    MySQL查看表和清空表的常用命令總結(jié)

    這篇文章主要介紹了MySQL查看表和清空表的常用命令總結(jié),是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • innodb存儲引擎修改表共享空間為獨(dú)立空間

    innodb存儲引擎修改表共享空間為獨(dú)立空間

    最近在優(yōu)化mysql innodb存儲引擎,把共享表空間轉(zhuǎn)換成獨(dú)立表空間,下面是詳細(xì)步驟
    2014-01-01
  • 關(guān)于MySQL innodb_autoinc_lock_mode介紹

    關(guān)于MySQL innodb_autoinc_lock_mode介紹

    下面小編就為大家?guī)硪黄P(guān)于MySQL innodb_autoinc_lock_mode介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 一文帶你看懂MySQL執(zhí)行計(jì)劃

    一文帶你看懂MySQL執(zhí)行計(jì)劃

    執(zhí)行計(jì)劃是指一條SQL語句在經(jīng)過MySQL查詢優(yōu)化器的優(yōu)化會后,具體的執(zhí)行方式,下面這篇文章主要給大家介紹了關(guān)于MySQL執(zhí)行計(jì)劃的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評論