国产18禁黄网站免费观看,99爱在线精品免费观看,粉嫩metart人体欣赏,99久久99精品久久久久久,6080亚洲人久久精品

1.4升級到SQLServer2005的好處_SQLServer2005數(shù)據(jù)庫開發(fā)詳解

時間:2008-11-13 19:41:00   來源:無憂考網(wǎng)     [字體: ]
1.4 升級到 SQL Server 2005 的好處
如上所述,SQL Server 2005 增加了許多新的功能,但若僅是將舊系統(tǒng)升級而不做任何改變,大概用不到上述這些好處,困為你必須重新學(xué)習(xí)這些功能的定義。

然而將舊有版本升級成 SQL Server 2005 仍有許多立即的好處,除了提供學(xué)習(xí)研發(fā)的機(jī)會外,SQL Server 2005 在針對舊有功能的性能提升、增加系統(tǒng)穩(wěn)定性上,也下了極大的功夫。本節(jié)討論的是你僅需完成升級,就可以立刻享有到的好處。

◎全文檢索

首先是針對全文檢索,新版建立 Catalog 內(nèi)容時,擴(kuò)展(Index population)的速度較舊版快一倍以上,而查詢效率也提升 30%-50%。另外,全文檢索服務(wù)支持多實例(multi-instanced),各 SQL Server 實例使用各自的全文檢索服務(wù)實例,不會互相干擾。全文檢索也支持聚集架構(gòu)以提高可獲得性。

SQL Server 2005 可以備份/還原、分離/附加(Detach/attach)全文檢索的 catalog,讓你在還原數(shù)據(jù)庫或遷移數(shù)據(jù)庫之后,無須耗時重新擴(kuò)展以建立 catalog。

◎查詢引擎化

當(dāng)我們輸入 SQL 語句到 SQL Server 服務(wù)器端時,若查詢引擎越聰明,就能夠越快速且正確地判斷用戶的意圖,找到的執(zhí)行計劃,才能越有效率地完成用戶的需求。在此看一下 SQL Server 2005 的查詢引擎較 2000 更為聰明的地方:

若執(zhí)行的 update 語句實際并未改變數(shù)據(jù)內(nèi)容,則 SQL Server 不會浪費資源去重新維護(hù)索引。

有效地加強文字符號(Symbolic)查詢的解讀。當(dāng) T-SQL 語句格式是

exp1 Op exp2

而 exp 操作數(shù)分別是字段名稱和常數(shù);op 為 <>、=、< 或 > 等運算符時,SQL 可以做更正確的語意判斷,如:

l ? a > 5 and a>3 and a=0 直接會傳回 false,因為 a 不可能既等于 0 又大于 5。

?(a between 1 and 100) and (a between 100 and 200) 直接將條件改成 a=100。

l 若條件是 a>3 and a>5 ,則實際條件是 a>5,在通過索引尋找時,自動使用條件比較嚴(yán)苛的 a>5。

l 增強 Indexed view 可用性,提供更多使用情境的對比。

l 對等聯(lián)結(jié)(Equi-join)的條件使用如下語句時:

r.x=s.x and s.x > 10

其實隱含著以下的意義:

r.x=s.x and s.x > 10 and r.x >10

SQL Server 2005 除了在 s.x 字段測試是否有可用的索引,也會嘗試在 r.x 字段上看看有沒有可用的索引。

上述正規(guī)與減化符號查詢的機(jī)制,將更能有效地建立的執(zhí)行計劃。

◎統(tǒng)計信息

若要正確判斷執(zhí)行計劃,SQL Server 先要對所存儲的數(shù)據(jù)內(nèi)容分布建立詳細(xì)而正確的統(tǒng)計。2005 關(guān)于存儲數(shù)據(jù)統(tǒng)計的部分提供以下的強化:

l 以往自動更新統(tǒng)計在數(shù)據(jù)量很大時,可能會阻止 OLTP 應(yīng)用程序的執(zhí)行,F(xiàn)在維護(hù)統(tǒng)計數(shù)據(jù)時,可以異步更新統(tǒng)計,因而不會卡住正在執(zhí)行的查詢。若建立新的統(tǒng)計正做到一半,目前想要執(zhí)行的查詢就用舊的統(tǒng)計。通過啟動如下的數(shù)據(jù)庫設(shè)置,可以啟動異步更新統(tǒng)計。

ALTER DATABASE [db名稱] SET AUTO_UPDATE_STATISTICS_ASYNC ON

l 統(tǒng)計的數(shù)據(jù)更為精確,提供 string summary statistics,可以支持如 like %字符串% 形式的過濾條件。以更精確的統(tǒng)計減少建立執(zhí)行計劃時的猜測。

l 針對計算字段手動或自動建立統(tǒng)計。例如:因為能自動對計算字段建立統(tǒng)計,所以可準(zhǔn)確預(yù)測如下的 where 條件。而如同 Indexed View,在下述實例中 Where 條件并未引用 b 字段,但因為定義相同,SQL Server 就會自動引用這個建立在計算字段 b 上的統(tǒng)計:

create table t1(a int,b as a+1)

create table t2(a int, c int)

SELECT * FROM t1 JOIN t2 ON t1.a=t2.a

WHERE t1.a+1 > 10

l 以平行運算的方式更有效地建立 Full scan 的統(tǒng)計。

l sp_updatestats 系統(tǒng)存儲過程只更新需要更新的統(tǒng)計。該存儲過程可以通過 UPDATE STATISTICS 語句更新目前數(shù)據(jù)庫內(nèi)用戶自定義以及系統(tǒng)數(shù)據(jù)表相關(guān)的統(tǒng)計。在 SQL Server 2005 版的該存儲過程只更新需要更新的統(tǒng)計,沒有數(shù)據(jù)更改的就自動跳過,因此整體效率更好。

◎執(zhí)行計劃的共享與重用

若多條連接或同一條連接重復(fù)執(zhí)行相同 SQL 語句時,執(zhí)行計劃能夠共享與重用,將可減少 CPU 建立執(zhí)行計劃的負(fù)荷。為此需求,SQL Server 2005 提供了以下的功能。

l 針對在批次內(nèi)或存儲過程的多句語句,可使用語句層次的重新編譯,不必完整重新編譯全部批次或存儲過程。例如幾千行的存儲過程中,用到了臨時數(shù)據(jù)表(temp table),在重新調(diào)用該存儲過程時,只需要重新編譯使用到緩存數(shù)據(jù)表的那幾行語句。

l 強迫使用參數(shù)化查詢,自動將條件中使用的常數(shù)當(dāng)作參數(shù),避免當(dāng)相同查詢語句以不同參數(shù)輸入時,重新編譯執(zhí)行計劃。例如你前端程序兩次輸入的 Where 條件是:Where col=1 和 Where col=2,雖然主體的查詢語句相同,但因為整句話不同,這時 SQL 可能會重新編譯執(zhí)行計劃。因此是 Where col=@input,讓編譯執(zhí)行計劃時,不管參數(shù)值為何,都直接使用相同的查詢語句。

在 SQL Server 2005 中你可使用數(shù)據(jù)庫的設(shè)置,強制啟動自動將常數(shù)當(dāng)作參數(shù)來編譯執(zhí)行計劃,設(shè)置語句如下:
ALTER DATABASE [db 名稱] SET PARAMETERIZATION FORCED

以往 SQL Server 2000 其實就有部分實現(xiàn)上述的功能,不過 2005 版可以讓你強制啟動,以盡量將語句中所有的常數(shù)都當(dāng)作變量。

另外,在執(zhí)行查詢時,語句包含動態(tài)對象,如數(shù)據(jù)表類型變量、觸發(fā)器等的執(zhí)行計劃仍可以被緩存。

◎執(zhí)行查詢

精確地建立統(tǒng)計,參照該統(tǒng)計分析出有效率地執(zhí)行計劃,聰明的高速緩存避免重復(fù)建立執(zhí)行計劃后,接著還需要執(zhí)行查詢并返回結(jié)果。SQL Server 2005 針對在不同服務(wù)器上執(zhí)行的分布式查詢可以異步執(zhí)行,也就是當(dāng)批次內(nèi)分別在不同的鏈接服務(wù)器(Iinked Server)下查詢語句時,SQL Server 2005 會以多線程的方式同時對不同的服務(wù)器下查詢語句,再將結(jié)果綜合返回到前端。以往采用順序的方式,需要等到第一句語句在某臺服務(wù)器執(zhí)行完畢后,才將下一句話放到另一臺服務(wù)器上執(zhí)行,無法發(fā)揮多臺服務(wù)器平行運作的優(yōu)勢。

另外,當(dāng)通過 SQL Server Profiler 工具程序錄制 SQL Server 執(zhí)行的狀況時,提供更為豐富的信息,如分布式查詢、以 XML 及圖形化描述死鎖信息。據(jù)此,你可以完成監(jiān)控、調(diào)試、及性能調(diào)教等操作。

最后,你還可以在重建索引的同時執(zhí)行查詢語句。

◎存儲引擎

針對存儲引擎,SQL Server 2005 也進(jìn)行了許多的強化:

l 動態(tài)字符串的數(shù)據(jù)列表可以跨頁,通過 MAX 數(shù)據(jù)類型的聲明,數(shù)據(jù)大小可以超過 8060 字節(jié)的限制。

l 更有效地使用 tempdb[1]。

l 自動快速緩存數(shù)據(jù)表和數(shù)據(jù)表變量的第一頁。

l 更有效地使用資源,如取得數(shù)據(jù)頁(page)、減少使用事務(wù)記錄。

l 備份

? 數(shù)據(jù)備份和 Log 備份可以同時進(jìn)行,批次執(zhí)行的 Log shipping 在備份 log 時不會
被數(shù)據(jù)備份卡住。

? Restore Verifyonly 語句現(xiàn)在會讀取每一數(shù)據(jù)頁,以確認(rèn)數(shù)據(jù),所以比以往的版本耗時。

l 文件 I/O

? 默認(rèn)啟動新提供的 Page Checksum 功能,提升系統(tǒng)的可信賴度(reliability)。

? 可以單獨還原損毀的數(shù)據(jù)頁。

l Insert:化寫入大量數(shù)據(jù)到 b-tree 數(shù)據(jù)區(qū)塊,效率與 bulk load 相似,但不需要使用 bulk load 語句。

l 數(shù)據(jù)庫恢復(fù)(recovery):更有效率,數(shù)據(jù)庫在 undo 階段就可以使用。但這需要企業(yè)版才支持。

l 事務(wù)管理提供單條記錄的版本(row version),可在數(shù)據(jù)庫級別設(shè)置 read committed snapshot,不必在連接(session)級別設(shè)置,就可以提供 snapshot isolation 的功能。數(shù)據(jù)庫的相關(guān)設(shè)置如下:

? ALLOW_SNAPSHOT_ISOLATION

? READ_COMMITTED_SNAPSHOT

連接維持在原 Read Committed 事務(wù)級別

? 在 T-SQL 語句中可以通過 ReadCommittedLock 這個 Query hint;在啟動 row
version 后,仍使用原 Read Committed 事務(wù)級別的行為。

l 觸發(fā)器會利用 Row-level versioning 的技術(shù),在讀取新舊記錄時,會自動讀取 row-level version,不管數(shù)據(jù)庫是否啟動 snapshot isolation。

? 不像以往需要從事務(wù)記錄找尋新舊改變,尤其在多人同時連接時,避免同時搶 log
讀取的操作。

l 以相同的字段重建聚集索引(Clustered Index)時,如下列的語句所示,不會導(dǎo)致非聚集索引一起重建[2]。

? DBCC DBREINDEX(tbl,idx)

? CREATE CLUSTERED INDEX idx ON Tbl(col) WITH DROP_EXISTING

? ALTER INDEX idx ON tbl REBUILD 新語句

SQL Server 內(nèi)部的 OS(SQLOS)[3]更穩(wěn)定更有效率

l 啟動 AWE 設(shè)置后,仍可動態(tài)使用存儲器。

l 更準(zhǔn)確地在高速緩存中保留有用的數(shù)據(jù)頁(page)。

l 加上對存儲器數(shù)據(jù)頁的 check sum 檢查,以早期發(fā)現(xiàn)存儲器硬件的錯誤。

l 保留一條 Dedicated Admin Connection(DAC) 資源,在 SQL Server 資源用盡時,可以通過該連接進(jìn)入管理。

l 以 XML 格式輸出死鎖的相關(guān)數(shù)據(jù),SQL Profiler 可用圖2-24顯示死鎖信息。

l 以往線程(thread)是綁在 session 上,現(xiàn)在是綁在批次(batch)上,因此,當(dāng)一個 session 傳遞多個批次,而每個批次都很耗 CPU 資源,現(xiàn)在可以分散到多顆 cpu 同時執(zhí)行。

除了上述條列的各項功能外,另外還有在單一機(jī)器可以同時安裝多個 SQL Server 數(shù)據(jù)庫引擎、多個 Analysis Services、多個 Reporting Services 實例。通過 SQL Server 界面區(qū)配置提升安全管理的方便性。SQL Server Profiler 現(xiàn)今也可以記錄Analysis Services 的執(zhí)行內(nèi)容等等。只要升級后,立刻可感受到上述功能的優(yōu)點,而不必另行改變數(shù)據(jù)庫架構(gòu)與設(shè)計應(yīng)用程序。

總的來說,因為 SQL Server 引擎更為聰明,更能有效地使用硬件資源,因此直接升級后,不改任何程序代碼與設(shè)置的狀態(tài)下,便可以提升性能、穩(wěn)定性與管理方便性,尤其對于大型數(shù)據(jù)庫更能發(fā)揮所長。當(dāng)然,升級后,若你能稍作改變,使用SQL Server 新提供的功能是更佳的做法。

[1] tempdb 的使用建議:建立與 CPU 數(shù)目相同的文件數(shù)(參考該 SQL Server 實例的 affinity mask 設(shè)置),且多個文件的大小要相同。


[2]若聚集索引不是的,因為維持的值在以往可能會隨著 rebuild 而重建,則非聚集索引憑著聚集索引指向數(shù)據(jù)的指針也需要重建,現(xiàn)在 SQL 2005 會在重建聚集索引時,維護(hù)這個原有的值。
[3]因為 SQL Server 的核心某部分需要做 Memory allocation、建立、分配與替 thread 排各 cpu 的調(diào)度等等,因此該部分也稱為 SQLOS。