共用方式為


SQL Server 2008

新功能

Randy Dyess

 

摘要:

  • 更有效的管理
  • 改進的效能和延展性
  • 更高的安全性和可用性
  • 適用於開發人員的變更

Microsoft 又再次發行全新版本的 SQL Server,誓言改善資料庫管理員的負擔。目前最新的版本是 SQL Server 2008,它所提供的各種新功能,

足以讓系統管理輕鬆好幾倍。

只要是用過 SQL Server® 2005 的資料庫管理員,都不難發現 SQL Server 2008 沿用了許多您在日常工作常用的功能,不過也很快會發現到這些工具都已經過改進。過去要在複雜的資料庫環境中使用各種功能,必須配合自訂或因應措施,但是以現有功能為基礎所建置的新功能,則不太需要這麼做。

SQL Server 2008 新功能所涵蓋的資料庫工作角色範圍之大,要一一分類實在不容易。我也是在體驗分類之後,才瞭解為什麼有些讀者會質疑我把明顯屬於類別 Z 的功能 X,歸到類別 Y 下。其實這只是反映觀點以及貴公司經營業務方式的不同。

我很了解使用資料庫的人常常覺得自己身兼數職,但我還是盡量將新功能分成下列一般類別:管理、延展性、效能、高可用性、安全性、開發,以及商務智慧。

有關管理的新功能

對於資料庫管理員 (像我也是) 來說,光是那些附加的管理功能,就足以把 SQL Server 2008 變成令人驚豔的新產品。全新的原則管理、多重伺服器查詢功能、組態伺服器,以及資料收集器/管理倉儲等,為那些經常負責管理大型複雜資料庫環境的資料庫管理員,提供了強大的新功能,這些環境可能有數十甚至數百部伺服器,上面並且有成百上千個資料庫。

SQL Server 2008 原則管理功能,之前在 Community Technology Previews (CTP) 中其實是稱為「陳述式管理架構」,它可以讓您針對一或多部資料庫伺服器建立和執行組態原則。透過這些原則,您可以確保每個目標伺服器和資料庫皆套用和維護標準的組態設定。[圖 1] 就是這項功能的範例。

Figure 1 資料和記錄檔位置最佳作法原則

Figure 1** 資料和記錄檔位置最佳作法原則 **(按影像可放大)

原則是根據一組預先定義的 Facet 建立而成。每個 Facet 都包含 SQL Server 2008 組態設定和其他您可以控制的事件的子群組。要建立原則,必須將這些 Facet 與條件配對成組。條件是 Facet 屬性所允許的值、組態設定或是其他內含在 Facet 中的事件。

條件也是適合原則篩選器使用的值。假設您希望原則只針對特定的資料庫執行的話,可以建立一個含有該資料庫名稱的條件,然後將這項條件加入原則中。這麼一來,原則就只會套用到那個資料庫。相信我 — SQL Server 2008 原則聽起來可能很複雜,但試過之後就知道它其實很好用。

新的多伺服器互動和組態伺服器功能特別適合同時對多部伺服器執行查詢。您可以在 Management Studio 中註冊伺服器,然後將那些伺服器放在同一個群組下。當需要向群組中的所有伺服器執行原則或查詢時,只要在群組上按一下右鍵進行就行了。

另外還有一個優點,就是您可以設定這個功能,讓每部伺服器傳回一個結果集,或是將所有的結果集合併成一個大型結果集。您也可以指定是否要將伺服器和資料庫名稱作為結果的一部分,好讓您區分各部伺服器的結果。能夠將註冊的伺服器存放在組態伺服器上,而不是存放在個別 Management Studio 中,可說是一大優點。

另外一項不錯的全新管理功能是「資料收集器」。資料庫管理員通常需要從大量的伺服器收集管理資料,而許多 DBA 都已建立自己自訂的解決方案來進行這項工作。「資料收集器」是內建機制,可以減輕收集管理相關資料的工作負擔。有了它,您不但可以使用 SQL Server Agent 和 SQL Server Integration Services (SSIS) 建立一套架構來收集和存放資料,還可以用於錯誤處理、稽核和收集記錄。

它與協力廠商工具和自訂工作不同的是,大多數的資料庫管理員很容易就可以了解「資料收集器」,因為它是利用 SQL Server Agent 和 SSIS 建立一組工作和封裝,來處理資料的連線、收集和存放事宜 (如 [圖 2] 所示)。只要將這項資料存放到中央位置 (也就是所謂的 Management Warehouse),您就可以透過一組 T-SQL 陳述式和 SQL Server 2008 Reporting Services 報告加以檢視和整理。有了這個中央資料存放區,分析和檢視資料庫環境的整體管理資料可說是簡單許多。

Figure 2 資料收集器磁碟使用量記錄檔

Figure 2** 資料收集器磁碟使用量記錄檔 **(按影像可放大)

有關延展性的新功能

這幾年來,SQL Server 資料庫管理員發現他們的資料庫環境有不斷擴大的趨勢。隨著資料庫環境規模的擴增,您必須用新方法和新工具來達成滿足多數企業需求的延展性。SQL Server 2008 所推出的幾項新功能,正可助上一臂之力。

SQL Server 2008 具有內建壓縮可讓您壓縮資料庫檔案,以及與相對應的資料庫相關聯的交易記錄檔。SQL Server 2005 引進了在唯讀檔案或檔案群組壓縮資料的功能,但是這種形式的壓縮,只是利用 Windows® NTFS 的壓縮能力。而現在透過 SQL Server 2008,就可以同時進行資料列層級和頁面層級壓縮,提供您在資料檔案層級壓縮所沒有的優勢。

在資料列和頁面層級壓縮不但可縮小所需的資料空間量,另外還能減少所需的記憶體量,因為資料在記憶體中會持續保持壓縮狀態。記憶體中的壓縮資料可以增加記憶體的使用率,因而改進許多系統的延展性。

SQL Server 2008 也引進在備份層級進行壓縮的功能。雖然資料庫備份只能備份資料庫使用中的部分,但是這個部分也有好幾百 GB,甚至是好幾十 TB 之多。資料庫環境中的多 TB 備份檔案複本只要超過一個,就會佔用寶貴的儲存空間,這些空間其實可以更有效地運用。而 SQL Server 2008 可讓資料庫管理員壓縮他們的備份檔案,釋出部分空間,將它們運用到即時資料身上。

另外還有一項新功能 ─「資源管理員」。這項功能可讓您定義在執行期間,允許個別工作負載或一組工作負載使用的資源量。您可以透過「資源管理員」建立一個環境,讓許多不同的工作負載同時存在一部伺服器上,而不需要擔憂其中一項或多項工作負載會充斥伺服器,以及折損其他工作負載的效能。

這項功能的優點是讓您更有效地運用資料庫伺服器上可用的總資源量。[圖 3] 就是使用「資源管理員」來限制伺服器活動的範例。

Figure 3 Limit activity with the Resource Governor

USE master
go

--Drop function
IF OBJECT_ID('rgclassifier_demo','Function') IS NOT NULL
DROP FUNCTION rgclassifier_demo
go

--Create a classifier function for report group
CREATE FUNCTION rgclassifier_demo() RETURNS SYSNAME 
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @group_name AS SYSNAME
  IF (USER_NAME() LIKE '%Launch_Demo%')
         SET @group_name = 'demogroup'
    RETURN @group_name
END
GO

--Drop workload group for anything coming from Management Studio
IF EXISTS (SELECT name FROM sys.resource_governor_workload_groups 
  WHERE name = 'demogroup')
BEGIN
  DROP WORKLOAD GROUP demogroup
END
GO

--Create workload group
CREATE WORKLOAD GROUP demogroup
GO

--Register the classifier function with 
--Resource Governor
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_demo)
GO

--Alter the dbogroup workload group to only 
--allow 10% of CPU for each workload request 
ALTER WORKLOAD GROUP demogroup
WITH (REQUEST_MAX_CPU_TIME_SEC = 10)
GO

--Create a new resource pool and set a maximum CPU limit for all workloads.
IF EXISTS (SELECT name FROM sys.resource_governor_resource_pools
  WHERE name = 'pooldemo')
DROP RESOURCE POOL pooldemo
GO
  
CREATE RESOURCE POOL pooldemo
WITH (MAX_CPU_PERCENT = 40)
GO

--Configure the workload group so it uses the 
--new resource pool. 
ALTER WORKLOAD GROUP demogroup
USING pooldemo
GO

--Apply the changes to the Resource Governor
--in-memory configuration.
ALTER RESOURCE GOVERNOR RECONFIGURE
GO

有關效能的新功能

SQL Server 2008 提升了資料庫的整體效能。拜 SQL Server 2008 中的幾項新功能所賜,您可以控制和監視靠它們執行的資料庫和應用程式效能。

當每秒有大量交易要執行時,平常在這些交易期間發生的鎖定,可能會對資料庫應用程式的效能產生負面的影響。SQL Server 為了減少一個處理序所保有的鎖定總數,於是將鎖定從較小的資料列層級和頁面層級鎖定,擴大到大型資料表層級鎖定。但是有一點要注意的是,擴大鎖定的動作可能會導致一些問題。例如,單一交易可能會鎖定整個資料表,而阻止其他交易使用該資料表。

但是 SQL Server 2008 採用 SQL Server 2005 就有的資料表分割機制,在 SQL Server 引擎將鎖定擴大到資料表層級前,先擴大到磁碟分割層級。這個中間層級鎖定,可大幅減低鎖定擴大對每秒必須處理上百和上千交易的系統所造成的影響。

SQL Server 2008 提供了幾項全新的查詢處理器改進功能,以利查詢與分割的資料表進行互動。現在查詢最佳化工具可以在資料表層級只使用磁碟分割識別碼而不是磁碟分割機制,對磁碟分割執行查詢搜尋,就像對個別索引一樣。

有關高可用性的新功能

隨著資料庫環境漸形複雜,加上資料庫規模與日俱增,確保這些資料庫的可用性也變得越來越棘手。SQL Server 2008 仍然提供您過去為了達成高可用性所採用的熟悉機制,只是當中有些功能在 SQL Server 2008 中已經增強,同時也加了一些新功能。

很多系統管理員都是從 SQL Server 2005 開始實作資料庫鏡像以提高可用性。而 SQL Server 2008 則在資料庫鏡像的作法方面提供許多改進。舉例來說,過去資料庫鏡像在將交易記錄資料從主體資料庫移到鏡像資料庫時,有時候會產生相關的效能問題。為了因應這一點,SQL Server 2008 在資訊傳送到鏡像交易記錄加以強化之前就先進行壓縮,以減少從主體交易記錄移到鏡像交易記錄的網路資訊量。

您現在有能力可以修復主體上損毀的資料頁面。如果主體資料庫因為錯誤 823 和 824 而導致資料頁面損毀,該主體可以向鏡像伺服器要求取得這些資料頁面的全新複本。取得完好資料頁面的要求會自動進行,不會對目前正在存取主體資料庫的任何使用者產生任何影響。

另外一項新功能 ─ Hot Add CPU,則可讓您在資料庫伺服器增加新的 CPU,而不影響伺服器資料庫的可用性。不過,Hot Add CPU 還是有一些限制,因為它只能用在執行 64 位元的 Itanium 型 Windows Server® 2008 Enterprise Edition 或 Datacenter Edition,而且還必須安裝 Enterprise Edition 的 SQL Server 2008 才能使用它。

有關安全性的新功能

SQL Server 2005 是以資料加密的形式提供資料安全性。SQL Server 2008 推出兩種功能,大幅增進了加密功能:「可延伸金鑰管理」和「透明資料加密」。

「可延伸金鑰管理」可讓增強的結構,安全地儲存加密基礎結構所用的金鑰 — 不僅是在資料庫本身的內部,也包括協力廠商軟體模組中或含硬體安全性模組的資料庫外部。

「透明資料加密」是把加密當作資料庫的屬性,而不只是一行程式碼內的函數結果,藉此提高加密的彈性。如此一來,系統管理員在資料層級進行加密時,就不需要進行像資料庫結構和應用程式程式碼那麼多的變更。[圖 4] 中的程式碼說明了透過透明資料加密來加密資料庫的方法。

Figure 4 Using Transparent Data Encryption

USE master;
GO

--Create a master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YouWillNeedToCreateAStrongPassword';
GO

--Create a certificate to use with TDE
CREATE CERTIFICATE TDECERT WITH SUBJECT = 'TDECert'
GO

--Change to the database to encrypt
USE AdventureWorks
GO

--Create your database master key
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128 --Use a strong algorithm
ENCRYPTION BY SERVER CERTIFICATE TDECERT
GO

--Alter the database to encrypt it with the
--master database key
ALTER DATABASE AdventureWorks
SET ENCRYPTION ON
GO

開發人員所獲得的好處

直接蒙受 SQL Server 2008 利益的,不只是資料庫管理員而已。當中還有許多新功能是為了協助資料庫開發人員而設計。舉凡從幾項全新的 T-SQL 增強功能,到協助開發人員建立和利用資料庫查詢的新元件都是。

許多資料庫開發人員的工作都是負責建立查詢,以傳回應用程式所需的資料。您對 LINQ (Language Integrated Query) 工具可能不陌生,它可以讓資料庫開發人員使用以 Microsoft® .NET 為主的程式設計語言 (而不是標準的 T-SQL 陳述式),對資料庫發出查詢。而 SQL Server 2008 則是提供全新的 LINQ to SQL 提供者,讓開發人員直接對 SQL Server 資料表和資料行發出 LINQ 命令,進一步強化 LINQ 的效能。這一點將可縮短建立新資料查詢所花的時間。

開發人員在針對資料庫進行開發工作時,會使用較高層級的物件來對應個別的資料庫資料表和資料行。這些物件又稱為實體,它們代表資料庫應用程式所需的資料,因此開發人員並不需要了解資料的實際儲存結構和資料庫的結構描述。現在全新的 ADO.NET Entity Framework 就容許開發人員使用這些實體來建立資料庫查詢。將基本資料庫結構抽象化,可以提高開發人員的效率。

SQL Server 2008 針對 T-SQL 提供了許多增強功能,讓資料庫開發人員更有效率。其中一例就是新的 MERGE 陳述式,它容許開發人員在插入資料之前,先檢查該資料是否存在。在執行 INSERT 陳述式之前進行這項檢查,可以更新資料。因此現在無需建立複雜的聯結,只要在單一陳述式就可以更新已經存在的資料,以及插入還不存在的資料。

此外,要將時間和日期資料與合併的 date/time 資料類型相區隔,也不那麼難了。SQL Server 2008 以兩種不同的資料類型,分別處理日期資料和時間資料。採用不同的資料類型可以提升許多查詢的效能,因為您不用再對資料執行任何作業,就可以將它用於查詢中。

資料庫開發人員在建立較新版的資料庫結構時,常常發現自己必須延伸資料庫的結構,才能實作對應的應用程式。而 SQL Server 2008 透過全新的空間資料類型,幫助您解決了這個問題。開發人員可以使用 GEOGRAPHY 和 GEOMETRY 這兩種空間資料類型,將位置特有的資料直接儲存到資料庫中,而不必配合其他標準資料類型來分解資料元素的格式。[圖 5] 的程式碼,就是一個簡單的空間資料表範例。

Figure 5 A simple spatial table

IF OBJECT_ID ( 'Demo_SpatialTable', 'Table' ) IS NOT NULL 
    DROP TABLE Demo_SpatialTable
GO

--Create table to hold spatial data
CREATE TABLE Demo_SpatialTable 
    ( SpatialID int IDENTITY (1,1),
    SpatialInputCol geography, 
    SpatialOutputCol AS SpatialInputCol.STAsText() )
GO

--Insert data into table
INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326));

INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));
GO

--View data to see that data has been converted and stored in col2
SELECT * FROM Demo_SpatialTable

儲存和利用大型二進位物件 (例如文件和媒體檔案),是資料庫開發人員過去常碰到的問題。一般採用的方法是將檔案儲存到資料庫外面,只在資料庫裡面儲存一個連到外部檔案的指標。但是使用這種方法,必須記得在移動檔案時更新指標。

SQL Server 2008 則採用全新的 FILESTREAM 資料類型來處理這個問題。這種資料類型仍將檔案儲存在資料庫外面,但卻將資料視為資料庫的一部分,以保持交易的一致性。這麼一來,就可以使用共用檔案作業,同時繼續維持資料庫的效能和安全性優勢。

那麼商務智慧呢?

過去幾年來 SQL Server 的使用率不斷增加,有一大部分要歸功於商務智慧策的積極採納。其實 SQL Server 早就具備商務智慧功能,只是 SQL Server 2008 又另外發展出新的功能。

舉個例說,當資料存放在資料倉儲時,往往會因為 NULL 值而浪費空間。而存放 NULL 值的資料行,會佔用資料行所定義的資料大小上限的空間。也就是說,含上千 NULL 值的資料行其實沒有存放任何資料,就可能耗用許多 MB 的空間。

但是 SQL Server 2008 採用的疏鬆資料行,能夠在不佔用磁碟任何實體空間的情況下,儲存 NULL 值。由於疏鬆資料行並不會耗用實際的空間,因此包含疏鬆資料行的資料表,實際上可以超越 1,024 個資料行的限制。

SQL Server 2008 另外還推出一套新機制 ─「變更資料擷取」,用來管理需要載入資料倉儲裡面的增量變更。這項機制會擷取變更的資料,並將它置於一組變更資料表中。擷取更新、刪除和插入的資料,將它放在能夠輕鬆取用的儲存結構描述,可以增加從這些資料表載入的資料倉儲數量 — 這與必須建置自訂插入陳述式,試圖在更新資料倉儲之前,找出現有資料列變更的做法完全相反。

總結

本文只是簡單介紹 SQL Server 2008 所提供的各種好處。SQL Server 2008 不但提供了廣泛的全新功能,同時也更新現有的功能,減輕資料庫管理員和資料庫開發人員的負擔。最後要提的是,它也提供了遠優於過去的效能和延展性,以因應要求愈趨嚴苛的資料庫。

Randy Dyess 是 Solid Quality Mentors 的顧問,他擅長於 SQL Server OLTP 系統。Randy 是《TransactSQL Language Reference Guide》的作者,同時也是《MCTS Self-Paced Training Kit:Microsoft SQL Server 2005 Implementation and Maintenance (Exam 70-431)》和許多新聞雜誌文章的合作作者之一。Randy 另外還擔任北德州 SQL Server 使用者小組的專案主任暨 SQL Server MVP。他的部落格位於 blogs.solidq.com/EN/rdyess/default.aspx

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.