MySQL架構


1. Mysql架構

1.1. 體系

 

 

 

1.1.1. 連接層

 

 

 

MySQL啟動(MySQL服務器就是一個進程),等待客戶端連接,每一個客戶端連接請求,服務器都會新建一個線程處理(如果是線程池的話,則是分配一個空的線程),每個線程獨立,擁有各自的內存處理空間

 

show VARIABLES like '%max_connections%'

 

 

 

 

連接到服務器,服務器需要對其進行驗證,也就是用戶名、IP、密碼驗證,一旦連接成功,還要驗證是否具有執行某個特定查詢的權限(例如,是否允許客戶端對某個數據庫某個表的某個操作)

 

1.1.2. SQL處理層

 

 

這一層主要功能有:SQL語句的解析、優化,緩存的查詢,MySQL內置函數的實現,跨存儲引擎功能(所謂跨存儲引擎就是說每個引擎都需提供的功能(引擎需對外提供接口)),例如:存儲過程、觸發器、視圖等。

 

1.如果是查詢語句(select語句),首先會查詢緩存是否已有相應結果,有則返回結果,無則進行下一步(如果不是查詢語句,同樣調到下一步)

 

2.解析查詢,創建一個內部數據結構(解析樹),這個解析樹主要用來SQL語句的語義與語法解析;

 

3.優化:優化SQL語句,例如重寫查詢,決定表的讀取順序,以及選擇需要的索引等。這一階段用戶是可以查詢的,查詢服務器優化器是如何進行優化的,便於用戶重構查詢和修改相關配置,達到最優化。這一階段還涉及到存儲引擎,優化器會詢問存儲引擎,比如某個操作的開銷信息、是否對特定索引有查詢優化等。

 

1.1.2.1. 緩存

 show variables like  '%query_cache_type%'   -- 默認不開啟

show variables like  '%query_cache_size%'  --默認值1M

 

SET GLOBAL query_cache_type = 1; --會報錯

query_cache_type只能配置在my.cnf文件中,這大大限制了qc的作用

 

在生產環境建議不開啟,除非經常有sql完全一模一樣的查詢

 

QC嚴格要求2SQL請求要完全一樣,包括SQL語句,連接的數據庫、協議版本、字符集等因素都會影響

 

1.1.2.2. 解析查詢

 

 

 

 

 

 

 

1.1.2.3. 優化

 

 

通過上面的sql大概就能看出一個sql並不一定會去查詢物理數據,sql解析器會通過優化器來優化程序員寫的sql

 

explain

select * from account t where t.id  in (select t2.id from account t2)

show warnings;

 

 

 

 

 

1.2.  邏輯架構

 

mysql中其實還有個schema的概念,這概念沒什么太多作用,只是為了兼容其他數據庫,所以也提出了這個。

mysqldatabase schema是等價的

create database demo;

show databases;

drop schema demo;

show databases;

 

 

 

1.3. 物理存儲結構

1.3.1.  數據庫的數據庫(DataDir

 mysql安裝的時候都要指定datadir,其查看方式為:

show VARIABLES like 'datadir',其規定所有建立的數據庫存放位置

 

 

 

1.3.2. 數據庫

  創建了一個數據庫后,會在上面的datadir目錄新建一個子文件夾

  

 

 

1.3.3. 表文件

 

 

用戶建立的表都會在上面的目錄中,它和具體的存儲引擎相關,但有個共同的就是都有個frm文件,它存放的是表的數據格式。

 

 

 mysqlfrm --diagnostic  /usr/local/mysql/data/mall/account.frm

 

 

 

 

1.3.4. mysql utilities 安裝

    tar -zxvf mysql-utilities-1.6.5.tar.gz

    cd mysql-utilities-1.6.5

    python ./setup.py build

    python ./setup.py install


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM