SQL的生命週期
一、SQL工作流程
一個使用者建立連線,就會分配一個執行緒,同時分配一個工作區(sort_buffer_size=256k),然後執行SQL語句,同時將查詢結果扔到工作區進行排序,然後返回給使用者。期間這個查詢結果的時候,如果結果在記憶體中則直接從記憶體中獲取,如果不在,就先從磁碟獲取到記憶體,然後扔給工作區,返回結果給使用者,接著關閉執行緒,關閉連線。
二、MySQL各個元件的作用
MySQL 體系結構
2.1 connectors
主要負責連線管理、授權認證、安全等等。每個客戶端連線都對應著伺服器上的一個執行緒。伺服器上維護了一個執行緒池,避免為每個連線都建立銷燬一個執行緒。當客戶端連線到MySQL伺服器時,伺服器對其進行認證。可以通過使用者名稱與密碼認證,也可以通過SSL證書進行認證。登入認證後,伺服器還會驗證客戶端是否有執行某個查詢的操作許可權。這一層並不是MySQL所特有的技術。
2.2 服務和工具
管理服務和工具元件:系統管理和控制工具,例如備份恢復、Mysql複製、叢集等
sql介面:接受使用者的SQL命令,並且返回使用者需要查詢的結果
查詢解析器:SQL命令傳遞到解析器的時候會被解析器驗證和解析(許可權、語法結構)
查詢優化器:SQL語句在查詢之前會使用查詢優化器對查詢進行優化
快取:如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料
插入式儲存引擎:儲存引擎說白了就是如何管理運算元據(儲存資料、如何更新、查詢資料等)的一種方法。因為在關聯式資料庫中資料的儲存是以表的形式儲存的,所以儲存引擎也可以稱為表型別(即儲存和操作此表的型別)
2.3 儲存引擎層
負責MySQL中資料的儲存與提取。 伺服器中的查詢執行引擎通過API與儲存引擎進行通訊,通過介面遮蔽了不同儲存引擎之間的差異。
2.4 系統檔案層
該層主要是將資料庫的資料儲存在檔案系統之上,並完成與儲存引擎的互動。
三、詳細的SQL工作流程
1、 使用者連線進來以後,系統會分分配一個執行緒,同時分配一個工作區sort_buffer;
2、 通過SQL介面傳入,如果該SQL在查詢快取中有,直接返回結果,沒有,就對SQL進行優化,選擇一個較優計劃,然後傳入儲存引擎層繼續;如果要獲取的資料在記憶體中,就從記憶體中獲取資料;
3、 如果不在記憶體,就去磁碟獲取資料傳入記憶體(innodb_buffer_pool);
4、 然後修改資料頁;
5、 修改資料產生的redo log寫入log_buffer;
6、 修改完成,commit提交,log_buffer 寫入logfile,commit後永久有效;
7、 這個時候系統就會告訴使用者已經寫入成功了,但實際上髒頁並沒有寫入磁碟,因為redo已經寫入,所以不用擔心資料丟失,之後通過寫執行緒慢慢寫入磁碟,此時的物理讀不計算在SQL執行時間裡。
本文參考《MySQL技術內幕InnoDB儲存引擎》
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30310891/viewspace-2789838/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【慢SQL效能最佳化】 一條SQL的生命週期SQL
- View生命週期與Activity生命週期的關係View
- 生命週期
- viewController的生命週期ViewController
- Servlet的生命週期Servlet
- UIViewController的生命週期UIViewController
- Flutter 的生命週期Flutter
- Spring的生命週期Spring
- bean的生命週期Bean
- Laravel的生命週期Laravel
- 類的生命週期
- 品牌生命週期和產品生命週期之間的關係
- vue - 生命週期Vue
- Fragment生命週期Fragment
- vue生命週期Vue
- spring生命週期Spring
- ubuntu生命週期Ubuntu
- Flutter - 生命週期Flutter
- sessionStorag 生命週期Session
- PHP 生命週期PHP
- maven生命週期Maven
- Activity生命週期
- React生命週期React
- React新的生命週期React
- iOS APP的生命週期iOSAPP
- Vue生命週期的理解Vue
- Java 物件的生命週期Java物件
- Avalonia的Window生命週期
- Flutter widget的生命週期Flutter
- Spring Bean的生命週期SpringBean
- Spring的生命週期主Spring
- Spring Bean 的生命週期SpringBean
- Salesforce 生命週期管理(一)應用生命週期淺談Salesforce
- Vue的生命週期的理解Vue
- vue 生命週期梳理Vue
- java servlet 生命週期JavaServlet
- Android Activity生命週期Android
- Activity生命週期onDestroy