MySQL性能調優(2)存儲引擎介紹、體系結構及運行機理

存儲引擎介紹

  • 插拔式的插件方式(存儲引擎本身是數據庫服務器的組件,負責對在物理服務器層面上維護的基本數據進行實際操作)
  • 存儲引擎是指定在表之上的,即一個庫中的每一個表都可以指定專用的存儲引擎
  • 最新的MySQL 8.0 發佈之後,對數據庫數據字典方面做了較大的改進。

首先是,將所有原先存放於數據字典文件中的信息,全部存放到數據庫系統表中,即將之前版本的.frm,.opt,.par,.TRN,.TRG,.isl文件都移除了,不再通過文件的方式存儲數據字典信息。
其次是對INFORMATION_SCHEM,MySQL,sys系統庫中的存儲引擎做了改進,原先使用MyISAM存儲引擎的數據字典表都改爲使用InnoDB存儲引擎存放。
從不支持事務的MyISAM存儲引擎轉變到支持事務的InnoDB存儲引擎,爲原子DDL的實現,提供了可能性。

// 查看數據庫當前支持的存儲引擎
show engines;
#### 存儲引擎 ##### CVS存儲引擎 - 數據存儲以CSV文件 - 特點: - 不能定義沒有索引、列定義必須爲NOT NULL、不能設置自增列 -->不適用大表或者數據的在線處理 - CSV數據的存儲用,隔開,可直接編輯CSV文件進行數據的編排 -->數據安全性低 注:編輯之後,要生效使用flush table 表名 命令 - 應用場景: >數據的快速導出導入 >表格直接轉換成CSV
Archive存儲引擎
  • 壓縮協議進行數據的存儲
  • 數據存儲爲ARZ文件格式
  • 特點:
    • 只支持insert和select兩種操作
    • 只允許自增ID列建立索引
    • 行級鎖
    • 不支持事務
    • 數據佔用磁盤少
  • 應用場景:

日誌系統
大量的設備數據採集

  • 我同時在Archive和innodb同結構表中插入1000000條數據:看看大小區別:這是隻有一個id和name的情況下。如果字段更多的話,archive的壓縮率區別就更大了。
Memory存儲引擎
  • 數據都是存儲在內存中,IO效率要比其他引擎高很多
  • 服務重啓數據丟失,內存數據表默認只有16M
  • 特點:
    • 支持hash索引,B tree索引,默認hash(查找複雜度0(1))
    • 字段長度都是固定長度varchar(32)=char(32)
    • 不支持大數據存儲類型字段如 blog,text
    • 表級鎖
  • 應用場景:

等值查找熱度較高數據
查詢結果內存中的計算,大多數都是採用這種存儲引擎作爲臨時表存儲需計算的數據
不過現在基本上用緩存數據庫了

Myisam存儲引擎
  • MySQL5.5版本之前的默認存儲引擎
  • 特點:
    • select count(*) from table 無需進行數據的掃描
    • 數據(MYD)和索引(MYI)分開存儲
    • 表級鎖
    • 不支持事務
Innodb存儲引擎
  • 現在是數據庫默認引擎
  • 特點:
    • 支持事務
    • 行級鎖
    • 聚集索引(主鍵索引)存儲,如果沒有主鍵,那麼會有唯一鍵來做索引,如果還沒有就生成一個隱藏的主鍵索引。
    • 支持外鍵關係保證數據完整性(不過我現在開發中比較少用了。依開發項目實質性來取決於做不做外鍵關聯。)
爲何說外鍵有性能問題:
1.數據庫需要維護外鍵的內部管理;
2.外鍵等於把數據的一致性事務實現,全部交給數據庫服務器完成;
3.有了外鍵,當做一些涉及外鍵字段的增,刪,更新操作之後,需要觸發相關操作去檢查,而不得不消耗資源;
4.外鍵還會因爲需要請求對其他表內部加鎖而容易出現死鎖情況;
對比

MVCC是多版本併發控制:後續單獨分析;

MySQL體系結構及運行機理

  • 先看看體系結構
客戶端連接器:JDBC,ODBC,.NET,PHP等等
連接管理:
    Connection Pool連接池:管理緩衝用戶連接、用戶名、密碼、權限校驗、線程處理等需要緩存的需求
    Management Serveices & Utilities系統管理和控制工具,mysqldump、 MySQL複製集羣、分區管理等
SQL接口:接受用戶的SQL命令,並且返回用戶需要查詢的結果
SQL解析器:SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實現的
查詢優化器:SQL語句在查詢之前會使用查詢優化器對查詢進行優化
Cache和Buffer(高速緩存區):如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據
存儲引擎:pluggable storage Engines 插件式存儲引擎、存儲引擎是MySQL中具體的與文件打交道的子系統
系統管理:file system 文件系統,數據、日誌(redo,undo)、索引、錯誤日誌、查詢記錄、慢查詢等
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章