日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 高性能引擎_《高性能MySQL》笔记1-MySQL架构与引擎

發布時間:2025/3/21 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 高性能引擎_《高性能MySQL》笔记1-MySQL架构与引擎 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

## 架構

![](/img/pic/2019062020293149827_png_583_418_76732)

> MySQL架構圖

MySQL的架構分為三層。

第一層只負責提供服務,包括鏈接處理、授權認證、安全等,做一些必要的檢查、適配工作,類似Web應用的Controller層。

第二層包含了大多數MySQL的核心功能,包含查詢解析、分析、優化、緩存等,以及一些跨存儲引擎的功能,類似Web應用的Service層。

第三層包含多種存儲引擎,每種引擎有自身的特性,但最終提供統一的底層API與上層通信,屏蔽了底層存儲引擎的差異,類似Web應用的Dao層。

總體來說MySQL的架構與Web應用非常類似,高內聚低耦合。

## 鎖

MySQL的鎖大致分為兩種:

- 讀鎖:共享鎖

在沒有寫鎖時允許同時有多個線程并發讀取,讀鎖優先級低

- 寫鎖:排它鎖

寫鎖阻塞其他的讀鎖與寫鎖,寫鎖優先級高

讀寫鎖有優先級先后之分,猜測MySQL鎖的機制與Java中ReentrantReadWriteLock(true)即公平版讀寫鎖類似:

- 加鎖操作先排隊

- 如果是讀鎖請求且排在隊首,且當前沒有寫鎖線程(排它鎖未被其他線程占用),就可以加共享鎖

- 如果是寫鎖請求在隊首,當前共享鎖未釋放,就不可以加排它鎖

- 寫鎖請求優先級高,可以插隊

## 多版本并發控制 MVCC

加鎖畢竟是一個開銷大的操作,使用MVCC可以盡量避免加鎖,提高并發程度。

### InnoDB的簡化版MVCC行為

InnoDB的MVCC通過事務版本號控制來實現。

InnoDB每行數據有兩個隱藏列:創建版本號和過期版本號。

系統有個版本號,會在每個事務開始時自增,事務版本號就使用此時的系統版本號,事務只允許查詢小于等于自身版本號的數據行。

隔離級別在RR可重復讀的情況下InnoDB的MVCC行為:

**SELECT**

返回數據范圍:

1. 創建版本小于等于本事務版本的

意味著是事務開始前或本事務創建的

2. 沒有刪除版本號,或者刪除版本號大于本事務版本號

意味著未被刪除,或是事務開始后刪除的

**INSERT**

數據行使用當前事務版本號作為創建版本號

**僅僅這樣會導致幻讀,InnoDB使用間隙鎖(next-key locking)來防止幻讀**

**DELETE**

數據行使用當前系統版本號作為過期版本號

**UPDATE**

1. 插入新行,創建版本為當前事務版本

2. 原來的行,過期版本修改為當前事務版本

## 引擎

MySQL應用最廣泛的引擎是InnoDB引擎,除此之外需要深入了解的引擎是MyISAM引擎,MyISAM與InnoDB應用場景有較大不同,且各有鮮明特點。

### InnoDB引擎

MySQL默認引擎,可以說是萬金油型,如果沒有特別的理由或是不知道應該用什么引擎時,就**應該用InnoDB引擎**。

**InnoDB的特點**

1. 性能非常好

2. 支持事務

3. 使用MVCC支持高并發

4. 使用聚簇索引,主鍵查詢性能高

5. 支持行鎖

6. 支持熱備份

7. 自動崩潰恢復

8. 很多自適應優化

9. 索引占用大

InnoDB性能高、支持事務、鎖粒度小等因素使得其適合應用于各種需求,除非用到某些InnoDB不具備的特性且沒有其他辦法替代,否則應該**優先考慮使用InnoDB引擎**。

### MyISAM引擎

MyISAM在某些方面可以被視為與InnoDB“異化競爭”的引擎,通常情況下如果不適合使用InnoDB引擎,應該考慮MyISAM引擎。

**MyISAM的特點**

1. 提供全文索引

2. 不支持事務

3. 不支持行鎖,使用表鎖

4. 支持并發插入,即其他線程對表加了讀鎖,也可以向其中插入記錄

5. 占用空間小

6. 支持數據壓縮

7. 支持寫入緩存,批量刷盤

8. 支持地理空間函數,支持地理空間搜索

MyISAM相對于InnoDB引擎具有優勢的部分在于數據占用空間小,插入速度快、開銷低,可以壓縮數據。

但是這些優勢卻犧牲了許多目前大多數應用場景中必不可少的點,也就是InnoDB那些特點,所以**應該優先考慮InnoDB**。

## 參考資料

[第一章、MySQL架構及歷史 - 簡書](https://www.jianshu.com/p/1f17a496f14e)

總結

以上是生活随笔為你收集整理的mysql 高性能引擎_《高性能MySQL》笔记1-MySQL架构与引擎的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。