SQL問(wèn)題與解答:備份和設(shè)置
XXXL 事務(wù)日志
問(wèn):我們的產(chǎn)品使用 SQL Server 來(lái)存儲(chǔ)數(shù)據(jù)。我們會(huì)不時(shí)發(fā)布新的產(chǎn)品版本,其中包含針對(duì)數(shù)據(jù)庫(kù)運(yùn)行的升級(jí)腳本。由于我們?cè)诘湫偷臏y(cè)試數(shù)據(jù)庫(kù)中測(cè)試我們***的升級(jí)腳本,事務(wù)日志文件的大小增長(zhǎng)到了 40GB 以上。我們希望阻止日志文件增長(zhǎng)到如此之大。我們可以選擇哪種方案?出于災(zāi)難恢復(fù)的目的,我們需要繼續(xù)使用完整恢復(fù)模式。
答:首先,我很高興得知您正在使用典型的客戶數(shù)據(jù)進(jìn)行測(cè)試。我多次發(fā)現(xiàn)分層應(yīng)用程序供應(yīng)商會(huì)使用小型數(shù)據(jù)集來(lái)測(cè)試這種腳本,然后即投入發(fā)行并提供給客戶使用,而客戶在生產(chǎn)過(guò)程中則會(huì)遇到各種各樣的問(wèn)題。如果您是用戶,我會(huì)解答您的問(wèn)題。然后您可以根據(jù)客戶的具體情況來(lái)應(yīng)用我的答案。
您說(shuō)您需要繼續(xù)使用完整恢復(fù)模式。這意味著您已進(jìn)行事務(wù)日志備份,且您沒(méi)有遇到事務(wù)日志增長(zhǎng)失控等常見(jiàn)問(wèn)題。這很好,因?yàn)檫M(jìn)行事務(wù)日志備份是在提交事務(wù)之后唯一能夠清除事務(wù)日志的操作。(有關(guān)這個(gè)問(wèn)題的背景,請(qǐng)參見(jiàn) technet.microsoft.com/magazine/2009.02.logging,以了解事務(wù)日志的工作原理以及不同的恢復(fù)模式如何影響其行為。)
因此,執(zhí)行事務(wù)日志備份的頻率在一方面決定了清除事務(wù)日志以阻止其增長(zhǎng)的速率。例如,如果您的定期備份作業(yè)每 30 分鐘執(zhí)行一次事務(wù)日志備份,事務(wù)日志文件必須足以保存在 30 分鐘內(nèi)生成的***的事務(wù)日志數(shù)據(jù)量。否則,數(shù)據(jù)量將增長(zhǎng)。
如果您的升級(jí)腳本運(yùn)行 60 分鐘且每 30 分鐘生成 20 GB 的事務(wù)日志,則事務(wù)日志文件大小應(yīng)為 20GB??赡苓@樣文件仍然太大,因此您需要在運(yùn)行升級(jí)腳本時(shí)提高事務(wù)日志備份的頻率。這樣可以更頻繁地清除事務(wù)日志,從而阻止其過(guò)度增長(zhǎng)。我們?cè)诳蛻艮k事處曾遇到過(guò)相似的問(wèn)題,結(jié)果他們需要在大型數(shù)據(jù)庫(kù)中運(yùn)行相似的腳本的數(shù)小時(shí)內(nèi)每分鐘執(zhí)行一次事務(wù)日志備份。
我們需要記住一件事,即這些“額外的”事務(wù)日志備份構(gòu)成了日志備份鏈的一部分,并且是災(zāi)難恢復(fù)所必須的。確保它們的名字都有意義且未被刪除。
另外,還應(yīng)考慮以下事項(xiàng):作為您所設(shè)計(jì)的升級(jí)過(guò)程的一部分,發(fā)生的***的單項(xiàng)事務(wù)是什么??jī)H當(dāng)日志記錄來(lái)自已提交的事務(wù)時(shí),可清除事務(wù)日志(這樣說(shuō)可能過(guò)于簡(jiǎn)單,有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn)前面所提到的文章)。這意味著長(zhǎng)期運(yùn)行的事務(wù)不允許清除日志,即便事務(wù)日志備份不備份所生成的事務(wù)日志。
如果您的升級(jí)腳本包含一個(gè)需要 15GB 日志空間的事務(wù),則事務(wù)日志文件將需要至少 15GB 來(lái)在提交事務(wù)前保存整個(gè)事務(wù)。在這種情況下,無(wú)論您執(zhí)行事務(wù)日志備份的頻率如何,該事務(wù)日志都不會(huì)被清除。這種情況下唯一的解決辦法是,如果可能,將大型事務(wù)拆分成較小的事務(wù)。
請(qǐng)記住,運(yùn)行升級(jí)腳本所需的事務(wù)日志大小取決于事務(wù)日志備份的頻率以及您所創(chuàng)建的***的單個(gè)事務(wù)的大小。
配置難題
問(wèn):我們正在為我們的一個(gè)數(shù)據(jù)庫(kù)服務(wù)器配置一些新的直接連接存儲(chǔ),我們希望確保我們理解了所有的選擇方案并正確配置。您能不能解釋一下對(duì)于 SQL Server,我們應(yīng)了解哪些不同的配置設(shè)置?
答:配置存儲(chǔ)時(shí)需要有策略的設(shè)置和配置選項(xiàng),因此,我傾向于由專門的存儲(chǔ)管理員來(lái)負(fù)責(zé)。SQL Server 管理員肯定需要關(guān)注一些選項(xiàng),以確保正確設(shè)置。
首先是底層 RAID 級(jí)別。涉及到性能與冗余性問(wèn)題時(shí),各種 RAID 級(jí)別的權(quán)衡互不相同。例如,仍能提供一定冗余性的***的 RAID 配置為 RAID-5,但此配置只能用于處理單驅(qū)動(dòng)器故障(除非采用 RAID-6 或配置了熱備用驅(qū)動(dòng)器),并且根據(jù)陣列中驅(qū)動(dòng)器的數(shù)量,它有時(shí)會(huì)削弱大量寫入工作負(fù)荷的性能。
RAID-10 提供了***的冗余性,但更為昂貴。陣列的總?cè)萘?**為構(gòu)成驅(qū)動(dòng)器總?cè)萘康囊话?。有關(guān)各種 RAID 級(jí)別的深入探討,請(qǐng)參見(jiàn) TechNet 白皮書物理數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)附錄 A。
需要考慮的其他主要因素為 RAID 條帶大小、NTFS 分配單元大?。ù卮笮。┮约按疟P分區(qū)對(duì)齊方式。如果設(shè)置有誤,所有上述因素都會(huì)導(dǎo)致性能明顯下降。其中最重要的一個(gè)因素為使用 Windows Server 2003 創(chuàng)建的磁盤卷的磁盤分區(qū)對(duì)齊方式。默認(rèn)的對(duì)齊方式為 31.5KB,但這與 64KB 的常用 RAID 條帶大?。ɑ蛘咂渲械亩鄠€(gè)條帶大小)不匹配。因此,每個(gè) I/O 事實(shí)上需要讀或?qū)憙蓚€(gè) RAID 條帶來(lái)滿足 IO。很明顯,這會(huì)導(dǎo)致性能急劇降低。
默認(rèn)情況下,Windows Server 2008 采用 1MB 的對(duì)齊方式。在 Windows Server 2003 上創(chuàng)建并升級(jí)到由 Windows Server 2008 托管的任何卷的對(duì)齊方式都不會(huì)變化,因此它們?nèi)杂锌赡軙?huì)受到影響。要想解決這一問(wèn)題就必須重新格式化卷,由于這樣能夠提高性能,所以還是值得的。
對(duì)于這些問(wèn)題的詳細(xì)探討很明顯已超出了此專欄的主題范圍,但是您可以閱讀我的博客帖子您的磁盤分區(qū)偏移量、RAID 條帶大小和 NTFS 分配單元設(shè)置是否正確?,以了解詳細(xì)信息(包括更多相關(guān)帖子的鏈接)。
配置任何新的存儲(chǔ)時(shí),***在開(kāi)始應(yīng)用生產(chǎn)負(fù)載之前進(jìn)行壓力測(cè)試和性能測(cè)試。壓力測(cè)試使您能夠排除可導(dǎo)致停機(jī)或數(shù)據(jù)丟失的任何配置問(wèn)題。性能測(cè)試可幫助您驗(yàn)證新的存儲(chǔ)能否提供您的工作負(fù)載所需的 I/O 能力。Microsoft 提供可幫助實(shí)現(xiàn)這些操作的免費(fèi)工具,請(qǐng)參見(jiàn)白皮書預(yù)部署 I/O ***實(shí)踐以了解詳細(xì)信息。
鏡像,鏡像
問(wèn):我對(duì)于設(shè)置數(shù)據(jù)庫(kù)鏡像時(shí)見(jiàn)證服務(wù)器的性質(zhì)有些不解。見(jiàn)證服務(wù)器需要有多強(qiáng)大?它是否依賴于它執(zhí)行故障轉(zhuǎn)移的數(shù)據(jù)庫(kù)的數(shù)量?將見(jiàn)證服務(wù)器放置在哪個(gè)數(shù)據(jù)中心有沒(méi)有影響?我希望確保鏡像數(shù)據(jù)庫(kù)能夠獲得***的可用性。
答:見(jiàn)證服務(wù)器的角色是任何數(shù)據(jù)庫(kù)鏡像系統(tǒng)中最容易被誤解的一個(gè)方面。同步數(shù)據(jù)庫(kù)鏡像配置中見(jiàn)證服務(wù)器存在的唯一目的是,當(dāng)主體服務(wù)器變得不可用時(shí)幫助促進(jìn)自動(dòng)故障轉(zhuǎn)移。
主體服務(wù)器會(huì)持續(xù)向鏡像服務(wù)器而不是見(jiàn)證服務(wù)器發(fā)送事務(wù)日志記錄。作為自動(dòng)故障檢測(cè)機(jī)制的一部分,主體服務(wù)器、鏡像服務(wù)器和見(jiàn)證服務(wù)器每秒都會(huì)相互 ping。如果出于任何原因鏡像服務(wù)器判定它無(wú)法與主體服務(wù)器通信,除非見(jiàn)證服務(wù)器同意它也無(wú)法與主體服務(wù)器通信,否則鏡像服務(wù)器無(wú)法啟動(dòng)自動(dòng)故障轉(zhuǎn)移。如果兩臺(tái)服務(wù)器達(dá)成一致,便形成仲裁,并由鏡像服務(wù)器啟動(dòng)自動(dòng)故障轉(zhuǎn)移。如果見(jiàn)證服務(wù)器不存在,則無(wú)法形成仲裁且無(wú)法啟動(dòng)自動(dòng)故障轉(zhuǎn)移。
因此,見(jiàn)證服務(wù)器存在的唯一目的就是幫助形成仲裁。它不會(huì)啟動(dòng)故障轉(zhuǎn)移或在托管鏡像數(shù)據(jù)庫(kù)中扮演任何角色。通常,這種仲裁存在于主體服務(wù)器與鏡像服務(wù)器之間。
由于見(jiàn)證服務(wù)器不會(huì)做任何上述處理,它不需要非常強(qiáng)大。它可以托管任意版本的 SQL Server,包括免費(fèi)的 SQL Server Express Edition。對(duì)于可作為見(jiàn)證服務(wù)器的 SQL Server 的特定實(shí)例,數(shù)據(jù)庫(kù)鏡像會(huì)話數(shù)也沒(méi)有限制。
見(jiàn)證服務(wù)器***放置在與主體服務(wù)器或鏡像服務(wù)器不同的數(shù)據(jù)中心。但是,大多數(shù)公司并不具備三個(gè)數(shù)據(jù)中心,因此問(wèn)題是應(yīng)將見(jiàn)證服務(wù)器與鏡像服務(wù)器還是與主體服務(wù)器放置在一起。
如果僅有兩個(gè)數(shù)據(jù)中心可用,應(yīng)始終將見(jiàn)證服務(wù)器與主體服務(wù)器放置在一起。這與形成仲裁有關(guān)系。如果將見(jiàn)證服務(wù)器與鏡像服務(wù)器放置在一起,當(dāng)主體服務(wù)器失去網(wǎng)絡(luò)鏈接時(shí),見(jiàn)證服務(wù)器和鏡像服務(wù)器會(huì)形成仲裁并由鏡像服務(wù)器啟動(dòng)故障轉(zhuǎn)移。
這種情況下主體服務(wù)器可能沒(méi)有任何問(wèn)題,當(dāng)未形成仲裁時(shí),它會(huì)使主體數(shù)據(jù)庫(kù)脫機(jī)。它假定在這種情況下鏡像會(huì)執(zhí)行故障轉(zhuǎn)移。為防止出現(xiàn)這種問(wèn)題,應(yīng)將主體服務(wù)器與見(jiàn)證服務(wù)器放置在一起,這樣可以在發(fā)生網(wǎng)絡(luò)故障時(shí)使主體服務(wù)器維持與見(jiàn)證服務(wù)器的仲裁。從而使主體數(shù)據(jù)庫(kù)保持可用。
見(jiàn)證服務(wù)器完全可選,但如果不存在見(jiàn)證服務(wù)器則不可能發(fā)生自動(dòng)故障轉(zhuǎn)移,因此無(wú)法保證鏡像的數(shù)據(jù)庫(kù)的***可用性。對(duì)于其他方式,數(shù)據(jù)庫(kù)鏡像操作均相同。如果配置了見(jiàn)證服務(wù)器但由于某些原因它不可用,除了執(zhí)行自動(dòng)故障轉(zhuǎn)移的功能以外,鏡像功能不受影響。
每個(gè)數(shù)據(jù)庫(kù)鏡像會(huì)話也可以配置兩個(gè)見(jiàn)證服務(wù)器。為見(jiàn)證服務(wù)器角色增加更高冗余性的唯一方法是,在故障轉(zhuǎn)移群集中托管見(jiàn)證 SQL Server 實(shí)例。有關(guān)數(shù)據(jù)庫(kù)鏡像配置的詳細(xì)信息,請(qǐng)參見(jiàn) TechNet 白皮書 SQL Server 2005 中的數(shù)據(jù)庫(kù)鏡像。
【編輯推薦】