MySQL系列之邏輯架構簡介

2021-09-26 16:20:01 字數 2934 閱讀 6622

五、mysql事務

六、mysql的儲存引擎

mysql伺服器邏輯架構圖,圖來自《高效能mysql》一書:

第一層結構主要處理客戶端與mysql服務端的連線、授權認證、安全等;第二層是mysql服務端的核心,功能包括查詢解析、分析、優化、快取等,儲存過程、觸發器、檢視等都在這一層實現;第三層的儲存引擎主要負責資料儲存和提取,儲存引擎不會去解析sql,不同儲存引擎之間不會通訊,只會簡單地響應上層伺服器的請求

每個客戶端連線成功,都會在伺服器程序中擁有乙個執行緒,伺服器會快取執行緒,該執行緒只能輪流在某個cpu中執行,所以不需要建立和銷毀執行緒

對於select查詢語句,解析查詢之前會先查詢快取,如果快取能找到是不會去解析的,如果快取查詢不到,就會重現解析查詢,建立解析樹,然後對其進行查詢優化、決定表的讀取順序、選擇合適的索引等

資料庫引進鎖機制是為了控制併發,舉個例子,電商搶購案例,加入某類商品的庫存只有一件了,然後這時候有兩個使用者在搶這個商品,按照邏輯,乙個使用者購物成功,庫存就應該減1的,然後事務併發沒控制好,這種情況是很容易出現商品沒庫存了,然後還可以下單的案例,這種是不合理的,這時候可以用資料庫的鎖機制來做,乙個使用者在下單時,鎖存商品庫存的表,操作成功後才釋放鎖,另外乙個使用者才可以操作

然後介紹一下mysql的讀鎖(read lock)和寫鎖(write lock),讀鎖也可以稱作共享鎖(shared lock),寫鎖稱為排他鎖(exclusive lock),讀鎖是共享的,是允許多個使用者同個時刻同時讀取同個資源的,寫鎖是排他的,這也是出於安全策略考慮的,寫鎖會阻塞其它的讀鎖和寫鎖,然後操作完成後才釋放鎖,接著其它的鎖才可以操作

鎖按照讀寫可以分為讀鎖和寫鎖,按照加鎖的粒度就可以分為表鎖(table lock)和行鎖(row level lock)

提到事務肯定會想到事務的4個特性acid,要保證業務的正常使用,必須保證acid,acid表示原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability),乙個執行良好的事務系統也是要求具備這些特徵

sql標準中定義四種隔離級別,每種儲存引擎實現的隔離級別是不同的

檢視當前會話隔離級別

select @@tx_isolation

;

檢視系統全域性隔離級別

select @@global.tx_isolation

;

設定當前會話隔離級別:

set

session

transaction

isolation

level

read

committed

;

設定mysql系統全域性隔離級別:

set

global

transaction

isolation

level

repeatable

read

;

事務日誌可以用於提高事務的效率,有了事務日誌,資料儲存引擎在修改表資料時就只需要修改其記憶體拷貝,然後再將修改的行為資料持久化到硬碟,而不用修改資料本身再持久化到硬碟。事務日誌採用的是追加的方式

注意:mysql中能支援事務的儲存引擎只有兩種:innodb和ndb cluster。mysql中預設採用自動提交的模式,oracle寫資料的話,都是需要自己手動提交事務的,而mysql不需要,因為預設的是自動提交事務的

sql查詢,1或者on表示啟動,0或者off表示關閉

可以通過sql來開啟關閉自動提交:

set autocommit =

1;

多版本控制mysql支援事務的儲存引擎有innodb和ndb cluster,而這些儲存引擎實現事務一致性並不是通過簡單的行級鎖,因為前面也說到,行級而且可以很好的保證事務一致性,但是效能並不是很好,會導致鎖競爭的情況,所以mysql這些事務型的儲存引擎採用的是多版本併發控制(mvcc),多版本併發控制可以說是行級鎖的變種,但是多版本併發控制相對的開銷是比較低的,多版本控制是通過儲存在某個時間點的快照資訊來實現的,innodb是通過在每行記錄後面儲存兩個隱藏的列來實現的,這兩個列,乙個儲存行的建立時間,乙個儲存行的過期時間,當然不是具體的時間值,而是系統版本號(system version number),每開始乙個事務,系統版本號都會自動遞增的

mysql的事務回滾等處理是給儲存引擎負責的,下面介紹一下幾種常見的mysql儲存引擎

來自尚矽谷老師歸納的圖:

blackhole引擎沒有儲存機制,不做儲存處理,但是伺服器還是會記錄blackhole表的日誌,所以可以用於複製資料到備庫,或者用於記錄日誌

圖來自尚矽谷老師歸納:

修改儲存引擎sql:

alter

table mytable engine

=innodb

;

MySQL邏輯架構簡介

和其他資料庫相比,mysql有點與眾不同,它的架構可以在多種不同場景中應用並發揮良好作用。主要體現在儲存引擎的架構上,外掛程式式的儲存引擎架構將查詢處理和其它的系統任務以及資料的儲存提取相分離。這種架構可以根據業務的需求和實際需要選擇合適的儲存引擎。第一層 連線層 最上層是一些客戶端和連線服務,包含...

MySQL邏輯架構簡介

一 邏輯架構圖總體概覽 和資料庫相比,mysql有點與眾不同,他的架構可以在多種不同場景中應用並發揮良好作用,主要體現在儲存引擎的架構上,外掛程式式的儲存引擎架構將查詢處理和其他的系統任務以及資料儲存的儲存提取相分離,這種架構可以個根據業務的需求和實際需要選擇合適的儲存引擎。可分為以下幾層 1 連線...

MySQL的邏輯架構簡介

1.連線層 最上層是一些客戶端和連線服務,包含本地sock通訊和大多數基於客戶端 服務端工具實現的類似於tcp ip的通訊。主要完成一些類似於連線處理 授權認證及相關的安全方案。在該層上引入了執行緒池的概念,為通過認證安全接入的客戶端提供執行緒。同樣在該層上可以實現基於ssl的安全鏈結。伺服器也會為...