《高效能MySql》一 MYSQL架構和歷史

2021-09-05 18:19:50 字數 2001 閱讀 8068

mysql邏輯架構

1.mysql架構圖

併發控制

1.讀寫鎖

(1)共享鎖 和 排他鎖 ,也叫讀鎖 和 寫鎖

(2)寫鎖是排他的,也就是說乙個寫鎖會阻塞其他的寫鎖和讀鎖,這是出於安全策略的考慮。

2.鎖粒度

(1)一種提高共享資源併發性的方式就是讓鎖定的物件更有選擇性。盡量只鎖定需要修改的部分資料,而不是所有的資源。鎖定的資料量越少,則系統的併發程度越高

(2)所謂鎖策略,就是在鎖的開銷和資料的安全性之間尋求平衡,大多數商業資料庫系統一般是在表上施加行級鎖。mysql提供多種選擇

(3)表鎖:最基本的鎖策略,開銷最小。

(4)寫鎖也比讀鎖有更高的優先順序,因此乙個寫鎖可能會被插入到讀鎖佇列的前面

(5)行級鎖:可以最大程度地支援併發處理(同時也帶來了最大的鎖開銷)。在innodb和xtradb,以及其他一些儲存引擎中實現了行級鎖。

事務

1.acid,乙個事務處理系統必須具備這些標準特徵。  實現acid需要更大的開銷

2.隔離級別:

(1)讀未提交:事務可以讀其他事務為提交的資料,效能比其他級別好太多

(2)讀已提交:事務只可以讀其他事務已提交的資料,大多數資料庫系統預設的隔離級別都是讀已提交(mysql不是)

(3)可重複讀:保證了在同乙個事務中多次讀取同樣記錄的結果是一致。mysql預設隔離級別

(4)可序列化:最高隔離級別,通過強制事務序列執行。會在讀取每一行資料上都加鎖。開銷大

3.死鎖

(1)資料庫系統實現了各種死鎖檢測和死鎖超時機制。越複雜的系統,比如innodb儲存引擎,越能檢測到死鎖的迴圈依賴,並返回錯誤。

(2)innodb目前處理死鎖的方法:將持有最少行級排他鎖的事務進行回滾。

(3)只有部分或完全回滾其中乙個事務,才能打破死鎖。

4.事務日誌

(1)使用事務日誌,儲存引擎在修改表的資料時只需要修改其記憶體拷貝,再把該修改行為記錄到持久在硬碟的事務日誌中,而不是修改的資料本身持久到磁碟。事務日誌採用的是追加的方式。採用事務日誌的方式相對來說要快得多。事務日誌持久以後,記憶體中被修改的資料在後台可以慢慢地刷回磁碟。目前大多數儲存引擎都是這樣實現的。

5.mysql中的事務

(1)mysql提供了兩種事務型儲存引擎:innodb和ndb cluster.

(2)自動提交:mysql預設採用自動提交模式,也就是說,如果不是顯式地開始乙個事務,則每個查詢都被當作乙個事務執行提交操作。

(3)mysql伺服器層不管理事務,事務是由下層的儲存引擎實現的。

多版本併發控制

1.mysql的大多數事務型儲存引擎實現都不是簡單的行級鎖。基於提公升併發效能的考慮,它們一般都同時實現了多版本併發控制

2.mvcc是行級鎖的乙個變種,但是它在很多情況下避免了加鎖操作,因此開銷更低

3.mvcc的實現,是通過儲存資料在某個時間點的快照來實現的。根據事務開始的時間不用,每個事務對同一張表,同一時刻看到的資料可能是不一樣的。

4.工作原理:

(1)innodb的mvcc,是通過在每行記錄後面儲存兩個隱藏的列來實現的。儲存的是系統版本號。每開始乙個新的事務,系統版本號都會自動遞增。事務開始時刻的系統版本號作為事務的版本號,用來和查詢到的每行記錄的版本號進行比較。

(2)行版本號,刪除標識

(3)mvcc只在讀已提交 和 可重複讀 兩個隔離級別下工作,因為讀未提交總數讀取最新的資料行,而不是符合當前事務版本的資料行。而序列化則會對所有讀取的行都加鎖。

mysql的儲存引擎

1.innodb是mysql的預設事務型引擎,也是最重要,使用最廣泛的儲存引擎。被設計用來處理大量的短期事務,短期事務大部分情況是正常提交的,很少會被回滾。

2.在mysql5.1及之前的版本,myisam是預設的儲存引擎。但不支援事務行級鎖,而且有乙個毫無疑問的缺陷就是奔潰後無法安全恢復。myisam只將資料寫到記憶體中,然後等待作業系統定期將資料刷出到磁碟上。

《高效能MySQL》讀書筆記 MySQL邏輯架構

一 mysql邏輯架構 mysql最重要的 最與眾不同的特性是它的儲存引擎架構,這種構架的設計將查詢處理及其它系統任務和資料的儲存 提取相分離。第一層,服務層,最上層的服務並不是mysql獨有的,大多數基於網路的客戶端 服務端的工具或者服務都有類似的架構。主要為請求做連線處理,授權認證,安全等。第二...

高效能mysql 樹 高效能mysql精要

1 explain 中 extra using index 表示覆蓋索引,sql優化中最好能使用覆蓋索引,否則 二級索引 需要回表查詢。所謂覆蓋索引,是指要查詢的列正好是索引,而條件也是這個索引之一 2 where 語句中 條件等於主鍵的 在核心索引層完成,條件等於非索引的,在服務層完成 3 讀索引...

mysql高效能索引 mysql高效能索引( )

在開發中,我們知道大多數應用的瓶頸在於sql語句的執行時耗,在這裡並不討論sql語句的安全,僅僅討論高效能sql語句,而與高效能sql語句緊密相連的就是傳說中的 索引。索引 一種工作在儲存引擎端的用於快速找到記錄的一種資料結構。mysql使用索引的方式是 先找到索引的值,再根據索引的值找到資料行。索...