溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MYSQL進階怎么學(xué)

發(fā)布時間:2021-01-27 10:48:03 來源:億速云 閱讀:203 作者:小新 欄目:MySQL數(shù)據(jù)庫

這篇文章主要介紹MYSQL進階怎么學(xué),文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

文章目錄

  • 1 影響性能的幾個方面


    • 1.1 硬件方面

    • 1.2 服務(wù)器系統(tǒng)

    • 1.3 數(shù)據(jù)庫存儲引擎的選擇

    • 1.4 數(shù)據(jù)庫參數(shù)配置

    • 1.5 數(shù)據(jù)庫結(jié)構(gòu)設(shè)計和SQL語句(重點)

  • 2 硬件方面


    • 2.2.1 使用傳統(tǒng)機器硬盤

    • 2.2.2 使用RAID增強傳統(tǒng)機器硬盤的性能


    • 2.2.3 使用固態(tài)存儲SSD和PCIe卡

    • 2.2.4 使用網(wǎng)絡(luò)存儲NAS和SAN


    • 2.2.2.2.1 RAID 0

    • 2.2.2.2.2 RAID 1

    • 2.2.2.2.3 RAID 5 —— 常見的RAID組別

    • 2.2.2.2.4 RAID 10 —— 常用的RAID組別

    • 2.2.2.1 什么是RAID

    • 2.2.2.2 RAID級別


    • 2.2.2.3 RAID級別的選擇

    • 2.2.4.1 網(wǎng)絡(luò)存儲使用的場景

    • 2.2.4.2 網(wǎng)絡(luò)性能的限制

    • 2.2.4.3 網(wǎng)絡(luò)對性能的影響

    • 2.1.1 如何選擇CPU

    • 2.1.2 內(nèi)存


    • 2.1.2.1 常用MySQL存儲引擎

    • 2.1.2.2 提示

    • 2.1.2.3 如何選擇內(nèi)存

    • 2.1 CPU資源和可用內(nèi)存大小


    • 2.2 磁盤的配置和選擇


    • 2.3 總結(jié)

  • 3 操作系統(tǒng)對性能的影響


    • 3.1 CentOS系統(tǒng)參數(shù)優(yōu)化

  • 4 文件系統(tǒng)對性能的影響

  • 5 MySQL體系結(jié)構(gòu)

1 影響性能的幾個方面

1.1 硬件方面

通常個人計算機速度慢,我們都會說是因為電腦硬件的問題,通常是CPU,內(nèi)存,磁盤IO等因素,因此在服務(wù)器上也會出現(xiàn)這個問題。

1.2 服務(wù)器系統(tǒng)

一般個人電腦的操作系統(tǒng)都是windows,不同版本的windows系統(tǒng)的性能都不相同,或者配置了某一些參數(shù)導(dǎo)致性能的不同。這對于服務(wù)器系統(tǒng)也是一樣,參數(shù)的設(shè)置也會影響服務(wù)器性能。

1.3 數(shù)據(jù)庫存儲引擎的選擇

MySQL具有插件式存儲引擎,可以根據(jù)不同的業(yè)務(wù)需求選擇不同的存儲引擎。
而不同的存儲引擎也有不同的特點:

  • MyISAM:不支持事務(wù),表級鎖。

  • InnoDB:事務(wù)級存儲引擎,完美支持行級鎖,事務(wù)ACID特性。

1.4 數(shù)據(jù)庫參數(shù)配置

對于不同存儲引擎,它的參數(shù)配置都不盡相同,有些參數(shù)對存儲引擎的影響是微乎其微,但有些參數(shù)卻對性能起著決定性作用。因此我們會根據(jù)所選的存儲引擎和不同的業(yè)務(wù)需求,對參數(shù)的優(yōu)化也是很重要的。

1.5 數(shù)據(jù)庫結(jié)構(gòu)設(shè)計和SQL語句(重點)

我們在進行數(shù)據(jù)庫結(jié)構(gòu)設(shè)計的時候應(yīng)該考慮到今后我們要在數(shù)據(jù)庫上執(zhí)行怎樣的sql語句,來對表結(jié)構(gòu)進行查詢和更新,只有這樣才能設(shè)計出符合要求的表結(jié)構(gòu)。
對于慢查詢,是導(dǎo)致性能低下的罪魁禍?zhǔn)祝褪怯捎谖覀儗?shù)據(jù)庫表結(jié)構(gòu)設(shè)計不合理而產(chǎn)生的。而對于這類sql來說,也是最難優(yōu)化的,因為項目一旦上線,就很難對數(shù)據(jù)庫表結(jié)構(gòu)進行修改。

因此我們優(yōu)化數(shù)據(jù)庫性能的重點在于:

  • 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計

  • SQL語句的編寫和優(yōu)化

下面具體對每一個方面進行詳細的說明。

2 硬件方面

2.1 CPU資源和可用內(nèi)存大小

2.1.1 如何選擇CPU

通常在選擇CPU的時候,我們都希望CPU的頻率和核心數(shù)量兩者都盡量高,但由于成本或各種因素,往往只能迫使我們選擇其中的一種。那我們應(yīng)該怎樣選擇最優(yōu)的方案?因此,在購買CPU時我們需要注意幾點問題:

  • 我們的應(yīng)用時CPU密集型的嗎?

    • 如果我們的應(yīng)用為CPU密集型的話,要加快sql的處理速度,顯然我們需要更好的CPU,而不是更多的CPU。

    • 對于當(dāng)前的MySQL而言,還不支持duoCPU對同一SQL并發(fā)處理。

  • 我們系統(tǒng)的并發(fā)量如何?

    • 如果我們系統(tǒng)需要更多吞吐量,那么我們的CPU則是越多越好。假設(shè)我們有40個CPU,那我們是不是可以同時處理40個SQL了呢。

    • 衡量數(shù)據(jù)庫處理能力的指標(biāo):QPS,指的是同時處理SQL的數(shù)量。但這個指標(biāo)是在1s中處理SQL的數(shù)量,但上一點闡述的同時處理是在納秒級的維度上。

    • MySQL通常是使用在web應(yīng)用上的,往往并發(fā)量比較大,這時CPU數(shù)量比CPU頻率更為重要。

  • 我們所使用的MySQL的版本

    • 在5.0版本之前,MySQL對多核的CPU支持是并不好,對系統(tǒng)的限制是很嚴重的,在現(xiàn)在5.6,5.7版本上,對多核CPU的支持已經(jīng)有了很大的改善。因此推薦使用最新版的MySQL版本,以達到更好的性能。

  • 選擇32位還是64位的CPU?

    • 目前服務(wù)器的CPU默認都是64位架構(gòu)的,但是要注意,要檢查好系統(tǒng)是否在64位上裝了32位的服務(wù)器版本,這會嚴重影響服務(wù)器性能。

2.1.2 內(nèi)存

內(nèi)存的大小直接影響數(shù)據(jù)庫的性能。目前內(nèi)存的效率要遠遠高于磁盤。因此把數(shù)據(jù)緩存到內(nèi)存中,可以大大提高服務(wù)器性能。

2.1.2.1 常用MySQL存儲引擎

有兩種常用的存儲引擎:MyISAM和InnoDB。
MyISAM
索引存儲在內(nèi)存中,數(shù)據(jù)保存在硬盤中。
MYSQL進階怎么學(xué)
InnoDB:
索引和數(shù)據(jù)都保存在內(nèi)存中,從而提高數(shù)據(jù)庫的運行效率。
MYSQL進階怎么學(xué)

2.1.2.2 提示
  1. 雖然內(nèi)存的數(shù)量是越多越好,但是對系統(tǒng)的性能影響是有限的。
    假如我們數(shù)據(jù)庫的數(shù)據(jù)有100G,那么內(nèi)存選擇在128G左右就可以達到最大的性能了,這時如果所有的數(shù)據(jù)都是熱數(shù)據(jù),那么都會緩存在內(nèi)存當(dāng)中,沒有必要上256G的內(nèi)存,但是選擇更大的內(nèi)存,對于操作系統(tǒng)等其他服務(wù)的性能也會有相應(yīng)的提高,并且在短期內(nèi)不用考慮升級內(nèi)存的問題。

  2. 對于內(nèi)存緩存的寫操作時,可以進行延緩寫入,減少數(shù)據(jù)庫的壓力。
    內(nèi)存在讀操作上已經(jīng)有了很好的支持,在寫操作上也可以在內(nèi)存上完成,我們最后都需要將數(shù)據(jù)寫入到磁盤中,雖然不能避免寫入磁盤的操作,但是我們可以對寫入操作進行延緩,將多次寫入合并成一次寫入,減輕數(shù)據(jù)庫的壓力。數(shù)據(jù)庫提供了類似的功能,可以在緩存池中將多次的寫操作合并成一次,最終寫入磁盤中。

2.1.2.3 如何選擇內(nèi)存

  1. 盡量使用主板能夠支持最大頻率的內(nèi)存

  2. 組成購買升級,每個通道的內(nèi)存盡量相同品牌、顆粒、頻率、電壓、校驗技術(shù)和型號。

  3. 根據(jù)數(shù)據(jù)庫大小選擇內(nèi)存。

2.2 磁盤的配置和選擇

雖然內(nèi)存對數(shù)據(jù)庫性能起到很大的作用,但是我們不能忽略IO子系統(tǒng)對性能的影響。目前我們常用的磁盤選擇有以下4種:

2.2.1 使用傳統(tǒng)機器硬盤

特點:存儲空間大,價格低,使用最多,最常見,讀、寫較慢

  • 如何選擇傳統(tǒng)機器硬盤?

  1. 存儲容量

  2. 傳輸速度

  3. 訪問時間

  4. 主軸轉(zhuǎn)速

  5. 物理尺寸

2.2.2 使用RAID增強傳統(tǒng)機器硬盤的性能

2.2.2.1 什么是RAID

RAID是磁盤冗余隊列的簡稱(Redundant Arrays of Independent Disks),簡單來說RAID的作用就是把多個容量較小的磁盤組成一組容量更大的磁盤,并提供數(shù)據(jù)冗余來保證數(shù)據(jù)完整性的技術(shù)。

2.2.2.2 RAID級別

2.2.2.2.1 RAID 0

RAID 0 是最早出現(xiàn)的RAID模式,也稱之為數(shù)據(jù)條帶。是組件磁盤陣列中最簡單的一種形式,只需要2塊以上的硬盤即可,成本低,可以提高整個磁盤的性能和吞吐量。RAID 0沒有提供冗余或錯誤修復(fù)能力,但是實現(xiàn)成本是最低的。但在考慮到數(shù)據(jù)恢復(fù)和可靠性因素,RAID 0成為了成本最高的配置,因為RAID 0中沒有冗余,并且數(shù)據(jù)在損壞的概率在當(dāng)個磁盤中的還要高。因為數(shù)據(jù)在任意一個磁盤中損壞都會造成數(shù)據(jù)的丟失。比如由3塊磁盤組成的RAID 0,其損壞的幾率是單個硬盤的3倍。
因此RAID 0適用于不會單一丟失數(shù)據(jù)的情況,比如:可以隨時可以從其他數(shù)據(jù)庫克隆的備庫或者某些只需一次性使用的數(shù)據(jù)庫。
MYSQL進階怎么學(xué)
簡單來說,RAID 0就是將硬盤串聯(lián)在一起,形成更大的磁盤,比如:
MYSQL進階怎么學(xué)
并且在并發(fā)的過程中,可以達到相當(dāng)于單個硬盤3倍的性能。

2.2.2.2.2 RAID 1

RAID 1 又稱磁盤鏡像,原理是把一個磁盤的數(shù)據(jù)鏡像到另一個磁盤上,也就是說數(shù)據(jù)在寫入一塊磁盤的同時,會在另一塊限制的磁盤上生成鏡像文件,在不影響性能情況下最大限度的保證系統(tǒng)的可靠性和可修復(fù)性。
MYSQL進階怎么學(xué)
它與RAID 0不同的地方在,中間的地方畫上了一個等于號。兩個磁盤的數(shù)據(jù)都是一樣的,具備良好的冗余能力,但成本會相應(yīng)的提高,當(dāng)出現(xiàn)磁盤故障的情況下也可以正常運行,但需要即使更換故障的磁盤,否則系統(tǒng)也會崩潰。
在更換新的磁盤后,數(shù)據(jù)的同步需要消耗很多時間,雖然不會對數(shù)據(jù)的訪問造成影響,但系統(tǒng)的性能是會有所下降的。
RAID 1在很多情況下,可以提供很好的性能,并且在不同磁盤間冗余數(shù)據(jù),因此數(shù)據(jù)冗余性很好。RAID 1在讀上比RAID 0 要好,因此比較適合在存放日志或類似的工作。

2.2.2.2.3 RAID 5 —— 常見的RAID組別

RAID 5 又稱之為分布式奇偶校驗磁盤陣列。通過分布式奇偶校驗塊把數(shù)據(jù)分散到多個磁盤上,這樣如果任何一個盤數(shù)據(jù)失效,都可以從奇偶校驗塊中重建。但是如果兩塊磁盤失效,則整個卷的數(shù)據(jù)都無法恢復(fù)。
MYSQL進階怎么學(xué)
可見,每個磁盤中分別有Dp,Cp,Bp,Ap,如果其中一塊磁盤出現(xiàn)問題,則可以通過其他三塊磁盤的數(shù)據(jù)和奇偶校驗值重新計算出磁盤的數(shù)據(jù)。
對于RAID 0和RAID 1而言,這是最經(jīng)濟的冗余配置,因為整個陣列配置只需要1塊磁盤的容量就可以了。
在RAID 5上寫速度較慢,因為每次寫都要在磁盤之間進行2次讀和2次寫,以計算存儲校驗位的數(shù)值,但是,隨機讀和順序讀都很快,因為在讀取的時候不需要計算奇偶校驗位,因此RAID 5 更適合以讀為主的數(shù)據(jù)庫業(yè)務(wù)。
RAID 5發(fā)生的最大問題是在磁盤失效的時候,因為數(shù)據(jù)需要重新分配到其他磁盤上,這將會嚴重影響磁盤的性能,所以使用RAID 5最好使用在重讀的情況下。

2.2.2.2.4 RAID 10 —— 常用的RAID組別

RAID 10又稱分片的鏡像。它是對磁盤先做RAID 1之后對兩組RAID 1的磁盤再做RAID 0,所以對讀寫都有良好的性能,相對于RAID 5重建起來更簡單,速度也更快。
MYSQL進階怎么學(xué)
在RAID 10上,如果損壞了一個硬盤,那么對性能會造成嚴重的影響,因為在讀寫過程中,本來可以在兩塊相鄰的磁盤中同時讀取,如果損壞了一塊,那么只能從單臺磁盤進行讀取,因此最壞的情況下,我們的性能會降低50%。

2.2.2.3 RAID級別的選擇
等級特點是否冗余盤數(shù)
RAID 0便宜,快速,危險N
RAID 1高速讀,簡單,安全2
RAID 5安全,成本折中N+1取決于最慢的盤
RAID 10貴,高速,安全2N

2.2.3 使用固態(tài)存儲SSD和PCIe卡

固態(tài)存儲又稱為閃存。
特點:

  • 相比機械磁盤固態(tài)磁盤有更好的隨機讀寫性能

  • 相比機械磁盤固態(tài)磁盤有更好的支持并發(fā)

  • 相比機械磁盤固態(tài)磁盤更容易損壞

SSD特點:

  • 使用SATA接口,可以替換傳統(tǒng)磁盤而不需任何改變

  • SATA接口的SSD同樣支持RAID技術(shù)

固態(tài)存儲PCIe卡特點:

  • 無法使用SATA接口,需要獨特的驅(qū)動和配置

  • 價格相對于SSD更貴,但是性能比SSD更好

固態(tài)存儲的使用場景

  • 適用于存在大量隨機I/O的場景

  • 使用解決單線程負載的I/O瓶頸

2.2.4 使用網(wǎng)絡(luò)存儲NAS和SAN

SAN(Strorage Area Network) 和 NAS(Network-Attached Storage) 是兩種外部文件存儲設(shè)備加載到服務(wù)器上的方法。

SAN:
SAN設(shè)備通過光纖連接到服務(wù)器,設(shè)備通過塊接口訪問,服務(wù)器可以將其當(dāng)作硬盤使用。

MYSQL進階怎么學(xué)
SAN的特點:
MYSQL進階怎么學(xué)
NAS:
NAS設(shè)備使用網(wǎng)絡(luò)連接,通過基于文件的協(xié)議如NFS或SMB來訪問。

2.2.4.1 網(wǎng)絡(luò)存儲使用的場景

適合使用在數(shù)據(jù)庫備份。

2.2.4.2 網(wǎng)絡(luò)性能的限制

網(wǎng)絡(luò)性能的限制主要是延遲和帶寬。

2.2.4.3 網(wǎng)絡(luò)對性能的影響

  • 網(wǎng)絡(luò)帶寬對性能的影響

  • 網(wǎng)絡(luò)質(zhì)量對性能的影響
    建議:

    • 采用高性能和高帶寬的網(wǎng)絡(luò)接口設(shè)備和交換機

    • 對多個網(wǎng)卡進行綁定,增強可用性和帶寬

    • 盡可能的進行網(wǎng)絡(luò)隔離

2.3 總結(jié)

CPU:

  • 64位的CPU一定要工作在64位的系統(tǒng)下

  • 對于并發(fā)比較高的場景CPU的數(shù)量比頻率重要

  • 對于CPu密集型場景和復(fù)雜SQL則頻率越高越好

內(nèi)存:

  • 選擇主板所能使用的最高頻率的內(nèi)存

  • 內(nèi)存的大小對性能很重要,所以盡可能的大

I/O子系統(tǒng):

  • PCIe -> SSD -> RAID10 -> 磁盤 -> SAN

3 操作系統(tǒng)對性能的影響

MySQL適合的操作系統(tǒng):Windows,F(xiàn)reeBSD,Solaris,Linux

3.1 CentOS系統(tǒng)參數(shù)優(yōu)化

內(nèi)核相關(guān)參數(shù)(/etc/sysctl.conf)

  1. net.core.somaxconn = 65535
    對于處于一個監(jiān)聽狀態(tài)的端口,都有一個自己的監(jiān)聽隊列,這個參數(shù)決定了每個端口的監(jiān)聽隊列的最大長度。這個參數(shù)的默認值可能會比較小,對于很大的服務(wù)器來說是不夠的,一般會修改成2048或更大的值。

  2. net.core.netdev_max_backlog=65535
    net.ipv4.tcp_max_syn_backlog=65535
    其中backlog這個參數(shù)決定了在每個網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理機處理快的時候,允許被發(fā)送到隊列中的數(shù)據(jù)包的最大的數(shù)目,而另一個參數(shù)了是決定了這些還未獲得對方連接的這種請求可保存在隊中的最大數(shù)目。對于超過這個值大小的連接可能會被拋棄,所以要同時調(diào)大一些。

  3. net.ipv4.tcp_fin_timeout = 10
    這個參數(shù)是用于控制tcp連接處理的等待狀態(tài)的超時時間。對于連接比較頻繁的系統(tǒng),通常由大量的連接數(shù)處于等待狀態(tài),這個參數(shù)的設(shè)置就是減少連接超時的時間,加快tcp的回收速度。同樣有對tcp連接有影響的參數(shù)有以下兩個:
    net.ipv4.tcp_tw_reuse = 1、net.ipv4.tcp_tw_recycle = 1
    這三個參數(shù)都是主要加快tcp的回收,在高負載的系統(tǒng)下,如果tcp連接被占滿的話,就會出現(xiàn)連接數(shù)據(jù)庫500的錯誤,因此這三個參數(shù)的作用是很大的。

  4. net.core.wmem_default = 87380、net.core.wmem_max = 16777216net.core.r0mem_default = 87380、net.core.rmem_max = 16777216
    以上4個參數(shù)決定了tcp連接接收和發(fā)送緩沖區(qū)大小的默認值和最大值。對于數(shù)據(jù)庫來說,應(yīng)該把這幾個參數(shù)的值調(diào)整的稍微大一些。

  5. net.ipv4.tcp_keepalive_time = 120、net.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 3
    以上三個參數(shù)用于減少失效連接所占用的tcp系統(tǒng)資源的數(shù)量,加快資源回收的效率,net.ipv4.tcp_keepalive_time是表示tcp發(fā)送tcp_keepalive探測消息的時間的間隔,單位為秒, 用于確認tcp連接是否有效。net.ipv4.tcp_keepalive_intvl用于當(dāng)探測這個tcp連接沒有反應(yīng)后,重新發(fā)送探測消息的時間間隔,單位為秒,net.ipv4.tcp_keepalive_probes表示在認定tcp連接失效之前,需要發(fā)送多少個tcp_keepalive探測消息。這三個參數(shù)的默認值對于一個平常系統(tǒng)來說稍微有點大了,所以這里分別對它們改為了小了一些。

  6. kernel.shmmax = 4294967295
    這個參數(shù)是Linux內(nèi)核參數(shù)中最重要的參數(shù)之一,用于定義單個共享內(nèi)存段的最大值。
    注意

    • 這個參數(shù)應(yīng)該設(shè)置的足夠大,以便能在一個共享內(nèi)存段下容納下整個的Innodb緩沖池的大小。

    • 這個值的大小對于64為Linux系統(tǒng),可取的最大值為物理內(nèi)存值 - 1 byte,建議值為大于物理內(nèi)存段的一半,一般取直大于Innodb緩沖池的大小即可,可以取物理內(nèi)存 - 1 byte。

  7. vm.swappiness = 0
    這個參數(shù)當(dāng)內(nèi)存不足時會對性能產(chǎn)生比較明顯的影響。這個參數(shù)就是告訴Linux系統(tǒng)內(nèi)核除非虛擬內(nèi)存完全滿了,否則不要使用交換區(qū)。
    Linux系統(tǒng)內(nèi)存交換分區(qū)
    在Linux系統(tǒng)安裝時都會有一個特殊的磁盤分區(qū),稱之為系統(tǒng)交換分區(qū)。如果我們使用free -m在系統(tǒng)中查看可以看到類似下面的內(nèi)容,其中swap就是交換分區(qū)。當(dāng)操作系統(tǒng)因為沒有足夠的內(nèi)存時就會將一些虛擬內(nèi)存寫到磁盤的交換區(qū)中這樣就會發(fā)生內(nèi)存交換。
    在MySQL服務(wù)所在的Linux系統(tǒng)上完全禁用交換分區(qū),會帶來以下兩點風(fēng)險:

    • 降低操作系統(tǒng)的性能

    • 容易造成內(nèi)存溢出崩潰,或都被操作系統(tǒng)Kill掉

增加資源限制(/etc/security/limit.conf)
limit.conf這個文件實際上時Linx PAM也就是插入式認證模塊的配置文件。
其中比較重要的參數(shù)配置就是打開文件數(shù)的限制。
MYSQL進階怎么學(xué)
結(jié)論:把可打開的文件數(shù)量增加到了65535個以保證可以打開足夠多的文件句柄。
注意:這個文件的修改需要重啟服務(wù)器后生效。

磁盤調(diào)度策略(/sys/block/devname/queue/scheduler)
可以使用命令cat /sys/block/sda/queue/scheduler查看當(dāng)前磁盤所使用的調(diào)度策略。下面的noop anticipatory deadline [cfq]為系統(tǒng)默認的cfq調(diào)度策略。
在MySQL數(shù)據(jù)庫服務(wù)下,cfq并不合適,是由于在MySQL工作過程中,cfq會在隊列中插入一些不必要的請求,導(dǎo)致很差的響應(yīng)時間。
MYSQL進階怎么學(xué) 除了cfq調(diào)度策略,還有以下幾種策略:
noop(電梯式調(diào)度策略):
MYSQL進階怎么學(xué)
deadline(截止時間調(diào)度策略):
MYSQL進階怎么學(xué)
anticipatory(預(yù)料I/O調(diào)度策略):
MYSQL進階怎么學(xué)
我們可以輸入以下命令來改變磁盤的調(diào)度策略:
echo schedulerName > /sys/block/sda/queue/scheduler
如:echo deadline > /sys/block/sda/queue/scheduler

4 文件系統(tǒng)對性能的影響

推薦使用XFS文件系統(tǒng),在EXT3和EXT4下需要配置以下參數(shù):
MYSQL進階怎么學(xué)
EXT3/4系統(tǒng)的掛載參數(shù)(/etc/fstab):

  • data=writeback | ordered | journal
    這個參數(shù)一共有三個可選擇的值,writeback表示只有元數(shù)據(jù)寫入到日志,元數(shù)據(jù)寫入和數(shù)據(jù)寫入并不是同步的。這是一種最快的配置,因為InnoDB原本有自己的事務(wù)日志,所以通常是InnoDB最好的選擇。ordered只會記錄元數(shù)據(jù),但提供了一些一致性的保證,在寫元數(shù)據(jù)之前,會先寫數(shù)據(jù),使它們保持一致,這個選項比writeback稍微慢一點,但出現(xiàn)崩潰會更加安全。journal提供了原子日志的行為,在數(shù)據(jù)寫入到最終的日志之前,將記錄到日志中。這個選項對于InnoDB顯然是沒有必要的,也是三種中最慢的一種。

  • noatimenodiratime
    這兩個選項用于記錄文件的訪問時間和讀取目錄的時間。設(shè)置了這兩個參數(shù)可以減少一些寫的操作。系統(tǒng)在讀取文件和目錄時也不必寫操作來記錄以上兩個時間。
    下面是文件/dev/sda1/ext4中的一些配置:
    noatime,nodiratime,data=writeback 1 1

5 MySQL體系結(jié)構(gòu)

體系結(jié)構(gòu)在最上層的叫做客戶端,這一層代表了可以通過mysql連接協(xié)議連接到mysql的客戶端,比如說PHP,JAVA,C API,.Net以及ODBC,JDBC等,從這里可以看出,這一層并不是mysql體系結(jié)構(gòu)所特有。大多數(shù)CS架構(gòu)的服務(wù)都是采用了這一種體系結(jié)構(gòu)。這一層主要是完成了連接處理,授權(quán)認證和安全等一些功能。每個連接到mysql的客戶端都在服務(wù)器的進程中擁有一個線程,這個連接的查詢只會在這個線程中進行執(zhí)行,也就是我們前面說到的,每個連接的查詢只用到一個CPU的核心。
那么這個體系的第二層,大多數(shù)的mysql核心服務(wù)都在這一層中,如下圖所示。
MYSQL進階怎么學(xué)
我們常用的DDL或者DML語句都是在這一層上定義的。但是我們只要記住一點就可以了,所有跨存儲引擎的功能都是在這一層中實現(xiàn)的,因為這一層也被稱之為服務(wù)層。
我們的結(jié)構(gòu)體系的第三層是存儲引擎層,mysql是一款非常優(yōu)秀的開源數(shù)據(jù)庫,其中定義了一系列了存儲引擎的接口,只要符合存儲引擎的要求,我們就可以對mysql開發(fā)出一款完全符合自己需要的存儲引擎,比如我們常用的InnoDB,目前mysql支持的存儲引擎有很多,如下圖所示:
MYSQL進階怎么學(xué)
注意:存儲引擎是針對于表的而不是針對于庫的(一個庫中的不同表可以使用不同的存儲引擎)

以上是“MYSQL進階怎么學(xué)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI