文章目錄
- #一、show processlist
- #2、command指令類型
- 三、使用者執行緒狀態
- 四、dump執行緒狀態
- 五、IO執行緒狀態
- 六、SQL 執行緒狀態
- 七、 主從連線執行緒狀態
八、事件調度執行緒狀態
相關免費學習推薦:mysql影片教學
一、show processlist
- Id:連線行程識別碼。是由 CONNECTION_ID() 函數傳回的值
- User:執行語句的 MySQL 使用者名稱。如果顯示的是“system user”,它指的是由MySQL產生的非客戶端執行緒正在執行內部任務。例如主備複製中從
庫上使用的 I/O 或 SQL 執行緒或延遲行處理程序的執行緒。 「unauthenticated user」指的是用戶端已經和服務端建立了 TCP/IP 連線但是還沒有對客戶端的使用者進行使用者密碼認證的執行緒。 「event_scheduler」指監視計畫任務調度事件的執行緒。 - Host:執行語句的客戶端的主機名,以host_name:client_port顯示(如果啟用了skip_name_resolve 參數,則顯示為ip:client_port 格式)
- Db:客戶端連線的預設資料庫(如果連線時指定了庫名),否則顯示為NULL 。
- Command:執行緒正在執行的命令的類型。
- Time:執行緒處於目前狀態的時間數(以秒為單位)。對於從庫 SQL 線程,該值是最後複製事件的時間和從庫的實際時間之間的秒數。
- State:提示執行緒正在做什麼樣的操作,事件或狀態。
- Info:執行緒正在執行的語句。
二、command命令類型
- Binlog Dump:主庫執行緒用於將二進位日誌內容傳送到從庫
- Change user:執行緒正在執行變更使用者操作
- Close stmt:執行緒正在關閉一個預先編譯好的語句
- Connect:從函式庫執行緒已經連線到主函式庫
- # Connect Out:從庫正在連接到主庫
- Create DB:線程正在執行一個建庫操作
- Daemon:這個是server 內部線程,不是客戶端連接的線程
- #Debug:執行緒正在產生偵錯資訊
- Delayed insert:是延遲插入處理程序的執行緒
- Drop DB:執行緒正在執行drop database 操作
- Execute:執行緒正在執行一個預先編譯好的語句
- Fetch:執行緒正在執行語句並從中取得結果集
- Field List:執行緒正在檢索表格列的資訊
- Init DB:執行緒正在選擇預設資料庫
- Kill:執行緒正在殺死其他執行緒
- Long Data:執行緒在執行語句並從中檢索並傳回長欄位(大欄位)類型的資料結果集
- Ping:執行緒正在處理伺服器ping 請求
- Prepare:執行緒正在執行預先編譯一個語句
- Processlist:執行緒正在產生有關server 執行緒的資訊
- Query :執行緒正在執行查詢語句
- Quit:執行緒正在終止
- Refresh:執行緒正在刷新表,日誌或高速緩存,或重置狀態變數或複製server 資訊
- Register Slave:線程正在主庫上註冊從庫
- Reset stmt:線程正在重置預編譯語句
- Set option:線程正在設定或重置客戶端語句執行選項
- Shutdown:執行緒正在執行關閉server
- Sleep:執行緒正在等待客戶端向其發送新語句請求
- Statistics:執行緒正在產生server 狀態資訊
- # Table Dump:執行緒正在將表格內容傳送到從函式庫
三、使用者執行緒狀態
- After create:當執行緒建立一個表格完成時(包括內部臨時表),就會出現這種狀態。
即使因為某些錯誤而導致建立表最終出錯,也會出現此狀態 - Analyzing:執行緒正在ANALYZE TABLE
- checking permissions:正在server 中檢查執行緒是否具有執行語句所需的權限
- Checking table:線程正在執行表檢查操作
- cleaning up:線程已經執行完成了一個命令,並準備釋放所佔用的記憶體和重置某些狀態變量
- closing tables:線程正在將表發生更改的資料刷新到磁碟並關閉表。
- converting HEAP to MyISAM:執行緒正在將內部臨時表從 MEMORY 引擎表轉換為磁碟 MyISAM 引擎的臨時表
- copy to tmp table:執行緒正在執行 ALTER TABLE 語句。此狀態發生在新結構的表已經建立好之後,執行copy 舊表資料到新表中之前出現
- Copying to group table:如果語句使用了不同的ORDER BY 和GROUP BY 條件列,則依照group by 對這些行資料進行排序,並將排序結果複製到臨時表
- Copying to tmp table:server 正在複製資料到記憶體臨時表
- altering table:server 正在執行in -place 的ALTER TABLE 的過程
- Copying to tmp table on disk:server 正在複製資料到磁碟臨時表。因為暫存結果集太大,所以,執行緒正在將記憶體暫存表轉換為基於磁碟的暫存表,以節省記憶體
- Creating index:執行緒正在執行一個ALTER TABLE …ENABLE KEYS 語句
- Creating sort index:執行緒正在執行SELECT 且使用到了內部暫存表
- creating table:執行緒正在建立表。包含建立暫存表時也會使用此狀態
- Creating tmp table:執行緒正在記憶體或磁碟上建立一個暫存表。如果表在記憶體中創建,但後來被轉換為磁碟表,則該操作期間的狀態將為「Copying to tmp table on disk」
- committing alter table to storage engine:server 已執行完成in- place 演算法的ALTER TABLE 語句,正在提交
- deleting from main table:server 正在執行多表刪除語句中的第一部分。看到這個
狀態表示正在從第一個表中刪除,並保存後續用於刪除其他表的列資料和偏移量 - deleting from reference tables:server 正在執行多表刪除語句的第二部分,從其他表中刪除匹配的行
- discard_or_import_tablespace :線程正在執行ALTER TABLE … DISCARD TABLESPACE 或ALTER TABLE …IMPORT TABLESPACE 語句
- #end:這發生在語句執行結束時,但在清除ALTER TABLE,CREATE VIEW,DELETE,INSERT,SELECT 或UPDATE 語句之前出現該狀態
- executing:線程正在執行語句中
- Execution of init_command:線程正在執行一個初始化系統變數的語句
- freeing items:執行緒已經執行完成了一個指令。釋放一些涉及到 query cache 狀態
的 items。這種狀態後通常緊接著cleaning up 狀態之後 - FULLTEXT initialization:server 正在準備執行自然語言全文搜尋
- init:這在ALTER TABLE,DELETE,INSERT,SELECT 或UPDATE 語句初始化之前發生的狀態。 server 在此狀態下執行的操作包括刷新二進位日誌,InnoDB 日誌和一些查詢快取清理操作。對於這個狀態結束時,可能會有以下一些操作:
當表中的資料變更後刪除查詢快取條目
將事件寫入二進位日誌
釋放記憶體緩衝區,包括 blob - Killed:向執行緒發起一個 kill 操作,執行緒應該執行終止操作。在 MySQL 的每個主循環中檢查執行緒的 kill 標誌,但在某些情況下,殺死執行緒可能只需要很短的時間。但如果被 kill 的執行緒被其他執行緒鎖定,則需要等待其他執行緒釋放鎖定之後,kill 指令才會生效並執行。
- logging slow query:線程正在向慢查詢日誌寫一條語句
- login:連接線程的初始狀態,直到客戶端成功通過身份驗證
- manage keys:server正在啟用或停用表索引
- NULL:此狀態用於SHOW PROCESSLIST 語句
- Opening tables:執行緒正嘗試開啟一個表。開啟表操作應該非常快,除非開啟操作被阻止。例如,ALTER TABLE 或 LOCK TABLE 語句可以防止開啟資料表,直到該語句完成。另外也可能是 table_open_cache 不夠大導致無法開啟表格。
- optimizing:server 正在對查詢執行初始最佳化
- preparing:此狀態發生在查詢最佳化期間
- Purging old relay logs:執行緒正在刪除不需要的中繼日誌檔案
- query end:此狀態出現在執行查詢語句之後但在釋放該查詢語句相關狀態items 之前
- Reading from net:server 正在從網路讀取封包。在 MySQL 5.7.8 之後該狀態叫做「Receiving from client」 - Receiving from client:server 正在從客戶端讀取封包。在 MySQL 5.7.8 稱為「Reading from net」
- Removing duplicates:查詢使用 SELECT DISTINCT 語句時,使 MySQL 無法在早期階段優化掉 distinct 操作。因此,MySQL 需要一個額外的階段來刪除所有重複的行,然後將結果傳送到客戶端
- removing tmp table:執行緒在 SELECT 語句執行完成後,正在刪除內部暫存表。如果SELECT 語句未建立暫存表,則不會出現此狀態
- rename:執行緒正在執行rename 語句重新命名表
- rename result table:執行緒正在執行ALTER TABLE 語句重命名表,已經建立完成新表,並正在使用新表替換舊表名稱
- Reopen tables:線程獲得了表鎖,但是獲得鎖後,發現基礎表結構已經被改變了。
於是釋放表鎖,並關閉表,嘗試重新開啟表 - Repair by sorting:修復程式碼正在使用排序來建立索引
- preparing for alter table:server 正在準備執行in -place 演算法的ALTER TABLE 語句- Repair done:該執行緒已完成MyISAM 表的多執行緒修復
- Repair with keycache:修正程式碼正在使用透過key cache 逐一建立key 的方法修復索引。這比透過排序索引修復的方法慢得多
- Rolling back:執行緒正在回滾事務
- Saving state:對於MyISAM 表操作(如修復或分析),執行緒正在將新表狀態儲存到.MYI 文件頭。狀態包括:表格資料行數,AUTO_INCREMENT 計數器和 key
分佈之類的資訊 - Searching rows for update:執行緒正在進行第一階段查找所有符合的行,然後再更新它們。如果UPDATE 正在更改用於查找涉及的行的索引,則必須先把update 滿足匹配的行先查找出來
- Sending data:線程正在讀取和處理SELECT 語句產生的資料行,並將資料傳送到客戶端。因為在此狀態期間發生的操作可能產生大量的磁碟存取(讀取),所以它通常是給定查詢的生存期內最長的運行狀態
- Sending to client:server 正在向客戶端寫入資料包。在MySQL 5.7.8 之前叫做「Writing to net」
- setup:執行緒正在執行ALTER TABLE 操作
- Sorting for group:執行緒正在執行一個GROUP BY 排序操作
- Sorting for order:線程正在執行一個ORDER BY 排序操作
- Sorting index:線程正在排序索引頁面,以便在MyISAM 表優化操作期間實現更有效率的存取
- Sorting result:對於SELECT語句,這類似「Creating sort index」狀態,但是針對於非臨時表
- statistics:server 正在計算統計資訊以最佳化查詢執行計劃。如果一個執行緒在這個狀態很長一段時間,server 可能是磁碟執行其他工作而阻塞了統計資料的操作,也有可能發生了鎖等待。
- System lock:執行緒呼叫了mysql_lock_tables(),執行緒狀態從未更新過。這是一個非常常見的狀態,出現該狀態的原因有很多。例如,線程將請求或正在等待表的內部或外部系統鎖定。當 InnoDB 在執行 LOCK TABLES 期間等待表級鎖定時,可能會發生這種情況。如果此狀態是由外部鎖定請求引起的,如果您不使用多個mysqld 伺服器存取相同 MyISAM 表,則可以使用–skip-external-locking 選項停用外部系統鎖定。但是,預設情況下外部鎖定是停用的,因此此選項可能無效。
對於SHOW PROFILE,此狀態表示執行緒正在要求鎖定 - update:執行緒準備開始更新表
- Updating:執行緒搜尋且正在更新資料行 ##updating main table:server正在執行多表更新語句的第一部分。該狀態表示正在
- 更新第一個表,並保存列值和偏移量以用於更新其他(引用)表
updating reference tables:server 正在執行多表更新語句的第二部分,更新其他表格 - 的符合行
User lock:執行緒將請求或正在等待透過GET_LOCK() 呼叫請求的建議鎖。對於SHOW PROFILE,此狀態表示執行緒正在要求鎖定(無需等待) - User sleep:執行緒已呼叫SLEEP() 呼叫
- Waiting for commit lock:FLUSH TABLES WITH READ LOCK 語句正在取得提交鎖定
- Waiting for global read lock:FLUSH TABLES WITH READ LOCK 正在等待獲取全域讀鎖或全域read_only 系統變數設定
- Waiting for tables:執行緒取得到一個通知,表的底層結構已經改變,它需要重新開啟表格以獲得新的結構。但是,要重新開啟表,它必須等待,直到所有其他線
- 程都關閉了舊資料結構的表的存取。如果另一個執行緒已在表中使用FLUSH TABLES 或下列語句之一,則會出現這個通知:
- FLUSH TABLES tbl_name
- ALTER TABLE
- RENAME TABLE * REPAIR TABLE
- ANALYZE TABLE
- OPTIMIZE TABLE
- Waiting for table flush:執行緒正在執行FLUSH TABLES,並且正在等待所有執行緒關閉所存取的表,或執行緒得到一個表的底層結構已經改變的通知,它需要重新開啟表以獲得新的結構。但是,要重新開啟表,它必須等待,直到所有其他執行緒都關閉了舊表結構的存取。如果另一個執行緒已在表中使用FLUSH TABLES 或下列語句之一,則會出現這個通知:
- FLUSH TABLES tbl_name
- ALTER TABLE
- RENAME TABLE
- REPAIR TABLE
- ANALYZE TABLE
- OPTIMIZE TABLE
- Waiting for lock_type lock:server 正在等待取得一個THR_LOCK 鎖或從元資料鎖定子系統中取得一個MDL 鎖,其中lock_type 表示正在等待取得的MDL 鎖的類型,THR_LOCK 只有一種(Waiting for table level lock),MDL 鎖有以下幾種:
- 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
- #Waiting on cond:線程正在等待條件變為true 的通用狀態。沒有特定的狀態資訊可用
- Writing to net:server 正在寫入資料包到網路。從MySQL 5.7.8 之後叫做「Sending to client」
四、dump執行緒狀態
##Finished reading one binlog; switching to next binlog :執行緒已經完成讀取binlog 文字- 件,並切換到下一個binlog 檔案
-
Master has sent all binlog to slave; waiting for more updates:執行緒已經從二進位日誌中讀取了所有剩餘的更新日誌,並將它們發送到從庫。線程目前處於空閒狀態,正在等待新的更新資料的事件寫入二進位日誌中 - Sending binlog event to slave:線程已經從二進位日誌中讀取了一個事件,現在將其發送到從庫(二進位日誌由事件組成,一個事件通常是由發生更新的資料和一些其他資訊組成)
- Waiting to finalize termination:執行緒停止時發生的非常短暫的狀態,執行緒正在執行停止執行緒相關的動作
# 六、SQL 執行緒狀態 七、 主從連線執行緒狀態 #八、事件調度執行緒狀態
前的I/O 執行緒位置,向主庫發送從目前位置開始的二進位日誌的內容的請求
表示從庫I/O 執行緒正在等待較舊的工作執行緒提交資料
日誌事件,如果主庫空閒,這可能會持續很長時間。如果等待時間持續超過slave_net_timeout 秒,則從庫 I/O 執行緒發生逾時。此時,從庫I/O 執行緒認為主庫的連線斷開,會嘗試重新連接主庫
⚫ SQL 執行緒的 Info 欄位也可以顯示語句的文字。這表示執行緒已經從中繼日誌中讀取了一個事件,並從中提取了 SQL 語句,目前可能正在執行這個語句對應的事件。
###
以上是詳解MySQL執行緒狀態的詳細內容。更多資訊請關注PHP中文網其他相關文章!

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

EXPLAIN命令的關鍵指標包括type、key、rows和Extra。 1)type反映查詢的訪問類型,值越高效率越高,如const優於ALL。 2)key顯示使用的索引,NULL表示無索引。 3)rows預估掃描行數,影響查詢性能。 4)Extra提供額外信息,如Usingfilesort提示需要優化。

Usingtemporary在MySQL查詢中表示需要創建臨時表,常見於使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通過優化索引和重寫查詢避免其出現,提升查詢性能。具體來說,Usingtemporary出現在EXPLAIN輸出中時,意味著MySQL需要創建臨時表來處理查詢。這通常發生在以下情況:1)使用DISTINCT或GROUPBY時進行去重或分組;2)ORDERBY包含非索引列時進行排序;3)使用複雜的子查詢或聯接操作。優化方法包括:1)為ORDERBY和GROUPB

MySQL/InnoDB支持四種事務隔離級別:ReadUncommitted、ReadCommitted、RepeatableRead和Serializable。 1.ReadUncommitted允許讀取未提交數據,可能導致臟讀。 2.ReadCommitted避免臟讀,但可能發生不可重複讀。 3.RepeatableRead是默認級別,避免臟讀和不可重複讀,但可能發生幻讀。 4.Serializable避免所有並發問題,但降低並發性。選擇合適的隔離級別需平衡數據一致性和性能需求。

MySQL適合Web應用和內容管理系統,因其開源、高性能和易用性而受歡迎。 1)與PostgreSQL相比,MySQL在簡單查詢和高並發讀操作上表現更好。 2)相較Oracle,MySQL因開源和低成本更受中小企業青睞。 3)對比MicrosoftSQLServer,MySQL更適合跨平台應用。 4)與MongoDB不同,MySQL更適用於結構化數據和事務處理。

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL學習路徑包括基礎知識、核心概念、使用示例和優化技巧。 1)了解表、行、列、SQL查詢等基礎概念。 2)學習MySQL的定義、工作原理和優勢。 3)掌握基本CRUD操作和高級用法,如索引和存儲過程。 4)熟悉常見錯誤調試和性能優化建議,如合理使用索引和優化查詢。通過這些步驟,你將全面掌握MySQL的使用和優化。

MySQL在現實世界的應用包括基礎數據庫設計和復雜查詢優化。 1)基本用法:用於存儲和管理用戶數據,如插入、查詢、更新和刪除用戶信息。 2)高級用法:處理複雜業務邏輯,如電子商務平台的訂單和庫存管理。 3)性能優化:通過合理使用索引、分區表和查詢緩存來提升性能。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)