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