高パフォーマンスの SQL Server インスタンスの作成

このチュートリアルでは、パフォーマンスが最適化されている SQL Server で実行する Google Compute Engine VM インスタンスを作成する方法について説明します。このチュートリアルでは、インスタンスを作成してから、Google Cloud Platform 上で最適なパフォーマンスを発揮するように SQL Server を設定する手順について説明します。システムのパフォーマンスの調整に役立つ設定オプションについていくつか説明します。

このチュートリアルでは SQL Server Standard Edition 2014 を使用します。そのため、このガイドで示すすべての設定オプションがすべての人にとって動作するものではなく、全てのワークロードにおいて顕著なパフォーマンス上の利点が得られるわけではありません。

目標

  • Compute Engine インスタンスとディスクの設定。
  • Windows オペレーティング システムの設定。
  • SQL Server の設定。

費用

このチュートリアルでは、以下を含む、Cloud Platform の課金対象となるコンポーネントを使用しています。

  • Google Compute Engine ハイメモリ インスタンス
  • Compute Engine SSD 永続ディスク ストレージ
  • Compute Engine ローカル SSD ディスク ストレージ
  • SQL Server Standard の事前設定されたイメージ

料金計算ツールは予想使用量に基づいて費用の見積もりを生成できます。このリンクは、このチュートリアルで使用されるプロダクトの費用の見積もりを示します。これは、1 時間あたり 4 米ドル以上および 1 か月あたり 3000 ドル以上のコストがかかる可能性があります。 Cloud Platform を初めて使用する方は、無料トライアルをご利用いただけます。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

  3. プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

  4. ローカルマシンで Windows を使用していない場合は、FusionLabs の Chrome RDP など、サードパーティの RDP クライアントをインストールしておきます。

Compute Engine インスタンスとディスクを作成する

SQL Server および次の 2 つの永続ディスクを使用して Compute Engine インスタンスを作成します。

  • ローカル SSD は、tempdb と Windows ページファイル向けのパフォーマンスの高いディスクです。

    ローカル SSD を使用する場合に注意すべき重要な考慮事項がいくつかあります。Windows からインスタンスをシャットダウンしたり、API を使用してリセットしたりすると、ローカル SSD は削除されます。このアクションによりインスタンスが起動できなくなります。マシンを再度実行するには、永続ディスクの接続を解除して、それらを使用して新しいインスタンスを作成してから、新しいローカル SSD を定義します。また、起動後に新しいディスクをフォーマットして再起動する必要もあります。したがって、重要なデータをローカル SSD に永続的に格納しないでください。または、ローカル SSD の再構築の準備ができてからインスタンスの電源をオフにしてください。

  • SSD 永続ディスクは、データベース ファイル向けの高パフォーマンスのストレージとなります。

    SSD 永続ディスクのパフォーマンスは、計算で使用する CPU の数とディスクのサイズによって異なります。32 個の vCPU と 1 TB ディスクの場合、40,000 オペレーション/秒の読み取りまたは 30,000 オペレーション/秒の書き込みでパフォーマンスがピークになります。読み取りと書き込みの持続スループットの合計は、それぞれ 800 MB/秒と 400 MB/秒になります。これらの測定値は、仮想マシンに接続されるすべての永続ディスク(C:\` drive. を含む)の合計を表します。 This is why you should create a local SSD to offload all the IOPS needed for the paging file,そのため、ページング ファイル、tempdb、ステージング データ、バックアップに必要なすべての IOPS をオフロードするためにローカル SSD を作成する必要があります。

ディスク パフォーマンスの詳細については、永続ディスクとローカル SSD のパフォーマンスの最適化を参照してください。

Compute Engine インスタンスを作成する

Windows Server 2012 に SQL Server 2014 Standard がプリインストールされた VM を作成します。

  1. Google Cloud Platform Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックします。

  3. インスタンスに「ms-sql-server」という名前を付けます。

  4. [マシンタイプ] を [vCPU x 16、メモリ 104 GB、n1-highmem-16] に設定します。

  5. [ブートディスク] セクションの [変更] をクリックし、ブートディスクの構成を開始します。

  6. [アプリケーション イメージ] タブで、[SQL Server 2014 Standard on Windows Server 2012 R2] を選択します。

  7. [ブートディスクの種類] セクションで、[標準の永続ディスク] を選択します。

  8. [サイズ(GB)] セクションで、ブートディスクのサイズを 50 GB に設定します。

  9. [選択] をクリックします。

  10. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] を展開します。

  11. [ディスク] をクリックします。

  12. [追加ディスク] で [新しいディスクを追加] をクリックし、新しい追加ディスクを作成します。

  13. [名前] フィールドを変更せずに、そのままにしておきます。

  14. [タイプ] で [ローカル SSD スクラッチ ディスク(最大 8 ディスク)] を選択します。

  15. [完了] をクリックしてこのディスクの作成を完了します。

  16. [追加ディスク] で再度 [新しいディスクを追加] をクリックし、2 つ目の追加ディスクを作成します。

  17. [名前] フィールドを変更せずに、そのままにしておきます。

  18. [タイプ] で [SSD 永続ディスク] を選択します。

  19. [ソースの種類] で [空のディスク] を選択します。

  20. [完了] をクリックして 2 つ目のディスクの作成を完了します。

  21. [作成] をクリックしてインスタンスを作成します。

Windows を設定する

これで SQL Server を実行するインスタンスが作成されたので、インスタンスに接続して Windows オペレーティング システムを設定します。その後、後のセクションで、SQL Server の設定について説明します。

インスタンスに接続する

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [名前] 列でインスタンスの名前 ms-sql-server をクリックします。

  3. インスタンスの詳細ページの上部で、[Windows パスワードを設定] ボタンをクリックします。

  4. ユーザー名を指定します。

  5. [設定] をクリックして、この Windows インスタンスの新しいパスワードを生成します。

  6. インスタンスにログインできるように、ユーザー名とパスワードを記録しておきます。

  7. RDP を使用して、次のようにインスタンスに接続します。

    • FusionLabs の Chrome RDP をインストールしている場合は、インスタンスの詳細ページの上部にある [RDP] ボタンをクリックします。
    • 別の RDP クライアント(Windows のリモート デスクトップ接続など)を使用している場合は、[RDP] ボタンのオーバーフロー メニューをクリックして RDP ファイルをダウンロードします。RDP ファイルをクライアントを使用して開きます。

ディスク ボリュームを設定する

ボリュームを作成してフォーマットします。

  1. [スタート] メニューで、「サーバー管理」を検索して開きます。
  2. [ファイル サービスと記憶域サービス] を選択して、[ディスク] を選択します。

    ローカル SSD の名前は Google EphemeralDisk です。ローカル SSD と永続 SSD の両方に、次のように Unknown パーティションのマークが付けられます。

    Google EphemeralDisk エントリを検索する

  3. 「Google Ephemeral Disk」という名前の 375 GB のローカル SSD ディスクを右クリックして、[新しいボリューム] を選択します。

  4. デフォルト値のまま続行して、ディスクラベルに P: を選択します。これは、ページング ファイルのディスクとなるためです。

  5. ファイル システムを設定する手順では、[アロケーション ユニット サイズ] を 8192 に変更して、[ボリューム ラベル] に「pagefile」と入力します。

    新しいボリューム ウィザード

  6. 2 番目の SSD 永続ディスクについても、次の 3 つの変更点を除いて同じ手順を繰り返します。

  • ドライブ文字に D: を選択します。
  • [アロケーション ユニット サイズ] を [32k] に設定します。

    Microsoft は SQL Server のデータおよびログディスクを 64k としてフォーマットすることを推奨していますが、GCP 内部の永続ディスク技術は 32k に適合します。この変更により、永続ディスクの IO 制限にカウントされるディスクのオペレーション回数も減少します。

  • [ボリューム ラベル] に「sqldata」と入力します。

Failed to mount path - Invalid Parameter エラーを修正する

このエラーが発生する場合の手順は次のとおりです。

  1. [閉じる] をクリックします。
  2. 右上のディスクの更新アイコンをクリックします。
  3. リストで 500 GB の永続ディスクをクリックします。
  4. [ボリューム] パネルで、ボリュームを右クリックして [ドライブ文字およびアクセス パスの管理] を選択します。

    ドライブ文字およびアクセス パスの管理

  5. ドライブ文字に D: を選択します。

  6. [OK] をクリックします。

Windows ページング ファイルを移動する

これで新しいボリュームが作成されマウントされたので、Windows ページング ファイルをローカル SSD に移動して、永続ディスク IOPS を解放し、仮想メモリのアクセス時間を短縮します。

  1. [スタート] メニューから、[システムの詳細設定の表示] を検索してダイアログを開きます。
  2. [詳細] タブをクリックして、[パフォーマンス] セクションで [設定] をクリックします。
  3. [仮想メモリ] セクションで、[変更] ボタンをクリックします。
  4. [すべてのドライブのページング ファイルのサイズを自動的に管理する] チェックボックスをオフにします。システムではページング ファイルが C:\ ドライブ上にすでに設定されているため、これを移動する必要があります。
  5. C: をクリックして、[ページング ファイルなし] ラジオボタンをオンにします。
  6. [設定] ボタンをクリックします。
  7. 新しいページング ファイルを作成するには、P: ドライブをクリックして、[システム管理サイズ] ラジオボタンをオンにします。
  8. [設定] ボタンをクリックします。
  9. [OK] を 3 回クリックして、詳細設定のプロパティを終了します。

    Microsoft Support は仮想メモリ設定の追加のヒントを公開しています。

電源プロファイルを設定する

電源プロファイルを Balanced ではなく High-Performance に設定します。

  1. [スタート] メニューから、[電源プランの選択] を検索して、電源プラン オプションを開きます。
  2. [高パフォーマンス] ラジオボタンをオンにします。
  3. ダイアログを終了します。

SQL Server を設定する

SQL Server Management Studio を使用して、大部分の管理タスクを実行します。SQL Server 2014 の事前設定されたイメージは、すでにインストールされている Management Studio に付属していますが、SQL Server 2016 イメージを使用している場合は、これを手動でダウンロードしてインストールする必要があります。インストール後に、Management Studio を起動して [接続] をクリックし、デフォルト データベースに接続します。

データとログファイルを移動する

SQL Server の事前設定されたイメージはすべて、システム データベースを含めて C:\ ドライブにインストールされています。C:\` drive, including the system databases. In order to optimize your setup, move those files to the new 設定を最適化するために、それらのファイルを作成した新しい D:\ ドライブに移動します。また、忘れずにすべての新しいデータベースを D:\ ドライブに作成してください。SSD 永続ディスクを使用しているため、データファイルとログファイルを別個のディスク パーティションに格納する必要はありません。

インストールを予備ディスクに移動するには、インストーラを使用するか、ファイルを手動で移動するかの 2 つの方法があります。

インストーラを使用する

インストーラを使用するには、c:\setup.exe を実行して予備ディスク上の新しいインストール パスを選択します。

ファイルを手動で移動する

データとログファイルを同じボリュームに保存するために、システム データベースを移動して、SQL Server を設定します。

  1. D:\SQLData という名前の新しいフォルダを作成します。
  2. コマンド ウィンドウを開きます。
  3. 次のコマンドを入力して、NT Service\MSSQLSERVER に全権限を付与します。

    icacls D:\SQLData /Grant "NT Service\MSSQLServer":(OI)(CI)F
    
  4. Management Studio と次のガイドを使用して、システム データベースを移動し、新しいデータベースのデフォルトのファイル位置を変更します。

  5. レポート サーバー機能を使用する予定の場合、ReportServer ファイルと ReportServerTempDB ファイルも移動します。

マスター ファイルを移動して再起動した後、モデルと MSDB データベースの新しい場所を指すようにシステムを構成する必要があります。以下に、Management Studio で実行するヘルパー スクリプトを示します。

ALTER DATABASE model MODIFY FILE ( NAME = modeldev , FILENAME = 'D:\SQLData\model.mdf' )
ALTER DATABASE model MODIFY FILE ( NAME = modellog , FILENAME = 'D:\SQLData\modellog.ldf' )
ALTER DATABASE msdb MODIFY FILE ( NAME = MSDBData , FILENAME = 'D:\SQLData\MSDBData.mdf' )
ALTER DATABASE msdb MODIFY FILE ( NAME = MSDBlog , FILENAME = 'D:\SQLData\MSDBLog.ldf' )

これらのコマンドを実行してから、次を実行します。

  1. services.msc スナップインを使用して、SQL Server データベース サービスを停止します。
  2. Windows のファイル エクスプローラを使用して、物理ファイルを Master データベースが配置されている C:\ ドライブから D:\SQLData ディレクトリに移動します。C:\` drive where thedatabase was located to the
  3. SQL Server データベース サービスを開始します。

システム権限を設定する

システム データベースを移動してから、設定をさらに変更して、作成された Windows ユーザー アカウントの権限を使用して NT Service\MSSQLSERVER という名前の SQL Server プロセスを開始します。

Lock Pages in Memory 権限を付与する

グループ ポリシーの Lock Pages in Memory 権限により、Windows がページを物理メモリから仮想メモリに移動しないようにします。物理メモリを解放して整理するために、Windows は古く、ほとんど変更されないページをディスク上の仮想メモリ ページング ファイルにスワップしようとします。

SQL Server は、テーブル構造、実行プラン、キャッシュされたクエリなどの重要な情報をメモリに格納します。この情報の一部はほとんど変更されないため、ページング ファイルの対象となります。この情報がページング ファイルに移動されると、SQL Server のパフォーマンスが低下することがあります。SQL Server のサービス アカウントのグループ ポリシーの Lock Pages in Memory 権限により、このスワッピングが行われないようにします。

手順は次のとおりです。

  1. [スタート] をクリックして、「グループ ポリシーの編集」を検索してコンソールを開きます。
  2. [ローカル コンピューター ポリシー] > ** [コンピューターの構成] ** > [Windows 設定] > [ローカル ポリシー] > [ユーザー権利の割り当て] を展開します。
  3. [メモリ内のページのロック] を検索してダブルクリックします。
  4. [ユーザーまたはグループの追加] をクリックします。
  5. 「NT Service\MSSQLSERVER」を検索します。
  6. 複数の名前が表示される場合、MSSQLSERVER の名前をダブルクリックします。
  7. ** [OK] ** を 2 回クリックします。
  8. [グループ ポリシー エディター] コンソールを開いたままにします。

ページのロック

Perform volume maintenance tasks 権限を付与する

デフォルトでは、アプリケーションが Windows のディスク スペースのスライスを要求すると、オペレーティング システムはディスク スペースの適切なサイズのチャンクを配置してから、それを処理してアプリケーションに戻す前にディスクのチャンク全体をゼロアウトします。SQL Server ではファイルが増大してディスク スペースを占めてしまいがちであるため、この動作は最適ではありません。

ディスク スペースをアプリケーションに割り当てるためには、多くの場合簡易ファイル初期化と呼ばれる別の API が用意されています。残念ながらこの設定はデータファイルに対してしか動作しません。ログファイルの増大については後のセクションで説明します。簡易ファイル初期化には、SQL Server プロセスを実行するサービス アカウントに Perform volume maintenance tasks という別のグループ ポリシー権限を設定する必要があります。

  1. グループ ポリシー エディターで、「ボリュームの保守タスクを実行」を検索します。
  2. 前のセクションで行ったように「NT Service\MSSQLSERVER」アカウントを追加します。
  3. SQL Server プロセスを再起動して、両方の設定を有効化します。

TempDB を設定する

CPU 単位で 1 つの TempDB を作成して、SQL Server の CPU 使用率を最適化することがベスト プラクティスでした。ただし、時間の経過とともに CPU の数が増えていくため、このガイドラインに従うことでパフォーマンスが低下する場合があります。まずは 4 つの TempDB ファイルを使用します。システムのパフォーマンスを測定すると、まれに TempDB ファイルの数を増分的に最大 8 まで増やす必要がある場合があります。

T-SQL スクリプトを SQL Server Management Studio 内部で実行して、TempDB ファイルを P:\ ドライブ内のフォルダに移動できます。

  1. ディレクトリ p:\tempdb を作成します。
  2. セキュリティの全アクセス権を「NT Service\MSSQLSERVER」ユーザー アカウントに付与します。

    icacls p:\tempdb /Grant "NT Service\MSSQLServer":(OI)(CI)F
    
  3. 次のスクリプトを SQL Server Management Studio 内部で実行して、TempDB データファイルとログファイルを移動します。

    USE Master
    GO
    ALTER DATABASE [tempdb] MODIFY FILE (NAME = tempdev, FILENAME = 'p:\tempdb\tempdb.mdf')
    GO
    ALTER DATABASE [tempdb] MODIFY FILE (NAME = templog, FILENAME = 'p:\tempdb\templog.ldf')
    GO
    
  4. SQL Server を再起動します。

  5. 次のスクリプトを実行して、ファイルサイズを変更して新しい TempDB に対して 3 つの追加データファイルを作成します。

    ALTER DATABASE [tempdb] MODIFY FILE (NAME = tempdev, FILENAME = 'p:\tempdb\tempdb.mdf', SIZE=8GB)
    ALTER DATABASE [tempdb] MODIFY FILE (NAME = templog, FILENAME = 'p:\tempdb\templog.ldf' , SIZE = 2GB)
    ALTER DATABASE [tempdb] ADD FILE (NAME = 'tempdev1', FILENAME = 'p:\tempdb\tempdev1.ndf' , SIZE = 8GB, FILEGROWTH = 0);
    ALTER DATABASE [tempdb] ADD FILE (NAME = 'tempdev2', FILENAME = 'p:\tempdb\tempdev2.ndf' , SIZE = 8GB, FILEGROWTH = 0);
    ALTER DATABASE [tempdb] ADD FILE (NAME = 'tempdev3', FILENAME = 'p:\tempdb\tempdev3.ndf' , SIZE = 8GB, FILEGROWTH = 0);
    GO
    

    SQL Server 2016 を使用する場合、以前のステップで行った後でさらに削除する TempDB ファイルが 3 つあります。

    ALTER DATABASE [tempdb] REMOVE FILE temp2;
    ALTER DATABASE [tempdb] REMOVE FILE temp3;
    ALTER DATABASE [tempdb] REMOVE FILE temp4;
    
  6. SQL Server をもう一度再起動します。

  7. C: ドライブ上の元の場所から modelMSDBmastertempdb ファイルを削除します。

TempDB ファイルをローカル SSD のパーティションに正常に移動しました。この移動により以前に説明したようないくつかのリスクを抱えますが、なんらかの理由でファイルが失われる場合は、SQL Server が TempDB ファイルを再構築します。TempDB の移動によりローカル SSD のパフォーマンスがさらに向上して、永続ディスク上で使用される IOPS が削減されます。

max degree of parallelism を設定する

max degree of parallelism の推奨されるデフォルト設定は、これとサーバー上の CPU の数を一致させることです。ただし、クエリを 16 個または 32 個の並列チャンクで実行するポイントがあり、結果をマージすると 1 つのプロセスでの実行よりさらに遅くなります。16 または 32 コアのインスタンスを使用している場合、次の T-SQL を使用して max degree of parallelism 値を 8 に設定できます。

USE Master
GO
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'max degree of parallelism', 8
GO
RECONFIGURE WITH OVERRIDE
GO

max server memory を設定する

この設定のデフォルトは非常に大きな値ですが、利用可能な物理 RAM からオペレーティング システムとオーバーヘッド用の数ギガバイトを引いたメガバイト数を指定する必要があります。次の T-SQL の例では、max server memory が 100 GB に調整されます。これを変更してインスタンスに適合する値に調整します。

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OVERRIDE
GO
exec sp_configure 'max server memory', 100000
GO
RECONFIGURE WITH OVERRIDE
GO

最終処理

インスタンスをもう一度再起動して、すべての新しい設定が有効になっていることを確認します。SQL Server システムの設定が完了し、独自のデータベースを作成して特定のワークロードのテストを開始する準備ができました。操作手順、その他のパフォーマンスの考慮事項、Enterprise Edition 機能の詳細については、SQL Server ベスト プラクティス ガイドを確認してください。

クリーンアップ

SQL Server チュートリアルが終了したら、Google Cloud Platform で作成したリソースについて今後料金が発生しないようにクリーンアップすることができます。以下のセクションで、このようなリソースを削除または無効にする方法を説明します。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

インスタンスの削除

Compute Engine インスタンスを削除するには:

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 削除するインスタンスの隣のチェックボックスをオンにします。
  3. ページの上部にある、[削除] ボタンをクリックし、インスタンスを削除します。

永続ディスクを削除する

永続ディスクを削除する手順は次のとおりです。

  1. GCP Console で [ディスク] ページに移動します。

    [ディスク] ページに移動

  2. 削除するディスクの名前の横にあるチェックボックスをオンにします。

  3. ページ上部にある [削除] ボタンをクリックします。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...