主頁 > 知識庫 > MySQL SHOW PROCESSLIST協(xié)助故障診斷全過程

MySQL SHOW PROCESSLIST協(xié)助故障診斷全過程

熱門標(biāo)簽:電話機(jī)器人市場趨勢 南昌高頻外呼系統(tǒng)哪家公司做的好 電銷機(jī)器人 行業(yè) 電銷機(jī)器人各個細(xì)節(jié)介紹 昆明電信400電話辦理 溫州瑞安400電話怎么申請 俄國地圖標(biāo)注app 百度地圖標(biāo)注后不顯示 淄博400電話申請

一、SHOW PROCESSLIST命令

SHOW PROCESSLIST顯示正在運(yùn)行(用戶運(yùn)行線程)的線程(或SHOW FULL PROCESSLIST顯示更多信息)。您還可以從INFORMATION_SCHEMA PROCESSLIST表或mysqladmin processlist命令獲取此信息。如果你有這個PROCESS特權(quán),你可以看到所有的線程。否則,您只能看到自己的線程(即與您正在使用的MySQL帳戶相關(guān)聯(lián)的線程)。如果不使用該FULL關(guān)鍵字,則每個語句的前100個字符都將顯示在該Info字段中。

進(jìn)程信息也可從performance_schema.threads表中獲得。但是,訪問threads不需要互斥鎖,對服務(wù)器性能影響最小。INFORMATION_SCHEMA.PROCESSLIST和SHOW PROCESSLIST由于需要互斥鎖而具有負(fù)面的性能后果。performance_schema.threads還顯示有關(guān)后臺線程,哪些信息在INFORMATION_SCHEMA.PROCESSLIST和SHOW PROCESSLIST中沒有,這意味著performance_schema.threads可以用來監(jiān)視活動的其他線程信息源。

SHOW PROCESSLIST如果您收到“ 太多連接 ” 錯誤消息,并且想要了解發(fā)生了什么, 該聲明非常有用。MySQL保留一個額外的連接以供有權(quán)限的帳戶使用SUPER,以確保管理員始終能夠連接和檢查系統(tǒng)(假設(shè)您沒有向所有用戶授予此權(quán)限)。

線程可以用KILL語句殺死。

以下是SHOW PROCESSLIST輸出示例:

mysql> show full processlist\G
*************************** 1. row ***************************
  Id: 123
 User: root
 Host: localhost
  db: performance_schema
Command: Query
 Time: 0
 State: starting
 Info: show full processlist
1 row in set (0.00 sec)

所產(chǎn)生的列SHOW PROCESSLIST具有以下含義:

Id

連接標(biāo)識符,這是同一類型的在所顯示的值ID的列INFORMATION_SCHEMA.PROCESSLIST表,該P(yáng)ROCESSLIST_ID性能視圖的列threads 表,并且通過返回的 CONNECTION_ID()功能。

User

發(fā)出聲明的MySQL用戶,如果是system user,它是指由服務(wù)器產(chǎn)生的非客戶線程,以在內(nèi)部處理任務(wù)。這可能是復(fù)制從站或延遲行處理程序使用的I / O或SQL線程。unauthenticated user指的是已經(jīng)與客戶端連接關(guān)聯(lián)但是還沒有完成客戶機(jī)用戶的認(rèn)證的線程。 event_scheduler指的是監(jiān)視預(yù)定事件的線程。如果是system user那么在Host列中不會指定主機(jī) 。

Host

發(fā)出該語句的客戶端的主機(jī)名(system user沒有主機(jī)除外),以便更容易地確定哪個客戶端正在做什么,顯示方式:host_name:client_port。

db

當(dāng)前執(zhí)行語句對應(yīng)的默認(rèn)數(shù)據(jù)庫,如果選擇了;否則為NULL。

Command

顯示這個線程此刻正在執(zhí)行的命令,一般對應(yīng)DDL或DML語句。

Time

表示線程處于當(dāng)前狀態(tài)的時間長短,線程當(dāng)前時間的概念在某些情況下可能會發(fā)生改變:線程可以改變時間。對于正在從主機(jī)處理事件的從站上運(yùn)行的線程,線程時間設(shè)置為事件中發(fā)現(xiàn)的時間,因此反映了主站而不是從站的當(dāng)前時間。SET TIMESTAMP = value。

State

對應(yīng)Command指令,大多數(shù)狀態(tài)對應(yīng)于非??焖俚牟僮?。如果線程在給定狀態(tài)下保持多秒,則可能存在需要調(diào)查的問題。

Info

包含由線程執(zhí)行的語句的文本或者NULL,如果它不是執(zhí)行的話。默認(rèn)情況下,此值僅包含語句的前100個字符。要查看完整的語句,請使用SHOW FULL PROCESSLIST。

二、線程命令(Command)值

線程可以具有以下任何 Command值:

Binlog Dump:這是主服務(wù)器上的線程,用于將二進(jìn)制日志內(nèi)容發(fā)送到從服務(wù)器。

Table Dump:線程將表內(nèi)容發(fā)送到從服務(wù)器。

Change user:線程正在執(zhí)行改變用戶操作。

Close stmt:線程正在關(guān)閉準(zhǔn)備好的語句。

Connect:復(fù)制中,從服務(wù)器連接到其主服務(wù)器。

Connect Out:復(fù)制中,從服務(wù)器正在連接到其主服務(wù)器。

Create DB:線程正在執(zhí)行create-database操作。

Daemon:此線程在服務(wù)器內(nèi)部,而不是服務(wù)客戶端連接的線程。

Debug:線程正在生成調(diào)試信息。

Delayed insert:線程是一個延遲插入處理程序。

Drop DB:線程正在執(zhí)行drop-database操作。

Execute:線程正在執(zhí)行一個準(zhǔn)備好的語句(prepare statement類型就是預(yù)編譯的語句,JDBC支持次類型執(zhí)行SQL)。

Fetch:線程正在執(zhí)行一個準(zhǔn)備語句的結(jié)果。

Field List:線程正在檢索表列的信息。

Init DB:線程正在選擇默認(rèn)數(shù)據(jù)庫。

Kill:線程正在殺死另一個線程。

Long Data:該線程在執(zhí)行一個準(zhǔn)備語句的結(jié)果中檢索長數(shù)據(jù)。

Ping:線程正在處理服務(wù)器ping請求。

Prepare:線程正在為語句生成執(zhí)行計劃。

Processlist:線程正在生成有關(guān)服務(wù)器線程的信息。

Query:該線程正在執(zhí)行一個語句。

Quit:線程正在終止。

Refresh:線程是刷新表,日志或緩存,或重置狀態(tài)變量或復(fù)制服務(wù)器信息。

Register Slave:線程正在注冊從服務(wù)器。

Reset stmt:線程正在重置一個準(zhǔn)備好的語句。

Set option:線程正在設(shè)置或重置客戶端語句執(zhí)行選項(xiàng)。

Shutdown:線程正在關(guān)閉服務(wù)器。

Sleep:線程正在等待客戶端向其發(fā)送新的語句。

Statistics:線程正在生成服務(wù)器狀態(tài)信息。

Time:沒用過。

三、線程狀態(tài)(State)值

  • 一般線程狀態(tài)(State)值

以下列表描述State 了與常規(guī)查詢處理關(guān)聯(lián)的線程值,而不是更復(fù)雜的活動,例如復(fù)制。其中許多僅用于在服務(wù)器中查找錯誤。

After create:當(dāng)線程創(chuàng)建表(包括內(nèi)部臨時表)時,會在創(chuàng)建表的函數(shù)的末尾創(chuàng)建。即使由于某些錯誤而無法創(chuàng)建表,也會使用此狀態(tài)。

Analyzing:線程正在計算MyISAM表密鑰分布(例如:for ANALYZE TABLE)。

checking permissions:線程正在檢查服務(wù)器是否具有執(zhí)行語句所需的權(quán)限。

Checking table:線程正在執(zhí)行表檢查操作。

cleaning up:線程已經(jīng)處理了一個命令,正在準(zhǔn)備釋放內(nèi)存并重置某些狀態(tài)變量。

closing tables:線程將更改的表數(shù)據(jù)刷新到磁盤并關(guān)閉已用表。這應(yīng)該是一個快速的操作。如果沒有,請驗(yàn)證您是否沒有完整的磁盤,并且磁盤沒有被非常大的使用。

copy to tmp table:線程正在處理ALTER TABLE語句。此狀態(tài)發(fā)生在已創(chuàng)建新結(jié)構(gòu)的表之后,但是將行復(fù)制到該表之前。對于此狀態(tài)的線程,可以使用性能模式來獲取有關(guān)復(fù)制操作的進(jìn)度。

Copying to group table:如果語句具有不同ORDER BY和GROUP BY標(biāo)準(zhǔn),各行按組排列和復(fù)制到一個臨時表。

Creating index:線程正在處理ALTER TABLE … ENABLE KEYS一個MyISAM表。

Creating sort index:線程正在處理一個SELECT使用內(nèi)部臨時表解析的線程 。

creating table:線程正在創(chuàng)建一個表,這包括創(chuàng)建臨時表。

committing alter table to storage engine:服務(wù)器已經(jīng)完成就位ALTER TABLE并提交結(jié)果。

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:這發(fā)生在結(jié)束,但的清理之前ALTER TABLE, CREATE VIEW, DELETE, INSERT, SELECT,或UPDATE語句。

executing:該線程已經(jīng)開始執(zhí)行一個語句。

Execution of init_command:線程正在init_command系統(tǒng)變量的值中執(zhí)行語句 。

freeing items:線程已經(jīng)執(zhí)行了一個命令,在這種狀態(tài)下完成的項(xiàng)目的一些釋放涉及查詢緩存,這個狀態(tài)通常在后面cleaning up。

FULLTEXT initialization:服務(wù)器正在準(zhǔn)備執(zhí)行自然語言全文搜索。

init:此操作在初始化ALTER TABLE, DELETE, INSERT, SELECT, or UPDATE之前發(fā)生,服務(wù)器在該狀態(tài)中采取的操作包括刷新二進(jìn)制日志、Innodb日志和一些查詢緩存清理操作。對于最終狀態(tài), 可能會發(fā)生以下操作:更改表中的數(shù)據(jù)后刪除查詢緩存項(xiàng)、將事件寫入二進(jìn)制日志、釋放內(nèi)存緩沖區(qū), 包括blob。

Killed:執(zhí)行KILL語句,向線程發(fā)送了一個聲明,下次檢查kill標(biāo)志時應(yīng)該中斷。在MySQL的每個主循環(huán)中檢查該標(biāo)志,但在某些情況下,線程可能需要很短時間才能死掉。如果線程被某個其他線程鎖定,則一旦其他線程釋放鎖定,該kill就會生效。

Locking system tables:線程正在嘗試鎖定系統(tǒng)表(例如,時區(qū)或日志表)。

login:連接線程的初始狀態(tài),直到客戶端成功認(rèn)證為止。

manage keys:服務(wù)器啟用或禁用表索引。

NULL:該狀態(tài)用于SHOW PROCESSLIST狀態(tài)。

Opening system tables:線程嘗試打開系統(tǒng)表(例如,時區(qū)或日志表)。

Opening tables:線程正在嘗試打開一個表,這應(yīng)該是非常快的程序,除非有事情阻止打開。例如,一個ALTER TABLE或一個LOCK TABLE語句可以阻止打開一個表,直到語句完成。還可能需要關(guān)注table_open_cache參數(shù)的值是否足夠大。對于系統(tǒng)表,使用Opening system tables狀態(tài)。

optimizing:服務(wù)器正在執(zhí)行查詢的初始優(yōu)化。

preparing:此狀態(tài)發(fā)生在查詢優(yōu)化期間。

Purging old relay logs:線程正在刪除不需要的中繼日志文件。

query end:處理查詢之后,freeing items狀態(tài)之前會發(fā)生這種狀態(tài)。

Removing duplicates:該查詢的使用SELECT DISTINCT方式使得MySQL不能在早期階段優(yōu)化不同的操作。因此,MySQL需要一個額外的階段來刪除所有重復(fù)的行,然后將結(jié)果發(fā)送給客戶端。

removing tmp table:處理語句后,該線程正在刪除一個內(nèi)部臨時表SELECT 。如果沒有創(chuàng)建臨時表,則不使用該狀態(tài)。

rename:線程正在重命名一個表。

rename result table:線程正在處理一個ALTER TABLE語句,已經(jīng)創(chuàng)建了新表,并重新命名它來替換原始表。

Reopen tables:線程獲得了表的鎖,但在獲得基礎(chǔ)表結(jié)構(gòu)更改的鎖之后注意到。它釋放了鎖,關(guān)閉了table,并試圖重新打開它。

Repair by sorting:修復(fù)代碼正在使用排序來創(chuàng)建索引。

preparing for alter table:服務(wù)器正在準(zhǔn)備就地執(zhí)行ALTER TABLE。

Repair done:線程已經(jīng)完成了一個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計數(shù)器和鍵分布等信息。

Searching rows for update:線程正在進(jìn)行第一階段,以便在更新之前查找所有匹配的行。如果UPDATE要更改用于查找涉及的行的索引,則必須執(zhí)行此操作 。

setup:線程正在開始一個ALTER TABLE操作。

Sorting for group:線程正在做一個滿足一個GROUP BY。

Sorting for order:線程正在做一個滿足一個ORDER BY。

Sorting index:線程是排序索引頁,以便在MyISAM表優(yōu)化操作期間更有效地訪問。

Sorting result:對于一個SELECT語句,這類似于Creating sort index,但是對于非臨時表。

statistics:服務(wù)器正在計算統(tǒng)計信息以開發(fā)查詢執(zhí)行計劃。如果一個線程長時間處于這種狀態(tài),服務(wù)器可能是磁盤綁定的,執(zhí)行其他工作。

update:線程正在準(zhǔn)備開始更新表。

Updating:線程正在搜索要更新的行并正在更新它們。

updating main table:服務(wù)器正在執(zhí)行多表更新的第一部分,它僅更新第一個表,并保存用于更新其他(引用)表的列和偏移量。

updating reference tables:服務(wù)器正在執(zhí)行多表更新的第二部分,并從其他表更新匹配的行。

User lock:線程將要求或正在等待通過GET_LOCK()呼叫請求的咨詢鎖定 。因?yàn)?SHOW PROFILE,這個狀態(tài)意味著線程正在請求鎖定(不等待它)。

User sleep:線程調(diào)用了一個 SLEEP()調(diào)用。

  • 故障診斷狀態(tài)(State)值(個人提?。?/strong>

logging slow query:線程正在向慢查詢?nèi)罩緦懭胝Z句。

altering table:服務(wù)器正在執(zhí)行就地ALTER TABLE。

Receiving from client:服務(wù)器正在從客戶端讀取數(shù)據(jù)包。

Copying to tmp table:服務(wù)器正在復(fù)制磁盤到內(nèi)存的臨時表,是直接在磁盤創(chuàng)建的臨時表而并非從內(nèi)存轉(zhuǎn)到磁盤的臨時表。

Copying to tmp table on disk:對于線程將臨時表從內(nèi)存中更改為基于磁盤的格式存儲以節(jié)省內(nèi)存后,又把臨時表從磁盤復(fù)制到內(nèi)存時的狀態(tài)。

Creating tmp table:線程正在內(nèi)存或磁盤上創(chuàng)建臨時表。如果表在內(nèi)存中創(chuàng)建,但后來轉(zhuǎn)換為磁盤表,則該操作中的狀態(tài)將為Copying to tmp table on disk。

Sending data:線程正在讀取和處理SELECT語句的行,并將數(shù)據(jù)發(fā)送到客戶端。由于在此狀態(tài)期間發(fā)生的操作往往執(zhí)行大量的磁盤訪問(讀?。?,所以在給定查詢的整個生命周期內(nèi)通常是最長的運(yùn)行狀態(tài)。

Sending to client:服務(wù)器正在向客戶端寫入數(shù)據(jù)包。

Waiting for commit lock:FLUSH TABLES WITH READ LOCK正在等待提交鎖。

Waiting for global read lock:FLUSH TABLES WITH READ LOCK正在等待全局讀鎖定或read_only正在設(shè)置全局系統(tǒng)變量。

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指示鎖的類型。THR_LOCK狀態(tài)表示: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。

Writing to net:服務(wù)器正在將數(shù)據(jù)包寫入網(wǎng)絡(luò),如果一個線程長時間在執(zhí)行并且一直處于Writing to net狀態(tài),那么一直在發(fā)送數(shù)據(jù)包到網(wǎng)絡(luò),可以試著調(diào)整max_allowed_packet大小。另外,這可能會導(dǎo)致其他線程大量阻塞。

Waiting on cond:線程等待條件成為true的一般狀態(tài),沒有特定的狀態(tài)信息可用。

System lock:線程已經(jīng)調(diào)用mysql_lock_tables() ,且線程狀態(tài)從未更新。這是一個非常普遍的狀態(tài),可能由于許多原因而發(fā)生。例如, 線程將請求或正在等待表的內(nèi)部或外部系統(tǒng)鎖。當(dāng)InnoDB在執(zhí)行鎖表時等待表級鎖時, 可能會發(fā)生這種情況。如果此狀態(tài)是由于請求外部鎖而導(dǎo)致的,并且不使用正在訪問相同表的多個mysqld服務(wù)器MyISAM,則可以使用該–skip-external-locking選項(xiàng)禁用外部系統(tǒng)鎖 。但是,默認(rèn)情況下禁用外部鎖定,因此這個選項(xiàng)很有可能不起作用。因?yàn)镾HOW PROFILE,這個狀態(tài)意味著線程正在請求鎖定(不等待它)。對于系統(tǒng)表,使用Locking system tables狀態(tài)。

  • 查詢緩存狀態(tài)(State)值

checking privileges on cached query:服務(wù)器正在檢查用戶是否具有訪問緩存查詢結(jié)果的權(quán)限。

checking query cache for query:服務(wù)器正在檢查當(dāng)前查詢是否存在于查詢緩存中。

invalidating query cache entries:查詢緩存條目被標(biāo)記為無效,因?yàn)榈讓颖硪迅摹?/p>

sending cached result to client:服務(wù)器正在從查詢緩存中獲取查詢的結(jié)果,并將其發(fā)送給客戶端。

storing result in query cache:服務(wù)器將查詢結(jié)果存儲在查詢緩存中。

Waiting for query cache lock:當(dāng)會話正在等待采取查詢緩存鎖定時,會發(fā)生此狀態(tài)。這種情況可能需要執(zhí)行一些查詢緩存操作,如使查詢緩存無效的INSERT或DELETE語句,以及RESET QUERY CACHE等等。

  • 事件調(diào)度器線程狀態(tài)(State)值

這些狀態(tài)適用于事件調(diào)度程序線程,創(chuàng)建用于執(zhí)行調(diào)度事件的線程或終止調(diào)度程序的線程。

Clearing

調(diào)度程序線程或正在執(zhí)行事件的線程正在終止,即將結(jié)束。

Initialized

調(diào)度程序線程或?qū)?zhí)行事件的線程已初始化。

Waiting for next activation

調(diào)度程序具有非空事件隊列,但下一次激活是將來。

Waiting for scheduler to stop

線程發(fā)出SET GLOBAL event_scheduler=OFF并正在等待調(diào)度程序停止。

Waiting on empty queue

調(diào)度程序的事件隊列是空的,它正在休眠。

  • 其他

除了上述幾類,還有如復(fù)制主線程狀態(tài)(State)值、復(fù)制從庫IO線程狀態(tài)(State)值、復(fù)制從庫SQL線程(State)值、復(fù)制從庫Connect線程(State)值、詳情可見:MySQL主從復(fù)制線程狀態(tài)轉(zhuǎn)變

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • MySQL通過show processlist命令檢視性能的講解
  • mysql show processlist 顯示mysql查詢進(jìn)程
  • 通過mysql show processlist 命令檢查mysql鎖的方法
  • Ubuntu下Mysql 常用指令及中文亂碼問題
  • mysql中show指令使用方法詳細(xì)介紹
  • 關(guān)于在php.ini中添加extension=php_mysqli.dll指令的說明
  • MySQL數(shù)據(jù)庫show processlist指令使用解析

標(biāo)簽:吐魯番 安徽 葫蘆島 甘南 洛陽 嘉峪關(guān) 拉薩

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL SHOW PROCESSLIST協(xié)助故障診斷全過程》,本文關(guān)鍵詞  MySQL,SHOW,PROCESSLIST,協(xié)助,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL SHOW PROCESSLIST協(xié)助故障診斷全過程》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL SHOW PROCESSLIST協(xié)助故障診斷全過程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章