MySql歷史與架構

2022-06-29 21:21:10 字數 1557 閱讀 3667

每個客戶端連線都會有乙個執行緒

認證基於使用者名稱,原始主機資訊和密碼

mysql會解析查詢並進行優化

對於select會先檢查查詢快取,能夠找到就直接返回結果集

鎖在commit或rollback時自動釋放

共享,不阻塞,多個使用者可以同時讀同乙個資源

保證只有乙個使用者寫入,防止其他使用者寫入或讀取資料

加鎖,鎖的檢查,鎖的解除都是要消耗系統資源的

加鎖的物件大小成為鎖粒度

在鎖的開銷與資料的安全性中尋求平衡

最大程度支援併發,mysql伺服器層沒有實現,由儲存引擎實現

開銷最小

mysql伺服器可以根據自己的目的加上表鎖而忽略儲存引擎的鎖機制

一組原子性的sql語句,要麼全部執行,要麼全部不執行

acid

原子性:要麼全部執行,要麼全部不執行

一致性:狀態的改變是完全的,不存在改變一半就被儲存的情況

隔離性:在提交前對其他事務不可見

永續性:資料更改會永遠儲存

即使事務未曾提交,資料對於其他事務也是可見的.即事務可以讀取未提交的資料,也叫髒讀讀髒資料

即乙個事務在提交之前,改變對其他事務是不可見的,又叫不可重複讀,幻讀(在乙個事務讀取資料後還未提交時,另乙個事務更改了資料)

解決了幻讀和髒讀的問題

強制事務序列執行,給每一行資料加鎖

死鎖指兩個或多個事務在同乙個資源上相互占用,並請求鎖定對方占用的資源,從而造成的惡性迴圈

死鎖發生後,只能通過部分或完全回滾事務才能解決

例子

避免頻繁從記憶體向磁碟中寫入資料(可以記錄下日誌操作,在後台慢慢一次寫入,所以日誌檔案是追加寫)

便於出現故障後的恢復

innodb:支援事務

myisam:不支援事務

不支援事務的表回滾不能撤銷更改

顯式:自動加鎖

隱式:主動加鎖

是mysql的預設事務型引擎,也是使用最廣泛的儲存引擎,被設計用來處理大量短期事務

不支援事務和行級鎖

資料庫崩潰後無法安全恢復

對整張表加鎖,而不是針對行,但在讀取資料的時候依然可以插入新的資料(併發插入)

延遲更新索引鍵

用於轉化.csv檔案成資料庫裡的表

除非用到某些innodb不具備的特性,並且沒有其他辦法可以替代,否則都應該優先選擇innodb引擎

最好不要混用多種儲存引擎!!!

alter table name engine = innodb

MySQL架構與歷史

所以基於此,資料庫實現了各種死鎖檢測和死鎖超時機制目前innodb採取的方案是 將持有最少行級排他鎖的事務進行回滾。處理死鎖 大多數情況下只需要重新執行因死鎖回滾的事務即可。事務日誌 mysql中的事務 一般建議 除非禁用了自動提交 才可以使用lock tables之外 其他熱河時候都不要顯示的執行...

mysql架構與歷史

最上層的服務並不是mysql獨有的,大多數基於網路的客戶端 服務端的工具或者服務都有類似的架構。比如連線處理 授權認證 安全等等 第二層架構是mysql比較有意思的部分,大多數mysql的核心功能都在這一層實現。其中分析器 優化器 執行器統稱為解析器。所有的內建函式 跨儲存引擎的功能都在這一層實現 ...

Mysql歷史架構筆記

開發5.0版,他將增加儲存過程 伺服器端游標,觸發器,檢視,xa事務,查詢優化器重大改進及許多其他特性。2004年10月4.1版穩定了 5.0版則在一年以後變得穩定,時間是2005年10月。mysql的架構 核心模組 可在伺服器識別出下列模組 伺服器初始化模組 連線管理器 執行緒管理器 使用者驗證模...