高性能網(wǎng)站建設(shè)之MSSqlServer數(shù)據(jù)庫分區(qū)

2023-10-27    分類: 網(wǎng)站建設(shè)

什么是數(shù)據(jù)庫分區(qū)?
數(shù)據(jù)庫分區(qū)是一種對(duì)表的橫向分割,Sql server 2005企業(yè)版和之后的Sql server版本才提供這種技術(shù),這種對(duì)表的橫向分割不同于2000中的表分割,它對(duì)訪問用戶是透明的,用戶并不會(huì)感覺的表被橫向分割了。(2000中的表橫向分割是建n個(gè)表例如按時(shí)間建表每月一個(gè)表,表名不同,最后需要做一個(gè)大視圖)

關(guān)于具體的如何做分區(qū),請(qǐng)參考數(shù)據(jù)庫分區(qū)演練http://www.cnblogs.com/yukaizhao/archive/2008/05/07/sql_partition_test.html

為什么要分區(qū)?
顯而易見分區(qū)是為了提高數(shù)據(jù)庫的讀寫性能,提高數(shù)據(jù)庫的效率;

分區(qū)是否總是可以提高效率?
分區(qū)是一把雙刃劍,并不總能提高效率,這和具體情況有關(guān)系。
之所以有分區(qū)技術(shù),分區(qū)技術(shù)用的好的話可以提高性能,是因?yàn)橐环矫娣謪^(qū)把一大塊數(shù)據(jù)分成了n小塊,這樣查詢的時(shí)候很快定位到某一小塊上,在小塊中尋址要快很多;另一方面CPU比磁盤IO快很多倍,而硬件上又有多個(gè)磁盤,或者是RAID(廉價(jià)磁盤冗余陣列),可以讓數(shù)據(jù)庫驅(qū)動(dòng)CPU同時(shí)去讀寫不同的磁盤,這樣才有可能可以提高效率。
分區(qū)在有些時(shí)候并不能提高讀寫效率,比如說我們經(jīng)常看到的按照日期字段去分區(qū)MSDN例子,這個(gè)實(shí)例中是按照記錄的生成時(shí)間來分區(qū)的,把一年的數(shù)據(jù)分割成12個(gè)分區(qū),每月一個(gè)。這樣的分區(qū)導(dǎo)致分區(qū)并不能實(shí)現(xiàn)CPU同步寫并提高寫入性能,因?yàn)樵谕粋€(gè)時(shí)段CPU總是要寫入到最新的那一個(gè)分區(qū)對(duì)應(yīng)的磁盤中。另一個(gè)問題是:這樣分區(qū)是否可以提高讀取性能呢?答案是不一定,要看根據(jù)什么字段來查詢,如果是根據(jù)時(shí)間來查詢,根據(jù)時(shí)間生成報(bào)表那么這種分區(qū)肯定會(huì)提高查詢的效率,但是如果是按照某個(gè)客戶查詢客戶最近1年內(nèi)的賬單數(shù)據(jù),這樣數(shù)據(jù)分布到不同的分區(qū)上,這樣的話效率就不一定能提高了,這要看數(shù)據(jù)在同一個(gè)分區(qū)上連續(xù)分布的讀性能高,還是CPU從幾個(gè)磁盤上同步讀取,然后在合并數(shù)據(jù)的性能更高一些,這和讀取數(shù)據(jù)的記錄數(shù)也有關(guān)系。

如何分區(qū)?用什么字段做分區(qū)依據(jù)?
具體如何分區(qū)和涉及的業(yè)務(wù)有關(guān)系,要看業(yè)務(wù)上最經(jīng)常的寫入和讀取操作是什么,然后再考慮分區(qū)的策略。

既然與具體業(yè)務(wù)相關(guān),我們就假定一個(gè)業(yè)務(wù)環(huán)境,假如我們要做一個(gè)論壇,對(duì)論壇的帖子和回復(fù)表進(jìn)行分區(qū)。
論壇中最常見的寫操作是1)發(fā)帖 2)回復(fù)帖子,
最常見的讀操作是
1) 根據(jù)帖子id顯示帖子詳情和分頁的帖子回復(fù)
2) 根據(jù)帖子版面帖子列表頁根據(jù)版面id分頁讀取帖子列表數(shù)據(jù)
怎么分區(qū)更合適呢?現(xiàn)在還沒有準(zhǔn)確答案,我有兩種可能的方案,寫下來,大家討論看看。
方案1. 根據(jù)帖子ID區(qū)域段分區(qū)(1-300w一個(gè)分區(qū)、300w-600w一個(gè)分區(qū)…),這樣理論上可以提高帖子詳細(xì)頁的讀取速度,而對(duì)于寫操作性能沒有益處,對(duì)于根據(jù)版面id讀取帖子列表頁有可能有益
方案2. 根據(jù)版面id進(jìn)行分區(qū),這樣對(duì)于寫性能應(yīng)該有提高,不同的分區(qū)對(duì)應(yīng)不同的版面,當(dāng)有兩個(gè)版面同時(shí)有發(fā)帖回帖操作時(shí),有可能可以并發(fā)寫。對(duì)于根據(jù)版面id獲得帖子列表頁數(shù)據(jù)也可以提高性能,而對(duì)于帖子詳細(xì)信息頁沒有性能影響。

多大的數(shù)據(jù)量才需要分區(qū)?
這個(gè)問題只能說一個(gè)內(nèi)部標(biāo)準(zhǔn),如果一張表的記錄超過在超過1000w,并以每月百萬的數(shù)據(jù)量增長,那就需要分區(qū)。

關(guān)于具體的如何做分區(qū),請(qǐng)參考數(shù)據(jù)庫分區(qū)演練http://www.cnblogs.com/yukaizhao/archive/2008/05/07/sql_partition_test.html

本文題目:高性能網(wǎng)站建設(shè)之MSSqlServer數(shù)據(jù)庫分區(qū)
地址分享:http://bm7419.com/news26/288026.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、微信小程序、網(wǎng)站策劃、網(wǎng)站導(dǎo)航、GoogleApp設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)