SQL Server 2008管理和開發(fā)的效能
由于現(xiàn)今的資訊系統(tǒng)邁向全面地連接整合(例如標(biāo)準(zhǔn)化與服務(wù)導(dǎo)向架構(gòu)),搜集資料的技術(shù)翻新(例如RFID,以及各種的手持移動裝置),讓資料處理的質(zhì)與量需求大增。據(jù)統(tǒng)計,全世界有30%的資料放在關(guān)聯(lián)式資料庫,稱為結(jié)構(gòu)化資料。另有70%的資料則以不同的格式存在,例如XML、地理空間資訊、圖像多媒體資料、各種格式的檔案(如 Office、PDF)…等等。在硬件存儲設(shè)備大幅提升容量但價格快速滑落的今日,SQL Server 2008 期待可以納入這些半結(jié)構(gòu)性(semistructure)與非結(jié)構(gòu)性資料(unstructured)。讓所有的資料能夠在同一平臺上,一起控管與維護(hù),例如統(tǒng)一地更新資料、安全權(quán)限、高可獲得性、檢索、分析與報表…等等。
一般而言,企業(yè)的資料每年以1.5倍的等比級數(shù)成長,而應(yīng)用資料的方式也一直翻新。這造成對資料平臺的穩(wěn)定性、安全、效率、可擴(kuò)充性、易管理、好開發(fā)、跨平臺同步資料…等需求也日益嚴(yán)苛。微軟在2008第三季發(fā)布了SQL Server 2008,它針對上述需求全面地強(qiáng)化。而本文僅針對執(zhí)行效率有關(guān)的部分進(jìn)行討論。
管理方面
以原則為基礎(chǔ)(Policy-based)的管理
組合管理條件后,套用到服務(wù)器、資料庫、資料表...等單位,定期檢查或強(qiáng)制施行。在在Microsoft SQL Server 2008 Feature Pack( http://www.microsoft.com/downloads/details.aspx?FamilyId=C6C3E9EF-BA29-4A43-8D69-A2BED18FE73C&displaylang=en)已經(jīng)提供了許多與效能相關(guān)的管理原則,可用以檢核相關(guān)的SQL Server設(shè)定。
保障運(yùn)算效能與分析
效能資料搜集分析與Management Data Warehouse:集中收集多臺 SQL Server服務(wù)器執(zhí)行個體的資料,例如管理或效能資訊(硬盤使用、查詢統(tǒng)計、系統(tǒng)效能計數(shù)器…等),并產(chǎn)生分析報表。
透過精靈在指定的服務(wù)器只行個體建立SQL Server預(yù)先定義好、存放系統(tǒng)資料的資料倉儲(data warehouse),該資料倉儲就是一般的資料庫。
在個別服務(wù)器執(zhí)行個體收集到資料后,預(yù)設(shè)先快取到指定的本機(jī)目錄下,然后以批次的方式加入集中的Management Data Warehouse內(nèi)。
Resource Governor與資源管理:Resource Governor是SQL Server 2008新增的功能,即由定義需求可使用的CPU和記憶體資源,以保障服務(wù)器的資源不會被少數(shù)使用者過度使用。
設(shè)定不同的Pool/資源群組,規(guī)范該群組可用的資源,如CPU和Memory的比例。以保障資源不會被某些程序耗盡,而其他程序無資源可用。
僅企業(yè)版支持,以執(zhí)行個體為單位。透過以T-SQL撰寫的自訂函數(shù)回傳所屬群組的名稱,將登入的連接(connection)賦予到與先定義好的workload group,不是以特定的查詢語法為單位,在自訂函數(shù)內(nèi)可以利用Host_Name、App_Name、SUSER_Name、Is_Member、ConnectionProperty 等 T-SQL預(yù)設(shè)函數(shù)來定義商業(yè)邏輯,例如哪個應(yīng)用程式建立的連接,就可使用高/低比例的資源。
如果沒有其它連接在第二個群組,則單一群組設(shè)定上雖不允許使用100%資源,然因為沒有其他比例分配的組群搶資源,則仍可以使用全部資源。
這可提升系統(tǒng)穩(wěn)定性,但并沒有為服務(wù)用量計價的機(jī)制。
資料壓縮
線上資料壓縮:針對資料表,分為Row 和 Page兩種壓縮。壓縮資料雖然較耗CPU資源,但提升資料載入記憶體與回存硬盤的效率中,寫入硬盤或傳遞到遠(yuǎn)端服務(wù)器、存儲體都比較快,若壓縮率好,將因節(jié)省了I/O時間而提升整體效率。備份的內(nèi)容也可壓縮,節(jié)省硬盤資源,而壓縮率會與資料形態(tài)有關(guān)。
資料庫備份壓縮
在記憶體備份的內(nèi)容立即壓縮,這會消耗cpu的運(yùn)算力,但寫入硬盤或傳遞到遠(yuǎn)端存儲體都較快。
預(yù)設(shè)未啟動,而Mirroring 與 Log Shipping 會自動啟動壓縮交易記錄。
壓縮率視資料形態(tài)、資料庫本身是否有壓縮以為加密而不同。
只有Enterprise Edition 支援壓縮,但壓縮的備份可以restore到任意其它版本Hot-Add CPU:服務(wù)器可不停機(jī)直接增加CPU,SQL Server 執(zhí)行個體也可以立即采用該CPU。
開發(fā)方面
新資料形態(tài),日期和時間形態(tài)分開,新增date、time、datetime2、datetimeoffset 等日期格式:
時間與日期分開,在利用「between…and…」取時間間隔時可方便許多,而datetimeoffset資料格式則可以讓你記錄與時區(qū)有關(guān)的時間資料。
另外,time、datetime2、datetimeoffset 等形態(tài)的資料長度可變動,讓你可在精確度與節(jié)省空間兩者間選擇。
舊的時間函數(shù)可以使用新的資料形態(tài),并提供新的時間函數(shù)以取得更精確的時間。
由于大部分的應(yīng)用日期和時間是分開的,精確使用date 和 time類型后,在存儲時可節(jié)省空間,索引也更有效率,且透過T-SQL 存取時,也省掉不必的格式運(yùn)算。
新索引結(jié)構(gòu),設(shè)定索引的過濾條件(Filtered Index)
對符合Where 條件的值建立索引,例如:建立索引時限制欄位值不可NULL,則針對Sparse Column建出來的索引資料量就小很多。這可減輕于一般新增、修改、刪除資料時,因為要維護(hù)索引資料所造成的負(fù)荷。
因為是對資料子集建索引,整個資料量少,統(tǒng)計的精確度更高,則執(zhí)行計劃的判讀將更為精確。
T-SQL 增加Merge語法
與ANSI SQL 2006的Merge定義相容并加以延伸。
比較來源與目的資料后,以一句 Merge 語法同時完成新增、修改、刪除等動作。如同單一句 SQL 語法自動含在交易內(nèi),透過 Merge 語法所有更新的資料都包在一個交易內(nèi),
不像以往需明確定義交易,然后包含多句變更資料的 DML 語法。以往若要同步兩個資料表,可能同事要執(zhí)行 Insert、Delete 和 Update 三句話,兩個資料表最少要 Join 比對三次,而 Merge 語法可以對比一次,就完成各種更新動作。
若用 UPDATE FROM JOIN 語法變更資料,若來源端有兩筆以上記錄對應(yīng)到目的端,則以哪一筆記錄更新將無法推測,Merge 語法則直接回傳錯誤。
SQL Server 2008 與效能相關(guān)的議題就探討到此,希望對你熟悉SQL Server 2008有所幫助
【編輯推薦】