在服務(wù)器硬件中,最容易影響數(shù)據(jù)庫性能的是CPU資源和可用內(nèi)存大小以及I/O。
創(chuàng)新互聯(lián)建站主營淮濱網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),淮濱h5微信小程序定制開發(fā)搭建,淮濱網(wǎng)站營銷推廣歡迎淮濱等地區(qū)企業(yè)咨詢
選擇CPU時(shí)需要考慮的點(diǎn):
內(nèi)存:
使用傳統(tǒng)機(jī)器磁盤。機(jī)械硬盤讀取數(shù)據(jù)的過程:
注:第一步+第二部=磁盤的訪問時(shí)間。第三步消耗的時(shí)間=磁盤的傳輸速度
所以選擇機(jī)械硬盤主要參考以下幾個(gè)點(diǎn):
RAID:
常用的RAID模式 - RAID 0:
RAID 0是最早出現(xiàn)的RAID模式,也稱之為數(shù)據(jù)條帶。是組建磁盤陣列中最簡單的一種形式,只需要2塊以上的硬盤即可,成本低,可以提高整個(gè)磁盤的性能和吞吐量。 RAID 0沒有提供冗余或錯誤修復(fù)能力,但是實(shí)現(xiàn)成本是最低的
RAID 0 模式結(jié)構(gòu)圖:
常用的RAID模式 - RAID 1:
RAID 1又稱磁盤鏡像,原理是把一個(gè)磁盤的數(shù)據(jù)鏡像到另一個(gè)磁盤上,也就是說數(shù)據(jù)在寫入一塊磁盤的同時(shí)會在另一塊閑置的磁盤上生成鏡像文件,在不影響性能情況下最大限度的保證系統(tǒng)的可靠性和可修復(fù)性。
RAID 1 模式結(jié)構(gòu)圖:
常用的RAID模式 - RAID 5:
RAID 5又稱之為分布式奇偶校驗(yàn)磁盤陣列通過分布式奇偶校驗(yàn)塊把數(shù)據(jù)分散到多個(gè)磁盤.上這樣如果任何一個(gè)盤數(shù)據(jù)失效,都可以從奇偶校驗(yàn)塊中重建。但是如果兩塊磁盤失效,則整個(gè)卷的數(shù)據(jù)都無法恢復(fù)。
RAID 5 模式結(jié)構(gòu)圖:
常用的RAID模式 - RAID 10,適合數(shù)據(jù)庫的模式:
RAID 10又稱分片的鏡像它是對磁盤先做RAID 1之后對兩組RAID 1的磁盤再做RAID 0 ,所以對讀寫都有良好的性能,相對于RAID 5重建起來更簡單,速度也更快。
RAID 10 模式結(jié)構(gòu)圖:
RAID級別的選擇,可以參考下表:
相比機(jī)械磁盤固態(tài)磁盤有更好的隨機(jī)讀寫性能,相比機(jī)械磁盤固態(tài)磁盤有更好的并發(fā)支持,相比機(jī)械磁盤固態(tài)磁盤更容易損壞
固態(tài)磁盤的特點(diǎn):
PCIe卡的特點(diǎn):
固態(tài)磁盤的使用場景:
SAN(Storage Area Network)和NAS(Network-Attached Storage)是兩種外部文件存儲設(shè)備加載到服務(wù)器上的方法
SAN設(shè)備通過光纖鏈接到服務(wù)器,設(shè)備通過塊接口訪問,服務(wù)器可以將其當(dāng)做硬盤使用:
SAN的優(yōu)缺點(diǎn):
NAS設(shè)備使用網(wǎng)絡(luò)鏈接,通過基于文件的協(xié)議如NFS或SMB來訪問。
網(wǎng)絡(luò)存儲適合的場景:
網(wǎng)絡(luò)對性能的影響:
CPU:
內(nèi)存:
I/O子系統(tǒng):
MySQL在不同操作系統(tǒng)需要注意的事項(xiàng):
內(nèi)核相關(guān)參數(shù)(/etc/sysctl.conf
):
net.core.somaxconn=65535
net.core.netdev_max_backlog=65535
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.core.wmem_default=87380
net.core.wmem_max=16777216
net.core.rmem_default=87380
net.core.rmem_max=16777216
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=3
kernel.shmmax=429496295
vm.swappiness=0
參考:
Linux系統(tǒng)內(nèi)存交換分區(qū):
在MySQL服務(wù)器上是否要使用交換分區(qū)有一些爭議:
vm.swappiness=0
參數(shù)了增加資源限制(/etc/security/limit.conf
),這個(gè)文件實(shí)際上是Linux PAM也就是插入式認(rèn)證模塊的配置文件。通過我們會在文件末尾加入以下參數(shù)來控制打開文件數(shù)的限制:
* soft nofile 65535
* hard nofile 65535
說明:
*
表示對所有用戶有效soft
指的是當(dāng)前系統(tǒng)生效的設(shè)置,對于同一資源,soft的值不能比hard高hard
表明系統(tǒng)中所能設(shè)定的最大值nofile
表示所限制的資源是打開文件的最大數(shù)目65535
就是限制的次數(shù)由于系統(tǒng)默認(rèn)的可打開文件句柄的數(shù)量是比較小的,所以一般我們都會將MySQL服務(wù)所在的操作系統(tǒng)的可打開的文件數(shù)量增加到65535個(gè)以保證可以打開足夠多的文件句柄。需要注意的是,這個(gè)文件的修改需要重啟系統(tǒng)才生效。
磁盤調(diào)度策略(/sys/block/vda/queue/scheduler
):
除了默認(rèn)的cfq策略外還可以選擇以下幾種策略:
noop(電梯式調(diào)度策略):
NOOP實(shí)現(xiàn)了一個(gè)FIFO隊(duì)列,它像電梯的工作方式一樣對I/O請求進(jìn)行組織,當(dāng)有一個(gè)新的請求到來時(shí),它將請求合并到最近的請求之后,以此來保證請求同一個(gè)介質(zhì)。NOOP傾向于餓死讀而利于寫,因此NOOP對于閃存設(shè)備,RAM以及嵌入式是最好的選擇。
deadline(介質(zhì)時(shí)間調(diào)度策略):
Deadline確保了在一個(gè)截至?xí)r間內(nèi)服務(wù)請求,這個(gè)截至?xí)r間是可調(diào)整的,而默認(rèn)讀期限短于寫期限。這樣就防止了寫操作因?yàn)椴荒鼙蛔x取而餓死的現(xiàn)象。Deadline對數(shù)據(jù)庫類應(yīng)用是最好的選擇。
本質(zhì)上與Deadline一樣,但在最后一次讀操作后,要等待6ms,才能繼續(xù)進(jìn)行對其他I/O請求進(jìn)行調(diào)度。它會在每個(gè)6ms中插入新的I/O操作,而會將一些小寫入流合并成一個(gè)大寫入流,用寫入延時(shí)換取最大的寫入吞吐量。AS適合于寫入較多的環(huán)境,比如文件服務(wù)器,AS對數(shù)據(jù)庫環(huán)境表現(xiàn)很差。
修改磁盤調(diào)度策略的命令,例如我將策略改為deadline:
echo deadline > /sys/block/vda/queue/scheduler
服務(wù)器所使用的文件系統(tǒng)對服務(wù)器的I/O性能是有一定影響的,而文件系統(tǒng)的選擇十分依賴于操作系統(tǒng),例如Windows下就只有FAT和NTFS可供選擇:
Linux下則有EXT3、EXT4、XFS,這三種文件系統(tǒng)都是具有日志功能的,這一點(diǎn)對于數(shù)據(jù)的安全性十分重要。其中XFS性能要比EXT3和EXT4高:
如果使用EXT3和EXT4的話,有幾個(gè)掛載參數(shù)可以了解一下。EXT3/4文件系統(tǒng)的掛載參數(shù)可以在/etc/fstab
文件中配置:
data=writeback | ordered | journal
,其中 writeback 是Innodb最好的選擇
writeback
意味著只有原數(shù)據(jù)寫入日志,原數(shù)據(jù)寫入和數(shù)據(jù)寫入并不是同步的,這是最快的一種配置,因?yàn)镮nnodb有自己的事務(wù)日志,所以選擇Innodb是最好的選擇ordered
選項(xiàng)只會記錄原數(shù)據(jù),但提供了一些一致性的保證,在寫原數(shù)據(jù)之前的會先寫數(shù)據(jù),使他們保持一致,這個(gè)選項(xiàng)比writeback
慢一些,但是如果出現(xiàn)崩潰呢更加安全journal
提供了原子日志的一種行為,在數(shù)據(jù)寫入到最終位置之前,將記錄到日志中,這個(gè)選項(xiàng)對Innodb來說是沒有必要的,在這三個(gè)選項(xiàng)中journal
是最慢的一個(gè)然后我們再來看看另外兩個(gè)重要的參數(shù),在介紹這兩個(gè)參數(shù)之前,我們需要了解默認(rèn)情況下Linux操作系統(tǒng)會把文件訪問的時(shí)間atime做一個(gè)記錄,文件系統(tǒng)在文件被訪問、創(chuàng)建、修改等的時(shí)候記錄下了文件的一些時(shí)間戳。比如:文件創(chuàng)建時(shí)間、最近一次修改時(shí)間和最近一次訪問時(shí)間;這在絕大部分的場合都是沒有必要的。因?yàn)橄到y(tǒng)運(yùn)行的時(shí)候要訪問大量文件,如果能減少一些動作(比如減少時(shí)間戳的記錄次數(shù)等)將會顯著提高磁盤 IO 的效率、提升文件系統(tǒng)的性能。如果遇到機(jī)器IO負(fù)載高或是CPU WAIT高的情況時(shí),可以嘗試使用noatime和nodiratime禁止記錄最近一次訪問時(shí)間戳。
所以 noatime 和 nodiratime,是用于禁止記錄文件的訪問時(shí)間和讀取目錄的時(shí)間的,禁用了這兩個(gè)時(shí)間的選項(xiàng)后,可以減少一些,寫的操作。系統(tǒng)在讀取文件和目錄時(shí)候,不必寫操作來記錄以上兩個(gè)時(shí)間。