国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

SQL Server 服務(wù)器磁盤(pán)測(cè)試之SQLIO篇(二)

2024-08-31 00:55:49
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
SQL Server 服務(wù)器磁盤(pán)測(cè)試之SQLIO篇(二) 上次放出了一篇文章,針對(duì)磁盤(pán)卷簇大小默認(rèn)4KB和自定義64KB進(jìn)行了測(cè)試,測(cè)試內(nèi)容為隨機(jī)和順序讀寫(xiě),大小為8KB和64KB,有人覺(jué)得這并沒(méi)有照顧到SQL Server所有的IO使用情景。這篇測(cè)試文章,我們就來(lái)盡可能模擬一下SQL Server IO的行為,全方位對(duì)簇大小4KB、8KB和64KB做一次驗(yàn)證,注意:本次我們?cè)黾恿舜貫?KB的大小。

重點(diǎn)說(shuō)明:本測(cè)試使用的是兩塊SSD組成的RAID1

首先,我們先來(lái)分析SQL Server的IO行為,參考網(wǎng)址:Choosing what SQLIO tests to Run and Automating the Tests

下面的幾點(diǎn)是我根據(jù)文章整理,并非完全翻譯:

1、SQL Server每個(gè)邏輯CPU上都會(huì)分配一個(gè)調(diào)度器,每個(gè)調(diào)度器上根據(jù)系統(tǒng)負(fù)載不同,會(huì)有多個(gè)Worker Thread,但是在同一個(gè)時(shí)刻,每個(gè)調(diào)度器上只能有一個(gè)Worker Thread處于運(yùn)行狀態(tài),即:每個(gè)邏輯CPU在同一時(shí)刻只能支配一個(gè)Worker Thread干活。也就是說(shuō):SQLIO Param.txt 文件中定義的testfile.dat 8 0×0 5000 不能超過(guò)測(cè)試服務(wù)器邏輯CPU的數(shù)目,我測(cè)試的服務(wù)器為:2物理CPU*6核心*雙線程=24邏輯CPU,即最大設(shè)置為:testfile.dat 24 0×0 5000

2、SQL Server間歇性的寫(xiě)入數(shù)據(jù),寫(xiě)數(shù)據(jù)的行為由CheckPoint或者Lazy Writer(當(dāng)內(nèi)存有壓力的時(shí)候)完成。當(dāng)二者觸發(fā)執(zhí)行時(shí),由單一的線程將內(nèi)存中的臟頁(yè)寫(xiě)入磁盤(pán),因此當(dāng)測(cè)試“寫(xiě)”的時(shí)候,在Param.txt 中配置超過(guò)1個(gè)線程都是毫無(wú)意義的,因?yàn)檫@種行為在即使多個(gè)數(shù)據(jù)庫(kù)時(shí)也是串行的,(當(dāng)然你可以配置線程數(shù)為2來(lái)壓榨出IO寫(xiě)能力的極限)。并且,SQL Server在寫(xiě)入數(shù)據(jù)的時(shí)候,大部分情況下一次性寫(xiě)入32個(gè)page即256K的數(shù)據(jù),因此你應(yīng)該配置寫(xiě)入的Size為256K。但是也有例外,那就是Eager Writer,該行為在將數(shù)據(jù)庫(kù)恢復(fù)模式設(shè)置為“大容量日志模式”時(shí),最小化記錄日志時(shí)將觸發(fā),該行為的寫(xiě)入Size為8KB(或者可能是64KB)。

3、SQL Server連續(xù)不斷的進(jìn)行數(shù)據(jù)讀取操作,絕大多數(shù)的讀操作是8KB為單位的,預(yù)讀的塊大小是64個(gè)page即512KB,直接讀取整個(gè)區(qū)Extent即64KB也是較為常見(jiàn)的,因此對(duì)于讀操作,測(cè)試8KB、64KB、512KB就可以了。

4、對(duì)于日志寫(xiě),定一個(gè)測(cè)試Size是非常困難的,因?yàn)閷?xiě)入日志的大小取決于系統(tǒng)的負(fù)荷大小,但是一般不會(huì)超過(guò)60KB,但是對(duì)于測(cè)試,“我”建議使用8KB作為測(cè)試單位,這個(gè)大小覆蓋了Eager Writer和Log Writer。在微軟亞太博客的這篇文章中:SQL server每個(gè)日志寫(xiě)(log write)究竟有多大?,我們也可以了解到,SQL Server的日志寫(xiě)確實(shí)很不固定,一個(gè)簡(jiǎn)單的commit是512byte,而負(fù)荷較高時(shí),接近60KB,在這里,我決定擅自再使用一個(gè)接近512byte的1KB作為測(cè)試大小,并且實(shí)際上,我用PRocessMonitor在生產(chǎn)環(huán)境抓取了一段時(shí)間Log Writer后,絕大多數(shù)的日志寫(xiě)確實(shí)在1K及以下。

QQ圖片20140423115548

5、作者的第5條認(rèn)為SAN存儲(chǔ),由于有巨大的緩存,并且優(yōu)化了讀寫(xiě)機(jī)制,所以讀寫(xiě)的差距不是很大,所以建議只使用Random作為測(cè)試方式,這一點(diǎn),我決定不茍同于作者,仍然按照Data和Log的讀寫(xiě)特性來(lái)進(jìn)行測(cè)試,隨機(jī)和順序都會(huì)照顧到。

綜上所述,根據(jù)個(gè)人知識(shí)點(diǎn),測(cè)試要點(diǎn)總結(jié)如下:

QQ截圖20140422162044

1、我們首先建立兩個(gè)Para.txt文件,一個(gè)Thread為邏輯CPU數(shù)目24,另外一個(gè)Thread我們?cè)O(shè)置為1,對(duì)應(yīng)于上圖中“使用線程數(shù)”中的內(nèi)容,另外,我還將測(cè)試文件testfile.dat的大小調(diào)整為了5000M。

本次我為了避免誤差,僅使用同一組RAID1來(lái)完成這三組簇分別為4KB/8KB/64KB大小的測(cè)試。

ParamMT.txt

D:/testfile.dat 24 0x0 5000

ParamST.txt

D:/testfile.dat 1 0x0 5000

2、以下為測(cè)試腳本,我們將-o參數(shù)從1開(kāi)始增加,然后以翻倍的形式,測(cè)試出IO的最大能力。

在進(jìn)行下一組測(cè)試前,我們只需要將后面的寫(xiě)入文件Cluster_4KB_test中的4KB全部替換為8KB或者64KB即可。
echo ****** Read Tests *****echo ******random_R_8KB**********sqlio -kR -s300 -frandom -o1 -b8 -LS -BH -FparamMT.txt > Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o2 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o4 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o8 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o16 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5echo ******random_R_64KB**********sqlio -kR -s300 -frandom -o1 -b64 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o2 -b64 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o4 -b64 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o8 -b64 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o16 -b64 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5echo ******random_R_512KB**********sqlio -kR -s300 -frandom -o1 -b512 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o2 -b512 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o4 -b512 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o8 -b512 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kR -s300 -frandom -o16 -b512 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5echo ******random_W_8KB**********sqlio -kW -s300 -frandom -o1 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -frandom -o2 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -frandom -o4 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -frandom -o8 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -frandom -o16 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5echo ******random_W_256KB**********sqlio -kW -s300 -frandom -o1 -b256 -LS -BH -FparamST.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -frandom -o2 -b256 -LS -BH -FparamST.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -frandom -o4 -b256 -LS -BH -FparamST.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -frandom -o8 -b256 -LS -BH -FparamST.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -frandom -o16 -b256 -LS -BH -FparamST.txt >> Cluster_4KB_test.txttimeout /T 5echo ******sequential_W_1KB**********sqlio -kW -s300 -fsequential -o1 -b1 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -fsequential -o2 -b1 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -fsequential -o4 -b1 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -fsequential -o8 -b1 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -fsequential -o16 -b1 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5echo ******sequential_W_8KB**********sqlio -kW -s300 -fsequential -o1 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -fsequential -o2 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -fsequential -o4 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -fsequential -o8 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5sqlio -kW -s300 -fsequential -o16 -b8 -LS -BH -FparamMT.txt >> Cluster_4KB_test.txttimeout /T 5
3、在進(jìn)行了漫長(zhǎng)的等待后,我們終于拿齊了三個(gè)文件,用SqlioAnalyzer導(dǎo)出為文件,值得注意的是,導(dǎo)入txt文件時(shí),報(bào)錯(cuò),只需要將”1 thread”全部替換為”1 threads”,再次導(dǎo)入即可。4、整理,取出每組測(cè)試最大值,所得結(jié)果如下。看到結(jié)果,我驚呆了,在盡可能模擬SQLServer IO行為的前提下,我們這組SSD組成的Raid1不再是簇為64KB時(shí)性能全面領(lǐng)先!
  • 先說(shuō)第二個(gè)直方圖,我們可以看到,在順序?qū)憰r(shí),三種簇大小下幾乎是沒(méi)有差別的;
  • 第一個(gè)直方圖,在隨機(jī)讀取64KB和512KB時(shí),簇為4KB相比其它兩種情況是有優(yōu)勢(shì)的;其它讀寫(xiě)情況下,還是簇為8KB和64KB時(shí)占據(jù)優(yōu)勢(shì)。
  • 我們上面已經(jīng)說(shuō)過(guò),SQL Server的隨機(jī)讀,絕大多數(shù)還是以8KB為單位的,從這點(diǎn)來(lái)看,依然還是簇為8KB和64KB比簇為4KB在全局來(lái)講,要占據(jù)優(yōu)勢(shì),而簇為64KB比8KB的優(yōu)勢(shì),是微乎其微的。
2014-04-29_122339然后根據(jù)需要比較的項(xiàng)做成直方圖,隨機(jī)看IOS/sec,順序看MB/sec。QQ截圖20140429121832QQ截圖20140429121903測(cè)試總結(jié):

在盡可能模擬SQL Server IO行為的前提下,我們測(cè)試的兩塊SSD硬盤(pán)組成的RAID1表現(xiàn)出了與第一篇測(cè)試文章時(shí)不同的性能行為。

SSD的特性是不再以物理尋道的形式獲取數(shù)據(jù),而是電子存儲(chǔ)芯片顆粒直接讀寫(xiě),再也沒(méi)有磁頭移動(dòng)消耗的時(shí)間,并且,SSD硬盤(pán)的并發(fā)讀寫(xiě)能力是建立在多線程之上的,在同一時(shí)刻的工作絕不會(huì)局限于一個(gè)顆粒之上,本例我們測(cè)試的最大線程為24(測(cè)試服務(wù)器邏輯CPU數(shù)目),也許這是制約這組SSD硬盤(pán)沒(méi)有發(fā)揮出最大功效的原因吧。即使這樣,我們?nèi)匀豢梢圆煊X(jué)出簇為64KB比4KB時(shí)是有優(yōu)勢(shì)的。

如果您有不同意見(jiàn),請(qǐng)?zhí)岢觯覀兝^續(xù)討論。

手頭上沒(méi)有SAS硬盤(pán)的RAID,如果您有興趣,可以試一下,差別應(yīng)該會(huì)更大一些。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 镇江市| 德清县| 海晏县| 铁岭市| 吐鲁番市| 磐石市| 长春市| 南陵县| 上思县| 海城市| 前郭尔| 札达县| 获嘉县| 娱乐| 海门市| 兰西县| 贵州省| 酉阳| 玉田县| 新河县| 巩留县| 乐清市| 荣成市| 万荣县| 建昌县| 元阳县| 永川市| 乌海市| 台中市| 卓尼县| 泽普县| 富源县| 松滋市| 大城县| 凤山县| 桃园县| 高陵县| 陇川县| 巩义市| 襄城县| 义马市|