您好,登錄后才能下訂單哦!
本篇內容主要講解“MySQL的session過程是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MySQL的session過程是什么”吧!
MySQL session過程的簡單梳理:
1. master分配session 對應的服務進程,設置基本session信息
2. 接收client端的SQL
3. 加載相關table 定義、描述符和句柄等信息
4. 優化器analyzing and statistics
5. 存儲引擎讀寫數據塊
6. 獲取mutex進程互斥量
7. 獲取page的latch
8. innodb 引擎層反饋數據或者信息給server層
9.server層處理中間結果集
10. net_write返回結果給客戶端
session狀態的state列說明
state列:顯示使用當前連接的sql語句的狀態,很重要的列,后續會有所有的狀態的描述。
state只是語句執行中的某一個狀態,一個sql語句,已查詢為例,可能需要經過copying to tmp table,Sorting result,Sending data等狀態才可以完成。
mysql列出的state主要有以下幾種關鍵狀態:
System lock
正在等待取得一個外部的系統鎖。如果當前沒有運行多個 mysqld 服務器同時請求同一個表,那么可以通過增加 –skip-external-locking參數來禁止外部系統鎖。
Checking table
正在檢查數據表(這是自動的)。
Opening tables
這個過程應該會很快,除非受到其他因素的干擾。例如,在執 ALTER TABLE 或 LOCK TABLE 語句行完以前,數據表無法被其他線程打開。 正嘗試打開一個表。
Flushing tables
正在執行 FLUSH TABLES,等待其他線程關閉數據表。
Closing tables
正在將表中修改的數據刷新到磁盤中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,就應該確認磁盤空間是否已經滿了或者磁盤是否正處于重負中。
Killed
發送了一個kill請求給某線程,那么這個線程將會檢查kill標志位,同時會放棄下一個kill請求。MySQL會在每次的主循環中檢查kill標志位,不過有些情況下該線程可能會過一小段才能死掉。如果該線程程被其他線程鎖住了,那么kill請求會在鎖釋放時馬上生效。
Waiting for tables
該線程得到通知,數據表結構已經被修改了,需要重新打開數據表以取得新的結構。然后,為了能的重新打開數據表,必須等到所有其他線程關閉這個表。以下幾種情況下會產生這個通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, 或 OPTIMIZE TABLE。
Reopen table
獲得了對一個表的鎖,但是必須在表結構修改之后才能獲得這個鎖。已經釋放鎖,關閉數據表,正嘗試重新打開數據表。
到此,相信大家對“MySQL的session過程是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。