詳解MySQL執行緒狀態
文章目錄
- #一、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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

優雅安裝 MySQL 的關鍵在於添加 MySQL 官方倉庫。具體步驟如下:下載 MySQL 官方 GPG 密鑰,防止釣魚攻擊。添加 MySQL 倉庫文件:rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm更新 yum 倉庫緩存:yum update安裝 MySQL:yum install mysql-server啟動 MySQL 服務:systemctl start mysqld設置開機自啟動

在 CentOS 上安裝 MySQL 涉及以下步驟:添加合適的 MySQL yum 源。執行 yum install mysql-server 命令以安裝 MySQL 服務器。使用 mysql_secure_installation 命令進行安全設置,例如設置 root 用戶密碼。根據需要自定義 MySQL 配置文件。調整 MySQL 參數和優化數據庫以提升性能。

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。
