1. 程式人生 > >大白話講解併發控制的悲觀鎖與樂觀鎖 / 高效能 MySQL 筆記

大白話講解併發控制的悲觀鎖與樂觀鎖 / 高效能 MySQL 筆記

MySQL架構和歷史

MySQL邏輯架構

高效能 MySQL 筆記

  1. 第一層處理網路連線等, 比如連結認證,授權等

  2. 第二層是 MySQL 的核心, 用來解析優化 SQL 語句, 設計快取, 以及各種函式的實現, 包括儲存過程, 觸發器, 檢視等

  3. 第三層包括儲存引擎, 負責具體資料的存取, 伺服器通過 API 和儲存引擎通訊, 儲存引擎只執行來自上層的請求

  • 每個客戶端連線都在伺服器程序中有一個執行緒, 伺服器負責快取執行緒, 不需要手動管理

  • 伺服器處理連線流程

  • graph LR

  • start[客戶端連線]

  • auth[檢查使用者名稱密碼]

  • access[檢查是否有對應資源的處理許可權]

  • query[執行SQL 操作]

  • start-->auth

  • auth-->access

    access-->query


併發控制

MySQL 會在兩個層面做併發控制: 伺服器層和儲存引擎層

  • 讀寫鎖

  1. 讀鎖(共享鎖)是共享的, 互相不阻塞

  2. 寫鎖(排他鎖)是排他的, 給定時間內, 只有一個使用者能寫入

  • 表鎖在伺服器層實現, 行鎖在儲存引擎層實現

事務

  • 資料庫事務具有 原子性, 一致性, 隔離性和永續性, 簡稱 ACID

  • 使用事務會增加額外的開銷

  • 隔離級別

  1. READ UNCOMMITTED 未提交讀, 就是在A事務還沒有提交的時候, B操作可以讀取 A 修改的資料, 即髒讀, 一般不使用這種隔離方式

  2. READ COMMITTED 提交讀, 事務在提交之前, 對其他的事務不可見, 即只對自己事務內部的資料有影響, 也叫不可重複讀

  3. REPEATEABLE READ 可重複讀, A 事務本身對資料的修改對 A 事務後邊的語句也不起作用, 所有的 SQL 操作的資料都來自資料庫, 這是 MySQL 預設的事務隔離級別

  4. SERIALIZABLE 可序列化, 這種會在事務操作的每一行記錄上都加一個鎖, 會嚴重降低效能, 但是資料一致性比較高

  • 事務日誌是順序 I/O, 日誌採用追加的方式

  • MySQL 的每個查詢都被當成一個事務執行

只工作在 REPEATEABLE 和 READ COMMITED 兩種隔離級別下

  • 為每一行記錄增加兩個欄位, 一個儲存行的建立時間, 另一個儲存行的過期/刪除時間, 具體儲存的是一個版本號, select 的時候會首先讀建立版本號小於或等於當前事務版本號, 並且刪除版本號為空或者大於當前事務的版本號, inssert 更新建立版本號, delete 會更新刪除版本號, update 更新建立版本號為當前系統版本號, 更新刪除版本號為之前的建立版本號

  • Innodb 的 MVCC (多版本併發控制) 的實現方式

儲存引擎

  • InnoDB

  • 支援行級鎖

  • 支援事務

  • 全表使用 B+ tree 實現

  • 資料只存在葉子節點上

  • MyISAM

  • 不支援行級鎖, 只支援表鎖

  • 資料檔案和索引檔案分開

  • 不支援事務

  • 可以通過壓縮表技術提高效能

  • 索引使用 B+ tree 實現

1、具有1-5工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加群。

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加群。

3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加群。

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加群。

5. 群號:高階架構群 283943715 備註好資訊!

6.阿里Java高階架構師免費直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!