隨著虛擬化逐漸成熟,將SQL Server實(shí)例遷移到虛擬化服務(wù)器上也越來(lái)越流行。耗電量的減少和License成本的降低,而且更易于管理。聽(tīng)起來(lái)很有優(yōu)勢(shì),但并不是所有場(chǎng)景都適合SQL Server虛擬化。
隨著虛擬化逐漸成熟,將SQLServer實(shí)例遷移到虛擬化服務(wù)器上也越來(lái)越流行。物理機(jī)的數(shù)目在減少,隨之而來(lái)的是耗電量的減少和License成本的降低,而且更易于管理。聽(tīng)起來(lái)很有優(yōu)勢(shì),但并不是所有場(chǎng)景都適合SQL Server虛擬化。
虛擬化使I/O性能降低
要想有好的性能,數(shù)據(jù)庫(kù)需要的最多的單個(gè)資源除了CPU外就是磁盤(pán)I/O了。當(dāng)物理服務(wù)器只專用于一個(gè)SQL Server實(shí)例時(shí)更容易改善I/O瓶頸問(wèn)題。如果IOPS (每秒的輸入輸出操作)投入產(chǎn)出比合適的話,你可以將傳統(tǒng)硬盤(pán)換為更快的固態(tài)硬盤(pán),或者增加更多的內(nèi)存以增大緩存。主要的考量是權(quán)衡成本,因?yàn)檫@種升級(jí)不會(huì)太便宜。
在SQL Server虛擬化期間,盡管硬件一定會(huì)比遷移前的服務(wù)器要好,至少是要一樣好。而對(duì)I/O指標(biāo)來(lái)說(shuō)就不一定,因?yàn)槟阕詈笠獙?shí)現(xiàn)的就是要共享I/O帶寬以充分使用數(shù)據(jù)庫(kù)。有些遷移的方法,例如:你可以將數(shù)據(jù)庫(kù)存儲(chǔ)放在物理軸和I/O通道上,這樣就可以做到與其他虛擬機(jī)隔離,但是這必須在遷移到虛擬機(jī)之前完成。
這是個(gè)常見(jiàn)的例子:許多專用的數(shù)據(jù)庫(kù)服務(wù)器在存儲(chǔ)陣列中使用RAID 1+0(即RAID10),這種方案成本高但效果很好。而另一方面,虛擬機(jī)可能使用RAID5 以平衡性能和冗余。之前對(duì)硬件優(yōu)化的工作負(fù)擔(dān)會(huì)在后面受損,除非你能直接將物理磁盤(pán)掛在虛擬機(jī)上而非原來(lái)的RAID1+0的設(shè)置上。
這并不是說(shuō)磁盤(pán)一定要放在本地存儲(chǔ)。在虛擬機(jī)上的SAN有可能比物理機(jī)上的本地磁盤(pán)還要好,至少是不相上下。那么IOPS呢?其實(shí)并不是一個(gè)一定要達(dá)到的精確技術(shù)指標(biāo)。
如果是自己構(gòu)建虛擬主機(jī),你就能對(duì)其控制。但是如果是使用別人的虛擬主機(jī),就只能使用大小統(tǒng)一設(shè)置的主機(jī)。
當(dāng)虛擬內(nèi)存不夠時(shí)
物理內(nèi)存對(duì)數(shù)據(jù)庫(kù)有很多好處:內(nèi)存是執(zhí)行操作和緩存I/O的地方。所以SQL Server在獨(dú)立的機(jī)器上工作得最好就是這個(gè)原因,因?yàn)樗茈S意根據(jù)需要供應(yīng)內(nèi)存,不用直接與同一臺(tái)機(jī)器上的其他應(yīng)用競(jìng)爭(zhēng)內(nèi)存。拇指規(guī)則就是使整個(gè)數(shù)據(jù)庫(kù)有足夠的內(nèi)存可用,或者至少是最常用的部分只要有可能就被緩存在內(nèi)存中。
相同的數(shù)據(jù)庫(kù)服務(wù)器的虛擬化版本需要有與物理服務(wù)器等量的內(nèi)存,或者比物理服務(wù)器內(nèi)存還要更多。許多虛擬系統(tǒng)都通過(guò)內(nèi)存共享技術(shù)允許多個(gè)虛擬機(jī)共享一致的內(nèi)存頁(yè)。但是這種共享是對(duì)每個(gè)虛擬機(jī)上運(yùn)行的操作系統(tǒng)而言的。這些內(nèi)存大多在虛擬機(jī)之間可共享,而并非是數(shù)據(jù)庫(kù)本身的組成部分。
這是另外一個(gè)領(lǐng)域,為SQL Server實(shí)例做內(nèi)存消耗統(tǒng)計(jì)是有幫助的。這樣你就能看到產(chǎn)品數(shù)據(jù)庫(kù)到底需要使用多少內(nèi)存,你最好能及時(shí)得到通知,了解在虛擬機(jī)中如何根據(jù)內(nèi)存需求調(diào)整資源的分配。
除非必要 否則不要使用虛擬化
另外,還會(huì)迫不得已使用虛擬化的情況,這意味著計(jì)劃中就沒(méi)有把虛擬化的優(yōu)點(diǎn)考慮在內(nèi),只是在沒(méi)上這個(gè)技術(shù)的時(shí)候,系統(tǒng)的表現(xiàn)更糟糕,而希望虛擬化能夠解決一些問(wèn)題。
例如,如果你有一個(gè)歷史遺留的SQL Server,獨(dú)占一臺(tái)Server.按如今的硬件標(biāo)準(zhǔn),如果對(duì)服務(wù)器的訪問(wèn)量不大,這種情況比較適合做虛擬化。機(jī)器越老或越慢,你越能從虛擬化中獲得更多優(yōu)勢(shì)。合并多臺(tái)服務(wù)器意味著消耗的電力更少,制冷和空間占用也都減少了。
另一方面,如果是一個(gè)完整的SQL Server集群,想通過(guò)虛擬化節(jié)約成本或獲得性能優(yōu)勢(shì)。將集群虛擬化可能在耗電量和制冷方面有所節(jié)省--但如果虛擬化是以整體性能為代價(jià)的,那最好還是不要做虛擬化。
SQL Server虛擬化只應(yīng)該在有好的業(yè)務(wù)需求的時(shí)候?qū)嵤以诖诉^(guò)程中也不應(yīng)失去整體IOPS或內(nèi)存。盡管這些優(yōu)點(diǎn)使虛擬化看上去很神奇,但重要的是要記住虛擬化只是個(gè)工具而不是所謂的萬(wàn)能藥。