mysql中各個模組如何協同工作

來源:互聯網
上載者:User

標籤:mysql   線程   架構   模組   

mysql各個模組如何協同工作的,我們通過啟動mysql、用戶端串連、請求query,得到返回結果,最後退出。這個過程來看一下。


執行啟動mysql命令後,mysql的初始化模組從設定檔中讀取系統參數與命令列參數,並按參數來初始化整個系統。同時各個儲存引擎也被啟動,並進行各自的初始化工作。


當整個系統初始化結束後,串連管理模組接手,串連管理模組啟動處理用戶端串連請求的監聽程式,包括tcp/ip網路監聽,還有unix的socket。此時mysql server基本啟動完成,準備好接受用戶端請求。


當串連管理模組監聽到用戶端的串連請求,雙方通過client&server互動協議模組定義的協議“寒暄”幾句後,串連管理模組將串連請求轉給線程管理模組,去請求一個連接線程。


線程管理模組馬上將控制交給連接線程模組,告訴連接線程模組:我這有串連請求,需要建立串連。連接線程模組接到串連請求後,首先檢查當前線程串連池中是否有cache有空閑連接線程,如果有,取出一個和用戶端請求串連,如果沒有,則建立一個連接線程與用戶端串連。當然連接線程模組並不是收到串連請求後馬上取出連接線程與用戶端串連,而是先調用使用者模組進行授權檢查,只有用戶端請求通過了授權檢查後,它才會將用戶端請求與線程串連上。


在mysql中,用戶端請求分為兩種:一種是query,需要調用parser和轉寄模組才能執行的請求,一種是command,不需要調用parser就可以直接執行的請求。(如果在設定檔中開啟了full query logging功能,那麼query解析與轉寄模組會調用日誌記錄模組將請求記入日誌,不管是一個query類型的請求還是一個command類型的請求,都會記錄進入日誌)


當用戶端請求與連接線程接上頭後,連接線程就開始處理用戶端請求發送過來的各種命令或是query。它將收到的query轉給query解析和轉寄模組,query解析器先對query進行基本的語義和文法解析,然後根據命令類型的不同,有些是直接處理,有些是轉寄給其他模組處理。


如果是一個query類型的請求,將控制權交給query解析器,query解析器首先分析是不是一個select,如果是,則調用查詢快取模組,讓它檢查該query在query cache中是否存在,如果有,則直接將cache中的資料返回給連接線程模組,然後再通過與用戶端的連接線程將資料轉送給用戶端。如果沒有,那query將傳回query解析器,讓query解析器進行相應處理,再通過query分發器轉給相關處理模組。


如果解析器解析後的結果是一個未被cache的select,則將控制權交給optimizer,也就是query最佳化器模組。

如果是DML或是DDL,則交給表變更管理模組,

如果是一些更新統計資料、檢測、修複和整理類的query則會交給表維護模組

複製相關的query則交給複製模組

請求狀態的query交給狀態收集報告模組


各個模組收到query解析與分發模組分為過來的請求後,首先通過存取控制模組檢查串連使用者是否有訪問目標表以及欄位的許可權,如果有,調用表管理模組請求相應的表,並擷取對應的鎖。(表管理模組會查看該表是否在table cache中,如果已經開啟則直接進行鎖相關處理,如果不在cache,則需要開啟表檔案擷取鎖,然後將開啟的表交給表管理模組)


當表變更管理模組擷取開啟的表後,根據該表的相關meta資訊,判斷表的儲存引擎類型的其他相關資訊,根據表的儲存引擎類型,提交給儲存引擎介面模組,調用對應的儲存引擎實現模組,進行相應處理。(對於表變更管理模組來說,可見是僅是儲存引擎所提供的一系列API,底層儲存引擎實現模組的具體實現,對於表變更管理模組來說是透明的,它只需要調用對應的介面,指明表類型,介面模組表根據表類型調用正確儲存引擎進行相應處理)


當一個query或是一個command處理完成(成功是失敗)後,控制權都會交給連接線程模組。如果處理成功,則將處理結果通過連接線程返回給用戶端,如果處理失敗,也會將相應的錯誤資訊發送給用戶端,然後連接線程模組會進行相應的清理工作,並繼續等待後面的請求,重複上面提到的過程,或是完成用戶端中斷連線的請求。


如果上面過程中,相關模組使資料庫中的資料發產生了變化,而且mysql開啟了binlog,則對應的處理模組會調用Tlog模組將相應的變更語句以更新事件的形式記錄到相關參數指定的二進位記錄檔中。


在上面各個模組處理過程中,各自的核心運算處理功能部分都高度依賴整個mysql的核心API模組,比如:記憶體管理、檔案i/o、數字和字串處理等等。


整理自:MySQL效能調優與架構設計 第二章 mysql架構組成

本文出自 “剛剛出殼的小鳥” 部落格,請務必保留此出處http://qhd2004.blog.51cto.com/629417/1829563

mysql中各個模組如何協同工作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.