SQL Server 2008

新機能

Randy Dyess

 

概要:

  • より強力な管理
  • 向上したパフォーマンスとスケーラビリティ
  • 強化されたセキュリティと可用性
  • 開発者向けの変更点

マイクロソフトは再び、データベース管理者の作業の効率化を約束する SQL Server の新しいバージョンをリリースしました。この最新バージョンは、SQL Server 2008 です。SQL Server 2008 では、さまざまな

新機能と、管理を大幅に強化する機能が提供されます。

使用期間の長短を問わず、SQL Server® 2005 を使用したことがあるデータベース管理者であれば、SQL Server 2008 には日常業務で使用している機能と同じ機能を多数見つけられるでしょう。ただし、この新しいバージョンの SQL Server では、このような使い慣れたツールが強化されていることを実感していただけると思います。既存の機能を基盤にした新機能を使用すると、これまで複雑なデータベース環境でさまざまな機能を使用するために必要だった多数の次善策やカスタマイズを効率よく削減できます。

SQL Server 2008 の新機能として、さまざまなデータベース ジョブのロールが追加されたため、このようなロールを分類することは困難です。トピックごとに機能を分類すると、読者の中には機能 X が明らかにカテゴリ Z に属しているのに、カテゴリ Y に分類されていることを不思議に思われる方もいるでしょう。これは観点の問題であって、分類方法は会社の業務の進め方によって異なります。

たしかに、データベース管理者は、多くの場合いつの間にかさまざまな業務を担当しているものですが、ここでは新機能を次の一般的なカテゴリに沿って分類したいと思います。このカテゴリとは、管理、スケーラビリティ、パフォーマンス、高可用性、セキュリティ、開発、およびビジネス インテリジェンスです。

管理に関する新機能

私のようなデータベース管理者にとって、新しく導入された管理機能により、SQL Server 2008 は非常に楽しみな新製品となっています。新しいポリシーの管理、複数サーバーのクエリ機能、構成サーバー、およびデータ コレクタ/データ管理ウェアハウスの各機能は、数十台から数百台ものサーバー上に数十万個のデータベースが展開されている大規模で複雑なデータベース環境の管理を担当することが多いデータベース管理者にとって、新しい強力な武器を提供しています。

SQL Server 2008 ポリシー管理機能は、Community Technology Preview (CTP) では宣言型管理フレームワークと呼ばれていたもので、これを使用すると、1 つまたは複数のデータベース サーバーに対して構成ポリシーを作成して実行できます。このような構成ポリシーを使用すると、対象のサーバーとデータベースのそれぞれに、標準の構成設定が確実に適用および維持されるようにできます。この機能の例を図 1 に示します。

Figure 1 Data and Log File Location Best Practice ポリシー

Figure 1** Data and Log File Location Best Practice ポリシー **(画像を拡大するには、ここをクリックします)

ポリシーは、事前に定義された一連のファセットから作成されます。各ファセットには、SQL Server 2008 構成設定と制御可能なその他のイベントのサブグループが保持されています。このファセットと条件を組み合わせて、ポリシーを作成します。条件は、ファセットのプロパティ、構成設定、またはファセットに含まれている他のイベントに設定できる値です。

また、条件は、ポリシーのフィルタに使用される値でもあります。ポリシーを特定のデータベースに対してのみ実行するようにする場合は、そのデータベースの名前を含む条件を作成して、この条件をポリシーに追加します。これで、ポリシーはそのデータベースのみに適用されるようになります。SQL Server 2008 ポリシー管理は複雑に見えますが、一度試してみると非常に直感的に使用できることがおわかりいただけるので、ぜひ一度お試しください。

複数サーバーの対話と構成サーバー機能は、複数のサーバーに対してクエリを同時に実行する必要があるときに便利な新機能です。Management Studio にサーバーを登録し、登録したサーバーをグループ化することができます。ポリシーまたはクエリを、ある特定のグループに含まれるすべてのサーバーに対して実行する必要がある場合は、グループを右クリックするだけで操作を実行できます。

さらに、この機能を構成して、1 台のサーバーごとに結果を返すことも、すべての結果セットをマージして 1 つの大きな結果セットを生成することもできます。また、各サーバーの結果を区別できるように、サーバーとデータベース名を結果に含めるかどうかも指定できます。登録したサーバーを、各 Management Studio ではなく、構成サーバーに保存できるのは、大きなメリットです。

またデータ コレクタという別の便利な新しい管理機能もあります。データベース管理者は、多数のサーバーから管理データを収集しなければならないことが往々にしてあり、多くのデータベース管理者は、そのために独自のカスタム ソリューションを作成しています。データ コレクタは、管理関連データの収集作業を容易にする組み込みのメカニズムです。データ コレクタを利用すると、SQL Server エージェントと SQL Server Integration Services (SSIS) を使用して、エラー処理、監査、収集履歴機能がある、データを収集して保存できるフレームワークを作成できます。

データ コレクタでは、SQL Server エージェントと SSIS によって、データへの接続、収集、保存を処理する一連のジョブが作成およびパッケージ化されるため、サードパーティ製のツールやカスタム ジョブと異なり、データ コレクタはほとんどのデータベース管理者が簡単に理解できます (図 2 参照)。管理ウェアハウスと呼ばれる集中管理用の場所にデータが保存されると、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 では、バックアップ ファイルを圧縮することで、このような領域を解放し、運用データに使用できるようにしています。

また、リソース ガバナという機能もあります。この新機能を使用すると、個々のワークロードまたは一群のワークロードが実行時に使用できるリソース量を定義できます。リソース ガバナを使用すると、1 つまたは複数のワークロードが原因でサーバーのリソース不足が発生したり、他のワークロードのパフォーマンスが低下したりすることを心配することなく、同じサーバー上で多数の異なるワークロードを実行できる環境を作成できます。

この機能のメリットは、データベース サーバーで利用できるリソースのすべてをより有効に使用できることです。図 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 は、ロックを行レベルやページ レベルという小さな単位のロックから、テーブル レベルのロックにエスカレートすることで、プロセスが保持するロックの総数を削減しています。ただし、このロックのエスカレートが原因で、問題が発生する可能性があることに注意してください。たとえば、ある 1 つのトランザクションがテーブル全体をロックしていることが原因で、他のトランザクションがこのテーブルを操作できなくなることがあります。

SQL Server 2008 では、テーブルのパーティション分割メカニズムを使用して、テーブル レベルの前にパーティション レベルへのロックのエスカレートを実現しています (このメカニズムは SQL Server 2005 で導入されました)。この中間レベルのロックによって、毎秒数十万件のトランザクションを処理する必要があるシステムで、ロックのエスカレーションによる影響が大幅に軽減されます。

SQL Server 2008 では、クエリがパーティション テーブルを処理するときのパフォーマンスの向上に役立つ、クエリ プロセッサの機能強化もいくつか導入されています。クエリ オプティマイザでは、テーブル レベルでのパーティション分割メカニズムではなく、パーティション ID のみを使用して、個々のインデックスに対する場合と同様に、パーティションに対してクエリのシークを実行できるようになりました。

高可用性に関する新機能

データベース環境がより複雑になり、データベースのサイズが大きくなるにつれて、データベースの可用性を確保することがますます困難になっています。これまで高可用性を実現するために使用してきた従来のメカニズムは、SQL Server 2008 でも提供されています。SQL Server 2008 では、このような機能のいくつかが強化されているだけでなく、いくつかの新機能も追加されています。

SQL Server 2005 では、多くの管理者が、高可用性を実現するために、データベース ミラーリングの実装を始めました。SQL Server 2008 では、データベース ミラーリングに関するさまざまな機能強化が施されました。たとえば、これまでは、データベース ミラーリングを行うと、プリンシパル データベースからミラー データベースにトランザクション ログ データを移動するときに、パフォーマンス上の問題が発生することがありました。その対応策として、SQL Server 2008 では、データを書き込むためにミラーのトランザクション ログにデータの送信を開始する前にデータを圧縮して、プリンシパルのトランザクション ログからミラーのトランザクション ログにネットワークを介して移動される情報量を削減しています。

また、プリンシパル データベース内の破損したデータ ページを修復できるようになりました。エラー 823 とエラー 824 が原因で、プリンシパル データベースのデータ ページが破損している場合、プリンシパル データベースでは、ミラー サーバーから破損したデータ ページの正常なコピーを取得することができます。この正常なデータ ページの要求は、現在プリンシパル データベースにアクセスしているユーザーに意識されることなく、自動的に処理されます。

ホット アド CPU という別の新機能により、サーバー上のデータベースに影響することなく、そのデータベース サーバーに新たに CPU を追加できます。ただし、ホット アド CPU には制限事項があります。この機能を使用するには、64 ビットの Itanium ベースの Windows Server® 2008 Enterprise Edition または Datacenter Edition と、SQL Server 2008 Enterprise Edition を実行している必要があることに注意してください。

セキュリティに関する新機能

SQL Server 2005 では、データ暗号化という形でデータ セキュリティが導入されました。SQL Server 2008 では、拡張キー管理および透過的なデータ暗号化という 2 つの新機能によって、暗号化が大幅に強化されています。

拡張キー管理を使用すると、データベース内だけでなく、サードパーティのソフトウェア モジュールやハードウェア セキュリティ モジュールなどデータベース外も含め、暗号化インフラストラクチャで使用されるキーを安全に保存できる拡張構造を実現できます。

透過的なデータ暗号化を使用すると、コード内の関数の結果だけでなく、データベースの暗号化を可能にすることで、より柔軟にデータを暗号化できます。結果として、管理者は、データ レベルでの暗号化を実行する際にデータベース構造やアプリケーション コードに対して多くの変更を行う必要がなくなります。図 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 のいくつかの新しい強化機能や、データベース クエリを作成および使用する際に役立つ新しいコンポーネントなどがあります。

多くのデータベース開発者は、アプリケーションに必要なデータを返すために必要とされるクエリを作成しています。おそらく、標準の T-SQL ステートメントではなく、Microsoft® .NET ベースのプログラミング言語を使用して、データベースをクエリできるようにする LINQ (統合言語クエリ) ツールについてはよくご存知だと思います。SQL Server 2008 では、LINQ コマンドを SQL Server のテーブルや列に対して直接発行できるようにする LINQ to SQL という新しいプロバイダを提供することで、LINQ を強化しています。このプロバイダにより、新しいデータ クエリの作成にかかる時間が短縮されます。

データベースを使用する開発では、個々のデータベース テーブルや列にマップする上位オブジェクトが使用されます。このようなオブジェクトはエンティティとも呼ばれ、データベース アプリケーションで必要なデータを表現しています。そのため、開発者は、データベースのスキーマやデータが格納されている実際の構造を理解する必要がありません。新しい ADO.NET Entity Framework を使用すると、このようなエンティティを使用してデータベース クエリを作成できます。基盤のデータベース構造の抽象化により、開発者の生産性が向上します。

SQL Server 2008 では、データベース開発者の効率を向上するさまざまな機能強化が T-SQL に施されています。その 1 つには、MERGE という新しいステートメントがあります。このステートメントを使用すると、データの挿入を行う前にデータの存在を確認できます。この確認を INSERT ステートメントの実行前に行うと、データを更新することが可能になります。データが存在する場合は更新し、存在しない場合はデータを挿入するという処理を行うために、複雑な結合を作成する必要はなく、これらの一連の処理を 1 つのステートメントでまとめて行えるようになりました。

また、複合的なデータ型の日付と時刻データ型から、時刻データと日付データを分離しやすくなりました。SQL Server 2008 では、日付データと時刻データを処理する 2 つの個別のデータ型が導入されています。個別のデータ型を使用することで、データをクエリで使用するために事前に操作する必要がなくなったため、多くのクエリのパフォーマンスが向上します。

新しいデータベース構造を作成するときには、データベースの構造を拡張して、マッピング アプリケーションを実装することが多くあります。SQL Server 2008 では、この問題の対応策として新しい空間データを導入しています。GEOGRAPHY および GEOMETRY という 2 つの空間データ型では、場所固有のデータを直接データベースに保存できるので、このようなデータ要素を他の標準のデータ型に合うように分割する必要がありません。図 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

これまでデータース開発者が抱えていた非常に一般的な問題の 1 つは、ドキュメント ファイルやメディア ファイルのようなバイナリ ラージ オブジェクトをどのようにして保存して、使用するかということでした。この問題の一般的な対策としては、ファイルをデータベースの外部に保存して、データベースには、その外部ファイルへのポインタのみを保存する方法が使用されていました。ただし、この方法では、ファイルを移動するときには、忘れずにポインタを更新する必要があります。

SQL Server 2008 では、FILESTREAM という新しいデータ型によりこの問題に対応しています。このデータ型を使用すると、ファイルをデータベースの外部に保存しても、データベースでは、外部ファイルのデータがトランザクションの一貫性を確保する対象として扱われます。その結果、一般的なファイル操作が可能でありながら、データベースのパフォーマンスとセキュリティのメリットも得られます。

ビジネス インテリジェンスに関する新機能

この数年間の SQL Server の導入拡大の大きな原動力となっているのは、ビジネス インテリジェンス戦略の採用です。ビジネス インテリジェンス機能は、SQL Server にとって新しいものではありませんが、SQL Server 2008 ではテーブルにいくつかの新機能を追加しています。

たとえば、データをデータ ウェアハウスに保存すると、NULL 値により領域が無駄に使用されることが多くあります。NULL 値を保持する列では、列に定義されている最大データ サイズ分の領域が使用されます。つまり、数千もの NULL 値を保持する列では、データを実際に保持していないにもかかわらず、数 MB 分もの領域を使用している可能性があります。

SQL Server 2008 では、ディスク上の物理的な領域を使用せずに NULL 値を保持できるスパース列が導入されました。スパース列は実際の領域を使用しないため、スパース列を含むテーブルは、制限である 1,024 列を超える列数を保持できます。

SQL Server 2008 では、データ ウェアハウスに読み込む必要がある増分 (変更内容) を管理するための新しいメカニズムである Change Data Capture も導入されています。このメカニズムでは、変更されたデータをキャプチャして、一連の変更テーブルに保存します。更新、削除、および挿入されたデータを使いやすいストレージ スキーマにキャプチャすることで、テーブルからのデータ ウェアハウスへの増分読み込みを実現しています。データ ウェアハウスを更新する前に、既存のデータ行に加えられた変更を特定するためのカスタムの Insert ステートメントを作成する必要はありません。

まとめ

この記事では、SQL Server 2008 の機能について簡単に概説しました。SQL Server 2008 では、データベース管理者とデータベース開発者の両方に役立つ、さまざまな新機能と既存機能の強化が提供される予定です。その結果、かつてないほど要件が厳しい現在のデータベースのパフォーマンスとスケーラビリティが大幅に向上されるでしょう。

Randy Dyess は Solid Quality Mentors のよき指導者で、専門は SQL Server OLTP システムです。『Transact-SQL Language Reference Guide』の著者であり、『MCTS Self-Paced Training Kit: Microsoft SQL Server 2005 Implementation and Maintenance (Exam 70-431)』の共著者であるほか、数々の雑誌やニュースレターの記事を執筆しています。**また、North Texas SQL Server Users Group のプログラム ディレクターも務め、SQL Server の MVP 資格保有者でもあります。blogs.solidq.com/EN/rdyess/default.aspx では、ブログも公開されています。

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; 許可なしに一部または全体を複製することは禁止されています.