真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MYSQL進(jìn)階怎么學(xué)-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)建站是一家從事企業(yè)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、成都網(wǎng)站制作、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)制作的專業(yè)網(wǎng)絡(luò)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)1000多家。

文章目錄

  • 1 影響性能的幾個(gè)方面


    • 1.1 硬件方面

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

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

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

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

  • 2 硬件方面


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

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


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

    • 2.2.4 使用網(wǎng)絡(luò)存儲(chǔ)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級(jí)別


    • 2.2.2.3 RAID級(jí)別的選擇

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

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

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

    • 2.1.1 如何選擇CPU

    • 2.1.2 內(nèi)存


    • 2.1.2.1 常用MySQL存儲(chǔ)引擎

    • 2.1.2.2 提示

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

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


    • 2.2 磁盤的配置和選擇


    • 2.3 總結(jié)

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


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

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

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

1 影響性能的幾個(gè)方面

1.1 硬件方面

通常個(gè)人計(jì)算機(jī)速度慢,我們都會(huì)說是因?yàn)殡娔X硬件的問題,通常是CPU,內(nèi)存,磁盤IO等因素,因此在服務(wù)器上也會(huì)出現(xiàn)這個(gè)問題。

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

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

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

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

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

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

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

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

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

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

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

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

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

下面具體對(duì)每一個(gè)方面進(jìn)行詳細(xì)的說明。

2 硬件方面

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

2.1.1 如何選擇CPU

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

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

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

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

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

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

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

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

  • 我們所使用的MySQL的版本

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

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

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

2.1.2 內(nèi)存

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

2.1.2.1 常用MySQL存儲(chǔ)引擎

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

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

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

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

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

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

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

2.2 磁盤的配置和選擇

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

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

特點(diǎn):存儲(chǔ)空間大,價(jià)格低,使用最多,最常見,讀、寫較慢

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

  1. 存儲(chǔ)容量

  2. 傳輸速度

  3. 訪問時(shí)間

  4. 主軸轉(zhuǎn)速

  5. 物理尺寸

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

2.2.2.1 什么是RAID

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

2.2.2.2 RAID級(jí)別

2.2.2.2.1 RAID 0

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

2.2.2.2.2 RAID 1

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

2.2.2.2.3 RAID 5 —— 常見的RAID組別

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

2.2.2.2.4 RAID 10 —— 常用的RAID組別

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

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

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

固態(tài)存儲(chǔ)又稱為閃存。
特點(diǎn):

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

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

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

SSD特點(diǎn):

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

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

固態(tài)存儲(chǔ)PCIe卡特點(diǎn):

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

  • 價(jià)格相對(duì)于SSD更貴,但是性能比SSD更好

固態(tài)存儲(chǔ)的使用場(chǎng)景

  • 適用于存在大量隨機(jī)I/O的場(chǎng)景

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

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

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

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

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

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

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

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

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

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

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

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

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

    • 對(duì)多個(gè)網(wǎng)卡進(jìn)行綁定,增強(qiáng)可用性和帶寬

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

2.3 總結(jié)

CPU:

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

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

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

內(nèi)存:

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

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

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

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

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

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
    對(duì)于處于一個(gè)監(jiān)聽狀態(tài)的端口,都有一個(gè)自己的監(jiān)聽隊(duì)列,這個(gè)參數(shù)決定了每個(gè)端口的監(jiān)聽隊(duì)列的較大長度。這個(gè)參數(shù)的默認(rèn)值可能會(huì)比較小,對(duì)于很大的服務(wù)器來說是不夠的,一般會(huì)修改成2048或更大的值。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • noatime、nodiratime
    這兩個(gè)選項(xiàng)用于記錄文件的訪問時(shí)間和讀取目錄的時(shí)間。設(shè)置了這兩個(gè)參數(shù)可以減少一些寫的操作。系統(tǒng)在讀取文件和目錄時(shí)也不必寫操作來記錄以上兩個(gè)時(shí)間。
    下面是文件/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)認(rèn)證和安全等一些功能。每個(gè)連接到mysql的客戶端都在服務(wù)器的進(jìn)程中擁有一個(gè)線程,這個(gè)連接的查詢只會(huì)在這個(gè)線程中進(jìn)行執(zhí)行,也就是我們前面說到的,每個(gè)連接的查詢只用到一個(gè)CPU的核心。
那么這個(gè)體系的第二層,大多數(shù)的mysql核心服務(wù)都在這一層中,如下圖所示。
MYSQL進(jìn)階怎么學(xué)
我們常用的DDL或者DML語句都是在這一層上定義的。但是我們只要記住一點(diǎn)就可以了,所有跨存儲(chǔ)引擎的功能都是在這一層中實(shí)現(xiàn)的,因?yàn)檫@一層也被稱之為服務(wù)層。
我們的結(jié)構(gòu)體系的第三層是存儲(chǔ)引擎層,mysql是一款非常優(yōu)秀的開源數(shù)據(jù)庫,其中定義了一系列了存儲(chǔ)引擎的接口,只要符合存儲(chǔ)引擎的要求,我們就可以對(duì)mysql開發(fā)出一款完全符合自己需要的存儲(chǔ)引擎,比如我們常用的InnoDB,目前mysql支持的存儲(chǔ)引擎有很多,如下圖所示:
MYSQL進(jìn)階怎么學(xué)
注意:存儲(chǔ)引擎是針對(duì)于表的而不是針對(duì)于庫的(一個(gè)庫中的不同表可以使用不同的存儲(chǔ)引擎)



以上是“MYSQL進(jìn)階怎么學(xué)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


新聞標(biāo)題:MYSQL進(jìn)階怎么學(xué)-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://weahome.cn/article/iecii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部