第九章 性能調(diào)優(yōu) 閱讀總結(jié)

????????性能優(yōu)化不是一項(xiàng)簡(jiǎn)單的工作, 但也不是復(fù)雜的難事, 關(guān)鍵在于對(duì)InnoDB存儲(chǔ)引擎特性的了解。 如果之前各章的內(nèi)容讀者已經(jīng)完全理解并掌握了, 那就應(yīng)該基本掌握了 如何使InnoDB存儲(chǔ)引擎更好地工作。 本章將從以下幾個(gè)方面集中講解InnoDB存儲(chǔ)引擎 的性能問(wèn)題:

選擇合適的CPU

內(nèi)存的重要性

硬盤(pán)對(duì)數(shù)據(jù)庫(kù)性能的影響

合理地設(shè)置RAID

操作系統(tǒng)的選擇也很重要

不同文件系統(tǒng)對(duì)數(shù)據(jù)庫(kù)的影響

選擇合適的基準(zhǔn)測(cè)試工具

9.1 選擇合適的CPU

? ??????用戶(hù)首先需要清楚當(dāng)前數(shù)據(jù)庫(kù)的應(yīng)用類(lèi)型。 一般而言, 可分為兩大類(lèi): OLTP (Online Transaction Processing, 在線(xiàn)事務(wù)處理) 和OLAP (Online Analytical Processing, 在線(xiàn)分析處理)。 這是兩種截然不同的數(shù)據(jù)庫(kù)應(yīng)用。 OLAP多用在數(shù)據(jù)倉(cāng)庫(kù)或數(shù)據(jù)集市中, 一般需要執(zhí)行復(fù)雜的SQL語(yǔ)句來(lái)進(jìn)行查詢(xún); OLTP多用在日常的事物處理應(yīng)用中, 如銀行交易、 在線(xiàn)商品交易、 Blog、 網(wǎng)絡(luò)游戲等應(yīng)用。 相對(duì)于OLAP,數(shù)據(jù)庫(kù)的容量較小。

InnoDB存儲(chǔ)引擎一般都應(yīng)用于OLTP的數(shù)據(jù)庫(kù)應(yīng)用, 這種應(yīng)用的特點(diǎn)如下:?

用戶(hù)操作的并發(fā)拭大

事務(wù)處理的時(shí)間一般比較短

查詢(xún)的語(yǔ)句較為簡(jiǎn)單, 一般都走索引

復(fù)雜的查詢(xún)較少

????????可以看出, OLTP的數(shù)據(jù)庫(kù)應(yīng)用本身對(duì)CPU的要求并不是很高, 因?yàn)閺?fù)雜的查詢(xún)可 能需要執(zhí)行比較、 排序、 連接等非常耗CPU的操作, 這些操作在OLTP的數(shù)據(jù)庫(kù)應(yīng)用中較少發(fā)生。 因此, 可以說(shuō)OLA P是CPU密集型的操作, 而OLTP是IO密集型的操作。 建議在采購(gòu)設(shè)備時(shí), 將更多的注意力放在提高IO的配置上。

? ??????從InnoDB存儲(chǔ)引擎的設(shè)計(jì)架構(gòu)上來(lái)看, 其主要的后臺(tái)操作都是在一個(gè)單獨(dú)的master thread中完成的, 因此并不能很好地支持多核的應(yīng)用。 當(dāng)然, 開(kāi)源社區(qū)已經(jīng)通過(guò)多種方法來(lái)改變這種局面, 而InnoDBl.0版本在各種測(cè)試下已經(jīng)顯示出對(duì)多核CPU的處理性能的支持有了極大的提高, 而lnnoDB 1.2版本又支持多個(gè)purge線(xiàn)程, 以及將刷新操作從 master thread中分離出來(lái)。 因此, 若用戶(hù)的CPU支持多核, InnoDB的版本應(yīng)該選擇I.I或更高版本。 另外, 如果CPU是多核的, 可以通過(guò)修改參數(shù)innodb_read_io_ threads和innodb _write_ io _ threads來(lái)增大IO的線(xiàn)程, 這樣也能更充分有效地利用CPU的多核性能。

9.2 內(nèi)存的重要性

????????lnnoDB存儲(chǔ)引擎既緩存數(shù)據(jù), 又緩存索引, 并且將它們緩存于一個(gè)很大的緩沖池中, 即InnoDB Buffer Pool。 因此, 內(nèi)存的大小直接影響了數(shù)據(jù)庫(kù)的性能。

9.3 硬盤(pán)對(duì)數(shù)據(jù)庫(kù)性能的影響

9.3.1 傳統(tǒng)機(jī)械硬盤(pán)

????????傳統(tǒng)機(jī)械硬盤(pán)最大的問(wèn)題在于讀寫(xiě)磁頭,讀寫(xiě)磁頭的設(shè)計(jì)使硬盤(pán)可以不再像磁帶一樣,只能進(jìn)行順序訪(fǎng)問(wèn),而是可以隨機(jī)訪(fǎng)問(wèn)。但是,機(jī)械硬盤(pán)的訪(fǎng)問(wèn)需要耗費(fèi)長(zhǎng)時(shí)間的磁頭旋轉(zhuǎn)和定位來(lái)查找,因此順序訪(fǎng)問(wèn)的速度要遠(yuǎn)高于隨機(jī)訪(fǎng)問(wèn)。傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)的很多設(shè)計(jì)也都是在盡 盤(pán)充分地利用順序訪(fǎng)問(wèn)的特性。

? ??????通常來(lái)說(shuō),可以將多塊機(jī)械硬盤(pán)組成RAID來(lái)提高數(shù)據(jù)庫(kù)的性能,也可以將數(shù)據(jù)文 件分布在不同硬盤(pán)上來(lái)達(dá)到訪(fǎng)問(wèn)負(fù)載的均衡。

9.3.2 固態(tài)硬盤(pán)

? ??????固態(tài)硬盤(pán),更準(zhǔn)確地說(shuō)是基于閃存的固態(tài)硬盤(pán),是近幾年出現(xiàn)的新的存儲(chǔ)設(shè)備,其內(nèi)部由閃存(FlashMemory)組成。因?yàn)殚W存的低延遲性、低功耗,以及防能性,閃存設(shè)備已在移動(dòng)設(shè)備上得到了廣泛的應(yīng)用。企業(yè)級(jí)應(yīng)用一般使用固態(tài)硬盤(pán),通過(guò)并聯(lián)多塊閃存來(lái)進(jìn)步提高數(shù)據(jù)傳輸?shù)耐掏铝俊?/p>

? ??????不同于傳統(tǒng)的機(jī)械硬盤(pán),閃存是一個(gè)完全的電子設(shè)備。因此,固態(tài)硬盤(pán)不需要像傳統(tǒng)機(jī)械硬盤(pán)一樣,需要耗費(fèi)大扯時(shí)間的磁頭旋轉(zhuǎn)和定位來(lái)查找數(shù)據(jù),所以固態(tài)硬盤(pán)可以提供一致的隨機(jī)訪(fǎng)問(wèn)時(shí)間。固態(tài)硬盤(pán)這種對(duì)數(shù)據(jù)的快速讀寫(xiě)和定位特性是值得研究的。

? ? ? ?另一方面,閃存中的數(shù)據(jù)是不可以更新的,只能通過(guò)扇區(qū) (sector) 的覆蓋重寫(xiě),而在覆蓋重寫(xiě)之前,需要執(zhí)行非常耗時(shí)的擦除 (erase) 操作。擦除操作不能在所含數(shù)據(jù)的扇區(qū) 上完成,而需要在刪除整個(gè)被稱(chēng)為擦除塊的基礎(chǔ)上完成,這個(gè)擦除塊的尺寸大于扇區(qū)的大小,通常為 128KB 或者 256KB。此外,每個(gè)擦除塊有擦寫(xiě)次數(shù)的限制。已經(jīng)有 些算法來(lái)解決這個(gè)問(wèn)題。但是對(duì)于數(shù)據(jù)庫(kù)應(yīng)用,需要認(rèn)真考慮固態(tài)硬盤(pán)在寫(xiě)人方面存在的問(wèn)題。

????????因?yàn)榇嬖谏鲜鰧?xiě)入方面的問(wèn)題,閃存提供的讀寫(xiě)速度是非對(duì)稱(chēng)的。讀取速度要遠(yuǎn)快于寫(xiě)入的速度,因此盡量避免過(guò)多的寫(xiě)入操作。

? ??????對(duì)于固態(tài)硬盤(pán)在InnoDB存儲(chǔ)引擎中的優(yōu)化,可以增加innodb_ io _ capacity變量的值達(dá)到充分利用固態(tài)硬盤(pán)帶來(lái)的高IOPS特性。不過(guò)這需要用戶(hù)根據(jù)自己的應(yīng)用進(jìn)行有針對(duì)性的調(diào)整。在InnoSQL及InnoDBl.2版本中,可以選擇關(guān)閉鄰接頁(yè)的刷新,同樣可以為數(shù)據(jù)庫(kù)的性能帶來(lái)一定效果的提升。

9.4 合理地設(shè)置RAID

9.4.1 RAID類(lèi)型

????????RAID (Redundant Array of Independent Disks, 獨(dú)立磁盤(pán)冗余數(shù)組)的基本思想就是把多個(gè)相對(duì)便宜的硬盤(pán)組合起來(lái),成為一個(gè)磁盤(pán)數(shù)組,使性能達(dá)到甚至超過(guò)一個(gè)價(jià)格昂貴、容拭巨大的硬盤(pán)。由于將多個(gè)硬盤(pán)組合成為一個(gè)邏輯扇區(qū),RAID看起來(lái)就像一個(gè)單獨(dú)的硬盤(pán)或邏輯存儲(chǔ)單元,因此操作系統(tǒng)只會(huì)把它當(dāng)作一個(gè)硬盤(pán)。

RAID的作用是:?

增強(qiáng)數(shù)據(jù)集成度

增強(qiáng)容錯(cuò)功能

增加處理量或容量

9.5 操作系統(tǒng)的選擇

? ??????Linux是MySQL數(shù)據(jù)庫(kù)服務(wù)器中最常使用的操作系統(tǒng)。 與其他操作系統(tǒng)不同的是Linux有著眾多的發(fā)行版本, 每個(gè)用戶(hù)的偏好可能不盡相同。 然而在將Linux操作系統(tǒng)作為數(shù)據(jù)庫(kù)服務(wù)器時(shí)需要考慮更多的是操作系統(tǒng)的穩(wěn)定性, 而不是新特性。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容