日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 路人甲Java 2021-05-13

MySQL基本組成

SQL執(zhí)行流程

  • Server 層主要包括連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器,包含了MySQL主要的很多核心功能,以及所有的內(nèi)置函數(shù)、存儲(chǔ)過程、觸發(fā)器、視圖等,其實(shí)就是所有跨存儲(chǔ)引擎的功能都是在這一層實(shí)現(xiàn)的

  • 存儲(chǔ)引擎層,主要負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和讀取,是以插件的形式存在的 ,支持如 InnoDB 、MyISAMMemory 等多個(gè)存儲(chǔ)引擎,現(xiàn)在默認(rèn)為 InnoDB

查詢緩存

  • 當(dāng)一個(gè)SQL執(zhí)行時(shí)首先會(huì)進(jìn)入查詢緩存

  • 查看之前是否執(zhí)行過該語句,如果執(zhí)行過則會(huì)以key-value的形式保存在緩存中,key是查詢語句,value是查詢結(jié)果

  • 如果緩存命中則直接返回結(jié)果,如果查詢語句不在緩存中繼續(xù)后面的流程

  • 大多數(shù)情況下我們不推薦使用查詢緩存,因?yàn)榫彺媸Х浅nl繁,只要一個(gè)更新,那么這個(gè)表上所有的緩存都會(huì)失效,吐過數(shù)據(jù)的更新比較多,那么緩沖命中的效率很低,不斷的在失效

  • 在MySQL中提供了參數(shù) query_cache_type 參數(shù)來設(shè)置,默認(rèn)是 DEMAND ,表示對默認(rèn)的SQL都不使用查詢緩存,如果要對特的語句進(jìn)行緩存查詢,則可以使用 SQL_CACHE 來顯示的指定,如 select SQL_CACHE * from T where ID=1;

  • 在MySQL8.0 開始,查詢緩存整個(gè)功能模塊已經(jīng)刪除掉不再擁有

分析器

  • 分析器主要包含詞法分析語法分析

  • 詞法分析主要分析一條SQL中各個(gè)字符串代表什么,比如 select 標(biāo)記出來,這就是一個(gè)查詢,在具體的表名,查詢 的字段等等全部分析出來

  • 語法分析主要是分析SQL語句是否符合MySQL的規(guī)范,如果我們SQL寫的有問題,那么經(jīng)??吹降囊粋€(gè)異常就是 You have an error in your SQL syntax 的提示

優(yōu)化器

  • 對我們的SQL進(jìn)行優(yōu)化,得到更高的執(zhí)行計(jì)劃

  • 如有多個(gè)索引時(shí)確定要用那個(gè)索引

  • 當(dāng)有多變聯(lián)查join 時(shí),查詢表的順序

  • 對查詢條件和語句的優(yōu)化

執(zhí)行器

  • 首先校驗(yàn)是否有對這張表的訪問權(quán)限,如果沒有權(quán)限則會(huì)報(bào)錯(cuò)

  • 如果有,則根據(jù)引擎接口打開表進(jìn)行數(shù)據(jù)的查詢篩選

Buffer Pool

  • 默認(rèn)大小128MB, 偏小

  • 對于16核32G機(jī)器,可以分配2G內(nèi)存,配置文件:my.ini 配置:

[server]
innodb_buffer_pool_size = 2147483648

數(shù)據(jù)頁

  • MySQL中對數(shù)據(jù)進(jìn)行抽象,按照數(shù)據(jù)頁的形式來存放到文件,當(dāng)查詢時(shí),首先定位到要查詢數(shù)據(jù)所在的數(shù)據(jù)頁,之后將整個(gè)數(shù)據(jù)頁加載到Buffer Pool 中,

  • 數(shù)據(jù)頁默認(rèn)的大小是 16KB , 也就是一頁數(shù)據(jù)包含16KB的數(shù)據(jù)

  • BufferPool 中的數(shù)據(jù)頁一般我們叫緩存頁,默認(rèn)情況下緩存頁與磁盤上的數(shù)據(jù)頁大小是對應(yīng)的

  • 對于每個(gè)緩存頁都有一個(gè)描述信息

  • 描述信息包括:數(shù)據(jù)頁的所屬表空間,數(shù)據(jù)頁的標(biāo)號(hào),這個(gè)緩存頁在Buffer Pool 中的內(nèi)存地址以及其他一些信息

  • Buffer Pool 中,所有的描述信息都在最前面,然后各個(gè)緩存頁放在后面

  • 描述數(shù)據(jù)大小相當(dāng)于緩存頁大小的5% 左右,也就是大概800字節(jié),所以當(dāng)我們設(shè)置buffer pool 的大小為128MB ,但是實(shí)際上 Buffer Pool 的真實(shí)大小會(huì)超出一些,可能有有130MB 左右,這多出來的就是每個(gè)緩存頁的描述信息

表空間

  • 平時(shí)我們創(chuàng)建張表時(shí)都會(huì)在磁盤上對應(yīng)著一個(gè)表名.ibd , 這樣的磁盤數(shù)據(jù)文件,這就是表空間的概念和物理體現(xiàn)

  • 對于一些系統(tǒng)表空間可能存在著對應(yīng)多個(gè)磁盤文件,我們自己創(chuàng)建的表對應(yīng)的表空間一般都是對應(yīng)一個(gè) 表名.ibd 的數(shù)據(jù)文件

數(shù)據(jù)區(qū)

  • 在表空間中有太多的數(shù)據(jù)頁不好管理,這是引入了數(shù)據(jù)區(qū)的概念,英文:extent

  • 一個(gè)數(shù)據(jù)區(qū)中有連續(xù)的64個(gè)數(shù)據(jù)頁,每個(gè)數(shù)據(jù)頁16kb, 所以每個(gè)數(shù)據(jù)區(qū)大小是1MB

  • 同時(shí)265個(gè)數(shù)據(jù)區(qū)被劃分為一組

  • 在表空間中第一組數(shù)據(jù)區(qū)的第一個(gè)數(shù)據(jù)區(qū)前三個(gè)數(shù)據(jù)頁是固定的,存放一些特殊的描述性的信息

    • FSP_HDR 數(shù)據(jù)頁: 存放一些表空間和這一組數(shù)據(jù)區(qū)的屬性

    • IBUF——BITMAP 數(shù)據(jù)頁:存放這組數(shù)據(jù)頁所有的 insert buffer 的一些信息

    • INODE 數(shù)據(jù)頁:存放一些特殊信息

  • 表空間中其他各組數(shù)據(jù)區(qū)的第一個(gè)數(shù)據(jù)區(qū)的頭兩個(gè)數(shù)據(jù)頁都是存放特殊信息的


本文由AnonyStar 發(fā)布,可轉(zhuǎn)載但需聲明原文出處。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多