[ 作者:松下客 來(lái)源:網(wǎng)絡(luò ) 更新時(shí)間:2005-10-30 ]
SQL Server服務(wù)器的配置選項屬于那種人們了解較少且經(jīng)常誤用的選項。當一個(gè)技術(shù)支持人員要求你按照某種方式調整一個(gè)選項、而另一個(gè)技術(shù)支持人員卻要求你按照另一種完全對立的方式調整同一個(gè)選項時(shí),你可能對這些選項的真正含義感到困惑。有關(guān)這些選項的資料很缺乏,至少可以說(shuō)不夠詳細和清楚。在SQL Server 2000中,Microsoft減少了幾個(gè)配置選項,讓SQL Server動(dòng)態(tài)配置它們,從而減少了幾個(gè)容易混淆的地方。同時(shí),Microsoft又為SQL Server 2000新增了兩個(gè)服務(wù)器配置選項,調整了一些數據庫選項,從而稍許簡(jiǎn)化了數據庫管理員的工作。
新增的服務(wù)器選項
就象訪(fǎng)問(wèn)大多數企業(yè)版服務(wù)器的屬性一樣,我們不能在SQL Server Enterprise Manager中通過(guò)服務(wù)器屬性窗口訪(fǎng)問(wèn)SQL Server 2000新增的兩個(gè)服務(wù)器選項。作為防止用戶(hù)由于不小心而錯誤配置服務(wù)器的一個(gè)安全措施,Microsoft沒(méi)有把這些高級配置選項放入Enterprise Manager。相反,我們必須使用T-SQL/sp_configure系統存儲過(guò)程去訪(fǎng)問(wèn)這些高級選項。我們可以用不帶參數運行sp_configure的方法查看服務(wù)器的當前配置。在執行結果中,config_value是SQL Server從Master數據庫syscurconfigs表提取出來(lái)的數據,它顯示了服務(wù)器的當前配置;run_value列顯示了執行sp_configure時(shí)SQL Server正在使用的選項,SQL Server在sysconfigures表中存儲這些數據。修改某個(gè)選項之后,我們必須執行RECONFIGURE命令(在大多數情況下,還要重新啟動(dòng)SQL Server)才能讓新的run_value顯示出來(lái)。本文所討論的所有選項都要求重新啟動(dòng)SQL Server。
服務(wù)器選項總共有36個(gè),默認情況下,sp_configure存儲過(guò)程只顯示其中的10個(gè),顯示結果中不包含高級選項,而且所有新的SQL Server配置選項都不會(huì )出現在這個(gè)精簡(jiǎn)的清單中。然而,我們可以使用show advanced options命令參數讓SQL Server顯示出所有選項。要啟用show advanced options,我們使用如下命令格式:
EXEC sp_configure ‘show advanced options‘, ‘1‘ RECONFIGURE
要安裝一個(gè)選項,我們必須在使用sp_configure配置服務(wù)器之后運行RECONFIGURE命令。上面命令的輸出結果如下:
Configuration option ‘show advanced options‘ changed from 0 to 1. Run the RECONFIGURE command to install.
一旦能夠查看高級選項,我們就可以看到兩個(gè)新的服務(wù)器選項。其中最重要的一個(gè)新選項是awe enabled選項,它能夠讓SQL Server企業(yè)版提高服務(wù)器的內存訪(fǎng)問(wèn)能力。默認情況下,SQL Server能夠使用的最大RAM是3GB。在Windows 2000上,應用程序可以 使用Address Windowing Extensions(AWE)API訪(fǎng)問(wèn)更多的RAM。例如,在Windows 2000 Advanced Server中,我們能夠使用多達8GB的內存,只有Windows 2000 Datacenter Server支持64GB內存才超過(guò)它。顯然,當SQL Server擁有更多的可用內存,它將能夠緩沖更多的數據,改善查詢(xún)的響應時(shí)間。
不過(guò),啟用awe enabled選項也有副作用。啟用awe enabled選項之后,SQL Server不再動(dòng)態(tài)地分配內存。由于缺乏內存動(dòng)態(tài)分配功能,管理負擔隨之增加,因為我們必須仔細地監視RAM使用情況。另外,設置awe enabled選項之后,我們還必須設置max server memory選項。如果我們不設置max server memory選項,服務(wù)器RAM又等于最低要求3GB,SQL Server將在啟動(dòng)的時(shí)候占據機器上幾乎所有的RAM,只給Windows和其他應用留下128 MB的RAM。通過(guò)設置max server memory選項,我們可以限制SQL Server使用的內存總量。
awe enabled選項只能在SQL Server 2000 Enterprise Edition上使用,操作系統必須是Windows 2000 Advance Server或Datacenter。如果你在SQL Server的其他版本上使用這個(gè)選項(或者操作系統是WinNT),SQL Server將忽略這個(gè)選項。在某些服務(wù)器配置組合下,不適當地配置這個(gè)選項將導致不可預知的結果。例如,如果我們在Windows 98操作系統、運行SQL Server Personal Edition的機器上設置這個(gè)選項,SQL Server可能報告它已經(jīng)停止(甚至是在它正在運行的時(shí)候),而且它將拒絕停止SQL Server實(shí)例。
在SQL Server Enterprise Edition服務(wù)器上啟用AWE包括三個(gè)步驟。首先,我們必須確保啟動(dòng)SQL Server實(shí)例的賬號具有在內存中鎖定頁(yè)的權限。SQL Server安裝時(shí)自動(dòng)把頁(yè)鎖定權限授予我們指定用來(lái)啟動(dòng)SQL Server服務(wù)的Windows賬號;但是,如果后來(lái)這個(gè)賬號已經(jīng)改變,你應該檢查一下已經(jīng)把哪些權限授予了啟動(dòng)SQL Server的用戶(hù)。檢查賬號的權限可以使用Windows 2000的組策略工具。第二個(gè)步驟是運行sp_configure存儲過(guò)程,把awe enabled選項設置為1。然后,我們必須執行RECONFIGURE,用手工方式重新啟動(dòng)SQL Server。配置命令的語(yǔ)法為:
EXEC sp_configure ‘a(chǎn)we enabled‘, ‘1‘ RECONFIGURE
注意,在Windows 2000或者NT上,如果要訪(fǎng)問(wèn)高于4GB的物理內存,我們還必須采取其他一些措施,即修改boot.ini文件,加入/pae選項。
第二個(gè)新的SQL Server 2000選項用來(lái)啟用C2級安全審核模式。C2是一個(gè)政府安全等級,它保證系統能夠保護資源并具有足夠的審核能力。C2模式允許我們監視對所有數據庫實(shí)體的所有訪(fǎng)問(wèn)企圖。啟用SQL Server的C2審核功能的命令如下:
EXEC sp_configure ‘c2 audit mode‘, ‘1‘ RECONFIGURE
(要實(shí)現完整的C2級安全保證,Windows操作系統也必須提供相應的支持)啟用C2審核模式并重新啟動(dòng)之后,SQL Server自動(dòng)在\MSSQL\Data目錄下面創(chuàng )建跟蹤文件。我們可以使用SQL Server Profiler查看這些監視服務(wù)器活動(dòng)的跟蹤文件。
SQL Server以128KB大小的塊為單位把數據寫(xiě)入跟蹤文件。因此,當SQL Server非正常停止時(shí),我們最多可能丟失128 KB的日志數據??梢韵胂?,包含審核信息的日志文件將以很快的速度增大。例如,某次試驗只訪(fǎng)問(wèn)了三個(gè)表,跟蹤文件已經(jīng)超過(guò)了1MB。當跟蹤文件超過(guò)200MB時(shí),C2審核將關(guān)閉舊文件并創(chuàng )建新文件。每次SQL Server啟動(dòng)的時(shí)候,它會(huì )創(chuàng )建一個(gè)新的跟蹤文件。如果磁盤(pán)空間不足,SQL Server將停止運行,直至我們?yōu)閷徍巳罩踞尫懦鲎銐虻拇疟P(pán)空間并重新啟動(dòng)SQL Server實(shí)例。在SQL Server啟動(dòng)的時(shí)候,我們可以使用-f參數禁用審核。
減少的服務(wù)器選項
在SQL Server 2000中,Microsoft減少了原有的幾個(gè)選項,讓SQL Server 2000自動(dòng)配置這些選項。減少的選項中最引人注目的是max async IO選項。這個(gè)選項允許數據庫管理員指定在單一的數據庫文件上可以出現多少異步的磁盤(pán)讀取和寫(xiě)入操作。SQL Server 7.0中的max async IO選項是人們了解最少的選項之一,它的默認值是32,但很少有管理員去調整這個(gè)值。在SQL Server 2000中,這個(gè)異步IO選項隨著(zhù)SQL Server接收的適配器反饋信息動(dòng)態(tài)地上升或者下降,SQL Server利用反饋算法確定服務(wù)器負載以及SQL Server系統能夠控制的數量。
數據庫選項
在SQL Server 2000中,如果你曾經(jīng)查看過(guò)Enterprise Manager中數據庫的Options選項卡,你可能會(huì )對一些通用選項的消失感到困惑(要訪(fǎng)問(wèn)Options選項卡,在Enterprise Manager中右擊數據庫然后選擇Properties)。Options選項卡中減少了trunc. log on chkpt.以及Select Into/Bulk Copy這兩個(gè)選項,如圖1所示。為了清楚和向后兼容起見(jiàn),這些通用選項現在稱(chēng)為recovery model(恢復模型)選項。如果用SQL Server 2000的Enterprise Manager連接SQL Server 7.0數據庫,我們仍舊可以看到這些老選項。
圖1
以前,我們使用下面的命令為Northwind數據庫開(kāi)啟trunc. log on chkpt.選項:
SP_DBOPTION Northwind ,‘trunc. log on chkpt.‘, true
設置好選項之后,我們可以通過(guò)Options選項卡或者下面的查詢(xún)檢查Northwind數據庫上這些選項設置是否成功:
SELECT DATABASEPROPERTY (‘Northwind‘, ‘IsTruncLog‘)
結果為1表示選項設置成了true;結果為0表示選項設置成了false。如果結果為NULL,它表示我們或者選擇了一個(gè)錯誤的選項,或者數據庫不存在。
為了便于使用,Microsoft把trunc. log on chkpt.和Select Into/Bulk Copy選項換成了恢復模型設置。這種選項改變的目的在于確保數據庫管理員能夠充分理解在災難恢復策略中恢復模型選項的意義。SQL Server 2000為我們提供了三種數據庫恢復模型:simple(簡(jiǎn)單恢復),full(完全恢復),bulk_logged(大容量日志記錄恢復)。
簡(jiǎn)單恢復模型最容易操作,但它是最缺乏靈活性的災難恢復策略。選擇簡(jiǎn)單恢復模型等同于把trunc. log on chkpt.設置成true。在這種恢復模型下,我們只能進(jìn)行完全備份和差異備份(differential backup):這是因為事務(wù)日志總是被截斷,事務(wù)日志備份不可用。一般地,對于一個(gè)包含關(guān)鍵性數據的系統,我們不應該選擇簡(jiǎn)單恢復模型,因為它不能夠幫助我們把系統還原到故障點(diǎn)。使用這種恢復模型時(shí),我們最多只能把系統恢復到最后一次成功進(jìn)行完全備份和差異備份的狀態(tài)。進(jìn)行恢復時(shí),我們首先要恢復最后一次成功進(jìn)行的完全備份,然后在此基礎上恢復差異備份(差異備份只能把自從數據庫最后一次完全備份之后對數據庫的改動(dòng)施加到數據庫上)。
完全恢復模型把trunc. log on chkpt.選項和Select Into/Bulk Copy選項都設置成false。完全恢復具有把數據庫恢復到故障點(diǎn)或特定即時(shí)點(diǎn)的能力。對于保護那些包含關(guān)鍵性數據的環(huán)境來(lái)說(shuō),這種模型很理想,但它提高了設備和管理的代價(jià),因為如果數據庫訪(fǎng)問(wèn)比較頻繁的話(huà),系統將很快產(chǎn)生龐大的事務(wù)日志記錄。由于在這種模型中Select Into/Bulk Copy設置成了false,SQL Server將記錄包括大容量數據裝入在內的所有事件。
最后一種恢復模型是大容量日志記錄恢復,它把trunc. log on chkpt.設置成false,把Select Into/Bulk Copy設置成true。在大容量日志記錄恢復模型中,大容量復制操作的數據丟失程度要比完全恢復模型嚴重。完全恢復模型記錄大容量復制操作的完整日志,但在大容量日志記錄恢復模型下,SQL Server只記錄這些操作的最小日志,而且無(wú)法逐個(gè)控制這些操作。在大容量日志記錄恢復模型中,數據文件損壞可能導致要求手工重做工作。 下表比較了三種恢復模型的特點(diǎn)。
恢復模型優(yōu)點(diǎn)工作損失表現能否恢復到即時(shí)點(diǎn)?
簡(jiǎn)單允許高性能大容量復制操作。
收回日志空間,使得空間要求最小。必須重做自最新的數據庫或差異備份后所發(fā)生的更改??梢曰謴偷饺魏蝹浞莸慕Y尾處。隨后必須重做更改。
完全數據文件丟失或損壞不會(huì )導致工作損失。
可以恢復到任意即時(shí)點(diǎn)(例如,應用程序或用戶(hù)錯誤之前)。正常情況下沒(méi)有。
如果日志損壞,則必須重做自最新的日志備份后所發(fā)生的更改??梢曰謴偷饺魏渭磿r(shí)點(diǎn)。
大容量日志記錄允許高性能大容量復制操作。
大容量操作使用最少的日志空間。如果日志損壞,或者自最新的日志備份后發(fā)生了大容量操作,則必須重做自上次備份后所做的更改。 否則不丟失任何工作??梢曰謴偷饺魏蝹浞莸慕Y尾處。隨后必須重做更改。
在數據庫的Options選項卡中,我們可以從Model下拉列表框選擇Simple把恢復模型改成簡(jiǎn)單模型。另外,Microsoft擴展了ALTER DATABASE命令,我們可以用它設置數據庫屬性。例如,用下面這個(gè)T-SQL命令可以把恢復模型設置為完全恢復模型:
ALTER DATABASE Northwind SET RECOVERY FULL
SQL Server 2000提供了把數據庫轉入單用戶(hù)模式的許多選項,它們都屬于那種最令人感興趣的隱藏選項。為了修正訛誤或其他數據問(wèn)題,數據庫管理員常常要把數據庫轉入單用戶(hù)模式。當數據庫處于這種模式時(shí),其它用戶(hù)將不能再訪(fǎng)問(wèn)數據,從而使得管理員能夠在用戶(hù)訪(fǎng)問(wèn)損壞的數據之前修正數據問(wèn)題。在SQL Server 7.0中,在把數據庫轉入單用戶(hù)模式之前,我們必須確保所有用戶(hù)都已經(jīng)斷開(kāi)連接。對于一個(gè)高速OLTP數據庫系統,比如電子商務(wù)系統,斷開(kāi)所有用戶(hù)的連接非常困難,因為就在我們斷開(kāi)某個(gè)用戶(hù)的連接時(shí),其他用戶(hù)還會(huì )連接數據庫。SQL Server 2000極大地改進(jìn)了這個(gè)操作過(guò)程,我們可以給用戶(hù)一個(gè)指定的時(shí)間去完成他們的事務(wù),然后由SQL Server自動(dòng)斷開(kāi)他們的連接。另外,我們也可以在不提供任何延遲時(shí)間的情況下斷開(kāi)所有的連接。
把數據庫轉入單用戶(hù)模式的方法之一是在數據庫的Options選項卡選中Restrict Access檢查框,然后選擇Single user。另外,Microsoft擴展了ALTER DATABASE命令,使它能夠把數據庫轉入單用戶(hù)模式,語(yǔ)法如下:
ALTER DATABASE Northwind SET SINGLE_USER
執行這個(gè)命令之后,SQL Server等待所有的數據庫連接,讓它們完成各自的事務(wù)。在這種狀態(tài)下,所有請求連接數據庫的用戶(hù)都將接收到圖2顯示的錯誤信息,并被重定向到他們各自的默認數據庫(通常是Master數據庫)。圖2的錯誤信息意味著(zhù)數據庫處于凍結狀態(tài),直至所有用戶(hù)斷開(kāi)連接。如果目標服務(wù)器或者發(fā)出命令的用戶(hù)沒(méi)有設置query timeout參數,客戶(hù)端可能無(wú)限期地等待查詢(xún)完成,直至所有的連接被斷開(kāi)。在Query Analyzer中,我們可以在Options屏幕(選擇菜單Tools,Options)的Connections選項卡里面指定超時(shí)秒數。在單用戶(hù)模式下,只有發(fā)出ALTER DATABASE命令的用戶(hù)可以保持連接。
圖2
另外,我們還可以用ROLLBACK IMMEDIATE命令斷開(kāi)所有打開(kāi)數據庫連接的用戶(hù)。但我們不能在Enterprise Manager中使用這個(gè)命令,而是應該用Query Analyzer執行,例如:
ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK IMMEDIATE
執行這個(gè)命令之后,SQL Server立即斷開(kāi)所有的連接并回退它們的事務(wù)。所有正在執行事務(wù)的用戶(hù)都會(huì )接收到一個(gè)連接錯誤,而且他們不能再連接數據庫。
我們可以指定一個(gè)時(shí)間選項,讓SQL Server在斷開(kāi)用戶(hù)的連接之前等待用戶(hù)完成他們的事務(wù)。這個(gè)選項是可選的,它用ROLLBACK AFTER關(guān)鍵詞指定,如下面的命令所示:
ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK AFTER 20 SECONDS
執行這個(gè)命令之后,SQL Server先等待20秒鐘,然后斷開(kāi)所有的連接并回退它們的事務(wù)。在這個(gè)過(guò)程中,SQL Server不再接受新的連接請求,它是一個(gè)數據庫級的服務(wù)器暫停。在這個(gè)20秒之內,所有企圖連接數據庫的新用戶(hù)都將接收到圖2顯示的錯誤信息。如果執行這個(gè)命令的時(shí)候不存在已經(jīng)連接的用戶(hù),數據庫將立即轉入單用戶(hù)模式。
Enterprise Manager的數據庫Options選項卡中,最后一個(gè)新的配置選項是Compatibility Level,如圖1所示。要設置這個(gè)選項,我們只需從Compatibility Level下拉框選擇一個(gè)合適的兼容級別。在這個(gè)下拉框中,SQL Server 2000由80代表,7.0由70代表,6.5由65代表。兼容級別選項決定了某些數據庫查詢(xún)操作的執行方法。由于SQL Server的關(guān)系引擎在發(fā)展變化,某些查詢(xún)的結果在不同的版本之間可能不同。例如,如果我們執行下面這個(gè)查詢(xún):
SELECT DATALENGTH(‘‘)
依賴(lài)于我們?yōu)閿祿煸O置的兼容級別是SQL Server 2000、7.0或者6.5,上述查詢(xún)可能得到兩個(gè)不同的結果。對于SQL Server 2000或7.0數據庫,返回結果是0,因為SQL Server 2000和7.0把空字符串視為真正的空;在SQL Server 6.5兼容模式下,返回結果是1,因為SQL Server 6.5把空字符串視為一個(gè)空格。SQL Server 7.0也有這個(gè)兼容級別選項,但它只能通過(guò)sp_dbcmptlevel存儲過(guò)程訪(fǎng)問(wèn)。
綜上所述,在SQL Server 2000中,Microsoft對服務(wù)器和數據庫配置方法進(jìn)行了幾個(gè)實(shí)質(zhì)性的改動(dòng)。不要輕視所有本文討論的選項和其他SQL Server配置選項——即使是一個(gè)小小的改動(dòng),它也可能對性能產(chǎn)生重大的正面或負面影響。在調整SQL Server的配置選項時(shí),你最好使用Performance Monitor之類(lèi)的服務(wù)器監視工具,確保選項調整不會(huì )對服務(wù)器性能產(chǎn)生負面影響。
(松下客 2001年06月11日 21:11)