構成前のデータベースの最適化

BizTalk Server環境でSQL Serverが果たす重要な役割のため、最適なパフォーマンスを実現するために構成/チューニングSQL Server最も重要です。 SQL Serverが適切に動作するように調整されていない場合、BizTalk Serverによって使用されるデータベースがボトルネックになり、BizTalk Server環境の全体的なパフォーマンスが低下します。 このトピックでは、BizTalk ServerをインストールしてBizTalk Serverデータベースを構成する前に従う必要がある、いくつかのSQL Serverパフォーマンス最適化について説明します。

NTFS ファイルの割り当て単位を設定する

SQL Serverは、そのデータをエクステントに格納します。これは、物理的に連続する 8K ページ (64 KB) のコレクションです。 そのため、ディスクのパフォーマンスを最適化するには、「 展開前 I/O のベスト プラクティス」の「ディスク構成のベスト プラクティス」で説明されているように、NTFS 割り当てユニットのサイズを 64 KB に設定します。

SQL Serverのバージョンとエディションに関する考慮事項

SQL Serverのさまざまなバージョンとエディションには、BizTalk Server環境のパフォーマンスに影響を与える可能性のあるさまざまな機能が用意されています。 たとえば、高負荷の条件下では、32 ビット バージョンのSQL Serverで使用できるデータベース ロックの数を超える可能性があり、これは BizTalk ソリューションのパフォーマンスに悪影響を及びます。 テスト環境で "ロック解除" エラーが発生している場合は、MessageBox データベースを 64 ビット バージョンのSQL Serverに格納することを検討してください。 64 ビット バージョンの SQL Server では、使用できるロックの数が大幅に増えます。

BizTalk 環境に必要なデータベース エンジンの機能を決定するときは、次の表を考慮してください。 クラスタリングのサポート、BizTalk Serverログ配布のサポート、または Analysis Services のサポートを必要とする大規模なエンタープライズ レベルのソリューションの場合は、SQL Server データベースをホストするために SQL Server Enterprise Edition が必要です。

SQL Server エディションでサポートされる機能の完全な一覧については、「SQL Server エディションとサポートされる機能」を参照してください。

データベース計画に関する考慮事項

高速ストレージ (高速 SAN ディスクや高速 SCSI ディスクなど) でSQL Server データベースをホストすることをお勧めします。 RAID 5 は書き込み速度が遅いため、RAID 5 の代わりに RAID 10 (1+0) をお勧めします。 新しい SAN ディスクには非常に大きなメモリ キャッシュがあるため、このような場合、RAID の選択はあまり重要ではありません。 パフォーマンスを向上させるために、データベースとそのログ ファイルを異なる物理ディスクに配置できます。

記憶域ネットワーク (SAN) を使用する場合は、ホスト バス アダプター (HBA) キューの深さを調整することも検討してください。 これは I/O スループットに大きな影響を与える可能性があり、SQL Serverでは既定の値が不十分である可能性があります。 最適な値を判断するにはテストが必要ですが、特定のベンダーの推奨事項がない場合、キューの深さ 64 は一般に適切な開始点として受け入れられます

SQL Serverの最新の Service Pack と累積的な更新プログラムをインストールする

最新のサービス パックとSQL Serverの最新の累積的な更新プログラム、および最新の.NET Framework サービス パックをインストールします。

BizTalk ServerとSQL Serverの両方に SQL Service Pack と累積的な更新プログラムをインストールする

SQL Serverのサービス パックまたは累積的な更新プログラムをインストールする場合は、BizTalk Server コンピューターに Service Pack または累積的な更新プログラムもインストールします。 BizTalk Serverでは、SQL Server サービス パックと累積的な更新プログラムによって更新される SQL クライアント コンポーネントが使用されます。

高速ソリッド ステート ドライブ (SSD) を使用して、SQL Server tembdb を収容することを検討してください

TempDB を収容するには、1 つ以上のソリッド ステート ディスク (SSD) ドライブを使用することを検討してください。 SSD ドライブは、従来のハード ドライブよりも優れたパフォーマンス上の利点を提供し、メインストリーム市場に参入するにつれて価格が急速に下がっています。 TempDB のパフォーマンスは多くの場合、全体的なSQL Serverパフォーマンスの重要な要因であるため、特にパフォーマンスが重要なエンタープライズ SQL Server アプリケーションを実行する場合は特に、ドライブの初期コストが全体的なSQL Serverパフォーマンスの向上によって迅速に回収されます。

SQL Server 2008 R2 データ コレクターと管理Data Warehouseの実装を検討する

SQL Server 2008 R2 では、新しいデータ コレクターと管理Data Warehouseを使用して、テストおよび傾向分析のために環境/データベースのパフォーマンス関連データを収集できます。 データ コレクターは、収集されたすべてのデータを、指定された管理Data Warehouseに保持します。 これはパフォーマンスの最適化ではありませんが、これはパフォーマンスの問題の分析に役立ちます。

Windows Lock Pages In Memory 特権のSQL Serverに使用するアカウントを付与する

SQL Server サービス アカウントに Windows Lock Pages in Memory 特権を付与します。 これは、物理メモリ内のバッファー プールに割り当てられているメモリをロックすることで、Windows オペレーティング システムがSQL Server プロセスのバッファー プール メモリをページングしないようにするために行う必要があります。

ラボ環境では、Windows ポリシーの [メモリ内のページをロック する] オプションが既定で有効になっています。 「 メモリ内のページのロック オプションを有効にする」を参照してください。

重要

SQL Server サービス アカウントに Windows Lock Pages in Memory 特権を付与する場合は、特定の制限が適用されます。 以下を参照してください。

SQL Server サービス アカウントにSE_MANAGE_VOLUME_NAME権限を付与する

SQL Server サービスを実行しているアカウントに "ボリューム メンテナンス タスクの実行" Windows 特権があることを確認するか、またはサービスが属するグループに属していることを確認します。 これにより、データベースを自動拡張する必要がある場合に最適なパフォーマンスを保証するファイルの初期化を瞬時に行えます。

最小サーバー メモリと最大サーバー メモリの設定

BizTalk Server データベースをホストするSQL Serverを実行しているコンピューターは、SQL Serverの実行専用である必要があります。 BizTalk ServerデータベースをホストするSQL Serverを実行しているコンピューターがSQL Serverの実行専用である場合は、各SQL Server インスタンスの "最小サーバー メモリ" オプションと "max server memory" オプションを設定して、SQL Serverに割り当てる固定量のメモリを指定することをお勧めします。 この場合は、"min server memory" と "max server memory" を同じ値に設定する必要があります (SQL Serverが使用する物理メモリの最大量と同じです)。 これにより、これらの値を動的に管理SQL Server、それ以外の場合に使用されるオーバーヘッドが軽減されます。 SQL Serverを実行している各コンピューターで次の T-SQL コマンドを実行して、SQL Serverに割り当てるメモリの固定量を指定します。

sp_configure ‘Max Server memory (MB)’,(max size in MB)  
sp_configure ‘Min Server memory (MB)’,(min size in MB)  

SQL Serverのメモリ量を設定する前に、Windows Server に必要なメモリを物理メモリの合計から減算して、適切なメモリ設定を決定します。 これは、SQL Serverに割り当てることができる最大メモリ量です。

Note

BizTalk Server データベースをホストするSQL Serverを実行しているコンピューターが Enterprise Single Sign-On Master Secret Server もホストしている場合は、エンタープライズ シングル Sign-On サービスを実行するのに十分なメモリがあることを確認するために、この値を調整する必要がある場合があります。 マスター シークレット サーバーの高可用性を提供するために、SQL Server クラスターで Enterprise Single Sign-On サービスのクラスター化されたインスタンスを実行することは珍しい方法ではありません。 マスター シークレット サーバーのクラスタリングに関するページを参照してください。

tempdb データベースを、BizTalk Serverで使用される各SQL Server インスタンス上の等しいサイズの複数のデータ ファイルに分割します。

SQL Serverで使用される比例フィル アルゴリズムはデータ ファイルのサイズに基づいているため、tempdb に使用されるデータ ファイルのサイズが等しいことを確認することが重要です。 データ ファイルが等しくないサイズで作成された場合、プロポーショナル フィル アルゴリズムでは、すべてのファイル間で割り当てを分散するのではなく、GAM 割り当てに最も大きなファイルが使用されるため、複数のデータ ファイルを作成する目的が失われます。 tempdb データ ファイルの最適な数は、tempdb で見られるラッチ競合の程度によって異なります。 一般的な経験則として、データ ファイルの数は、CPU の数が 8 以下のプロセッサ コア/CPU の数と等しい必要があります。 CPU が 8 つを超えるサーバーの場合は、CPU の数の半分のデータ ファイルを作成します (再び、ラッチの競合が発生しているだけです)。

ラボ環境では、次のスクリプトを使用して、8 つの TempDB データ ファイルを作成しました。各 TempDB データ ファイルのファイル サイズは 1024 MB で、拡張は 100 MB、ログ ファイルは 512 MB で、100 MB の拡張が含まれています。 データ ファイルはドライブ H: に移動され、ログ ファイルはドライブ I: に移動されます。

重要

このスクリプトは「現状のまま」で提供され、デモまたは教育目的のみを目的としており、ご自身の責任で使用されます。 このスクリプトの使用は Microsoft ではサポートされていません。Microsoft は、このスクリプトの適合性について保証しません。

--<<<<<<<<<<----------------------------------------------------------------->>>>>>>>>>--  
-- Use of included script samples are subject to the terms specified at   
-- http://www.microsoft.com/info/cpyright.htm  
--<<<<<<<<<<----------------------------------------------------------------->>>>>>>>>>--  
--***Instructions***  
-- 1. If running the script from a remote server, change the context in SSMS to target instance  
-- 2. Enable SQLCMD mode (add & click toolbar button or toggle by clicking Query > SQLCMD Mode)  
-- 3. Commence execution of scripts (recommend running statements discretely to more easily remedy potential problems)  
-- 4. Examine servername & temp configuration  
-- 5. If necessary, 1) Replace instance name in path to reflect target instance *all throughout script*  
      --            2) Modify root drives to reflect drives designated for data & log (folder creation *and* ALTER DB statements)  
-- 6. Resume script execution  
-- 7. If necessary, create new folders  
-- 8. Modify/Add data & log files   
-- 9. Recycle SQL service using sqlservermanager10.msc  
--10. Examine results & if appropriate, delete original tempdb data log files   
 --(if they were "moved", the original files aren't automatically deleted)  
  
--<<<<<<<<<<----------------------------------------------------------------->>>>>>>>>>--  
--1. If running the script from a remote server, change the context in SSMS to target instance  
--2. Enable SQLCMD mode (add & click toolbar button or toggle by clicking Query > SQLCMD Mode)  
--3. Commence execution of scripts (recommend running statements discretely to more easily remedy potential problems)  
--4. Examine servername & temp configuration  
SELECT @@SERVERNAME  
EXEC dbo.sp_helpdb tempdb  
--tempdev   1   C:\tempdb.mdf   PRIMARY  8192 KB  Unlimited  10%  data only  
--templog   2   C:\templog.ldf  NULL      512 KB  Unlimited  10%  log only  
GO  
--5. If necessary, 1) Replace instance name in path to reflect target instance *all throughout script*  
     --            2) Modify root drives to reflect drives designated for data & log (folder creation *and* ALTER DB statements)  
--6. Resume script execution  
--7. If necessary, create new folders  
--!!md H:\MSSQL10.<instance>  
--!!md H:\MSSQL10.<instance>\MSSQL  
--!!md H:\MSSQL10.<instance>\MSSQL\DATA  
GO  
-- 8. Modify/Add data & log files   
 --note: even if the out-of-box mdf is already where it needs to be,   
   --the first command is necessary to modify size & filegrowth  
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev  , FILENAME = 'H:\tempdb.mdf'   , SIZE = 1024MB , FILEGROWTH = 100MB)  
ALTER DATABASE tempdb ADD FILE    (NAME = tempdat2 , FILENAME = 'H:\tempdat2.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)  
ALTER DATABASE tempdb ADD FILE    (NAME = tempdat3 , FILENAME = 'H:\tempdat3.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)  
ALTER DATABASE tempdb ADD FILE    (NAME = tempdat4 , FILENAME = 'H:\tempdat4.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)  
ALTER DATABASE tempdb ADD FILE    (NAME = tempdat5 , FILENAME = 'H:\tempdat5.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)  
ALTER DATABASE tempdb ADD FILE    (NAME = tempdat6 , FILENAME = 'H:\tempdat6.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)  
ALTER DATABASE tempdb ADD FILE    (NAME = tempdat7 , FILENAME = 'H:\tempdat7.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)  
ALTER DATABASE tempdb ADD FILE    (NAME = tempdat8 , FILENAME = 'H:\tempdat8.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)  
GO  
ALTER DATABASE tempdb MODIFY FILE (NAME = templog , FILENAME = 'I:\templog.ldf', SIZE =  512MB , FILEGROWTH = 100MB)  
GO  
--8b. Modify log file:  modify drive & instance name to reflect designated destination for tempdb log   
--!!md I:\MSSQL10.<instance>  
--!!md I:\MSSQL10.<instance>\MSSQL  
--!!md I:\MSSQL10.<instance>\MSSQL\DATA  
GO  
-- 9. Recycle SQL service in SQL Server Services node of sqlservermanager10.msc  
    --note, if running script from a UNC share, SSMS will report an error,   
      --but SQL Server Configuration Manager will open if its location is in %path%  
!!sqlservermanager10.msc  
  
--10. Examine results & if appropriate, delete original tempdb data log files   
 --(if they were "moved", the original files aren't automatically deleted)  
EXEC dbo.sp_helpdb tempdb  
--!!del C:\tempdb.mdf     
--!!del C:\templog.ldf  
GO  
  

ラッチの競合に関する問題を特定するには、「SQL Server 2008 アクティビティ モニター」または「SQL Server パフォーマンスの監視」で説明されているSQL Server 2005 パフォーマンス ダッシュボード レポートを使用します。

プロセス アフィニティSQL Server手動で設定する

[プロセス アフィニティ] オプションを使用すると、16 個以上の CPU を持つ NUMA 以外のコンピューターで実行されているハイエンドのエンタープライズ レベルのSQL Server環境でパフォーマンスを向上させることができます。 これは、MessageBox データベース内の共有テーブルで競合が発生する高スループットの BizTalk 環境で特に当てはまります。 ラボ環境で使用されたSQL Server コンピューターは NUMA 対応ではなく、16 コアを備えていたため、パフォーマンスを最適化するために、次のコマンドを使用してプロセス アフィニティを設定しました。

SQL Server プロセス アフィニティを 0 から 15 に手動で設定するには

ALTER SERVER CONFIGURATION  
SET PROCESS AFFINITY CPU = 0 to 15  

詳細については、「 ALTER SERVER CONFIGURATION (Transact-SQL)」を参照してください。

MSDTC の構成

SQL ServerとBizTalk Serverの間のトランザクションを容易にするには、Microsoft 分散トランザクション コーディネーター (MS DTC) を有効にする必要があります。 SQL Serverで MSDTC を構成するには、オペレーティング システムのパフォーマンス向上に関する一般的なガイドラインに関するトピックを参照してください。

SQL Serverのすべてのインスタンスのスタートアップ パラメーターとしてトレース フラグ T1118 を有効にする

トレース フラグ –T1118 を実装すると、ほぼすべての単一ページ割り当てを削除することで、SQL Server インスタンス間の競合を減らすことができます。 詳細については、「 KB 328551: PRB: tempdb データベースのコンカレンシーの機能強化」を参照してください。

並列処理の最大次数、SQL Server統計、またはデータベース インデックスの再構築と最適化の既定のSQL Server設定を変更しないでください

SQL Server インスタンスがBizTalk Serverデータベースを格納する場合は、変更すべきではない特定のSQL Server設定があります。 具体的には、並列処理の最大次数SQL Server、MessageBox データベースのSQL Server統計、およびデータベース インデックスの再構築と最適化の設定は変更しないでください。 変更すべきでないSQL Server設定に関するページを参照してください。

参照

データベース パフォーマンスの最適化