mysql數據庫實例

一個普通的程序運行過程:
mysql數據庫實例mysql

五、在處理完數據,按ctl+s保存後,關閉窗口,內存的數據會進行釋放,好的程序會有一些數據的回收策略,不會永久駐在內存算法

MySQL數據庫實例運行過程:sql

mysql服務器構成:
一、程序加載到內存,申請空間運行起來
二、把數據加載到內存,程序處理文件,處理完數據後把數據存到硬盤
三、內存釋放,程序回收垃圾數據庫

畫圖來講明:
mysql數據庫實例
一、MySQLd守護進程的程序塊先加載到內存,而後申請空間運行起來,
二、把ibd數據文件加載到內存:存放數據庫和表
三、mysqld處理ibd數據
四、idb數據文件寫入到磁盤,持久化緩存

五、程序不會退出,由於程序會頻繁的使用數據庫,因此這裏不會像office用了就關閉,
避免重複去申請內存空間,這裏直接使用守護進程,一直在內存中,用就調用,不用就休息等待程序來調用
適合程序頻繁調用的模式服務器

六、實例:
mysqld 主進程不會直接參與數據的處理,會起master thread 數據結構

MySQL進程線程結構ide

mysqld(boss)------>master thread(Manager) ---->"worker" thread
(read thread write thread)
「辦公區「(提早預約好的長期的)------>預分配內存結構優化


MySQL啓動過程:

一、啓動後臺守護進程,並生成工做線程
二、預分配內存結構供mysql處理數據使用
mysqld+一堆thread +預分配的內存結構=實例線程

mysqld服務程序構成:
mysql數據庫實例

mysqld的體系結構

一條SQL語句的執行過程? select user,host ,password from mysql.user;
鏈接層:【與用戶打交道】
一、客戶端發起數據庫鏈接。
mysql
二、鏈接請求到達鏈接層,驗證用戶、密碼合法性。
select user,host ,password from mysql.user;
三、鏈接層接受用戶SQL,分配一個專門用做交互的線程(connect thread);
show [full] processlist;

**
mysql數據庫實例

鏈接層沒法處理數據,必須交給sql層

SQL層的功能

四、鏈接層線程會將SQL傳送SQL層繼續處理
五、SQL層接受到SQL語句,語法解釋器驗證語法
mysql數據庫實例

六、語義驗證器,檢測語句類型(DDL、DML、DCL、DQL),根據不一樣的類型交於不一樣對應解析器繼續處理
七、解析器接受到SQL,進行解析,解析出執行計劃
八、優化器會基於成本的算法,找到成本最低的執行計劃【索引優化,sql優化】
九、執行器基於最優語句的執行計劃進行執行,獲得獲取數據的方法,
會將方法TP給下一層繼續處理【扇區、磁道】
十、每條sql的解析都這麼複雜,因此提供查詢緩存,將上一條語句的結果【語句的sqlid】。
十一、記錄日誌(默認沒有開啓)

存儲引擎層:十二、按照SQL提供的獲取數據的方法,去對應磁盤位置獲取數據便可。1三、將二進制或十六進制的數據結構化成表的形式,由鏈接線程返回給用戶

相關文章
相關標籤/搜索