數據庫 | 001-MySQL梳理系列(一)

MySQL基本組成

SQL執行流程

  • Server 層主要包括鏈接器、查詢緩存、分析器、優化器、執行器,包含了MySQL主要的不少核心功能,以及全部的內置函數、存儲過程、觸發器、視圖等,其實就是全部跨存儲引擎的功能都是在這一層實現的
  • 存儲引擎層,主要負責數據的存儲和讀取,是以插件的形式存在的 ,支持如 InnoDBMyISAMMemory 等多個存儲引擎,如今默認爲 InnoDB

查詢緩存

  • 當一個SQL執行時首先會進入查詢緩存
  • 查看以前是否執行過該語句,若是執行過則會以key-value的形式保存在緩存中,key是查詢語句,value是查詢結果
  • 若是緩存命中則直接返回結果,若是查詢語句不在緩存中繼續後面的流程
  • 大多數狀況下咱們不推薦使用查詢緩存,由於緩存失效很是頻繁,只要一個更新,那麼這個表上全部的緩存都會失效,吐過數據的更新比較多,那麼緩衝命中的效率很低,不斷的在失效
  • 在MySQL中提供了參數 query_cache_type 參數來設置,默認是 DEMAND ,表示對默認的SQL都不使用查詢緩存,若是要對特的語句進行緩存查詢,則可使用 SQL_CACHE 來顯示的指定,如 select SQL_CACHE * from T where ID=1;
  • 在MySQL8.0 開始,查詢緩存整個功能模塊已經刪除掉再也不擁有

分析器

  • 分析器主要包含詞法分析語法分析
  • 詞法分析主要分析一條SQL中各個字符串表明什麼,好比 select 標記出來,這就是一個查詢,在具體的表名,查詢 的字段等等所有分析出來
  • 語法分析主要是分析SQL語句是否符合MySQL的規範,若是咱們SQL寫的有問題,那麼常常看到的一個異常就是 You have an error in your SQL syntax 的提示

優化器

  • 對咱們的SQL進行優化,獲得更高的執行計劃
  • 若有多個索引時肯定要用那個索引
  • 當有多變聯查join 時,查詢表的順序
  • 對查詢條件和語句的優化

執行器

  • 首先校驗是否有對這張表的訪問權限,若是沒有權限則會報錯
  • 若是有,則根據引擎接口打開表進行數據的查詢篩選

Buffer Pool

  • 默認大小128MB, 偏小
  • 對於16核32G機器,能夠分配2G內存,配置文件:my.ini 配置:
[server]
innodb_buffer_pool_size = 2147483648

數據頁

  • MySQL中對數據進行抽象,按照數據頁的形式來存放到文件,當查詢時,首先定位到要查詢數據所在的數據頁,以後將整個數據頁加載到Buffer Pool 中,
  • 數據頁默認的大小是 16KB , 也就是一頁數據包含16KB的數據
  • BufferPool 中的數據頁通常咱們叫緩存頁,默認狀況下緩存頁與磁盤上的數據頁大小是對應的
  • 對於每一個緩存頁都有一個描述信息
  • 描述信息包括:數據頁的所屬表空間,數據頁的標號,這個緩存頁在Buffer Pool 中的內存地址以及其餘一些信息
  • Buffer Pool 中,全部的描述信息都在最前面,而後各個緩存頁放在後面

  • 描述數據大小至關於緩存頁大小的5% 左右,也就是大概800字節,因此當咱們設置buffer pool 的大小爲128MB ,可是實際上 Buffer Pool 的真實大小會超出一些,可能有有130MB 左右,這多出來的就是每一個緩存頁的描述信息

表空間

  • 平時咱們建立張表時都會在磁盤上對應着一個表名.ibd , 這樣的磁盤數據文件,這就是表空間的概念和物理體現
  • 對於一些系統表空間可能存在着對應多個磁盤文件,咱們本身建立的表對應的表空間通常都是對應一個 表名.ibd 的數據文件

數據區

  • 在表空間中有太多的數據頁很差管理,這是引入了數據區的概念,英文:extent
  • 一個數據區中有連續的64個數據頁,每一個數據頁16kb, 因此每一個數據區大小是1MB
  • 同時265個數據區被劃分爲一組
  • 在表空間中第一組數據區的第一個數據區前三個數據頁是固定的,存放一些特殊的描述性的信息緩存

    • FSP_HDR 數據頁: 存放一些表空間和這一組數據區的屬性
    • IBUF——BITMAP 數據頁:存放這組數據頁全部的 insert buffer 的一些信息
    • INODE 數據頁:存放一些特殊信息
  • 表空間中其餘各組數據區的第一個數據區的頭兩個數據頁都是存放特殊信息的

本文由AnonyStar 發佈,可轉載但需聲明原文出處。
歡迎關注微信公帳號 :雲棲簡碼 獲取更多優質文章
更多文章關注筆者博客 : 雲棲簡碼 i-code.online
相關文章
相關標籤/搜索