仮想マシンでSQL Serverを実行するためのベストプラクティスは何ですか?


21

仮想マシンでSQL Serverを実行するためのベストプラクティスは何ですか?私のオンライントランザクションアクティビティは非常に低いですが、レポートデータを複数のWebサイトに提供するために大量のデータ処理があります。


2
ディスクはどこに保存されていますか?ローカル5400 RPMのHDDで?ファイバー接続と15kスピンドルディスクを備えたSANで?最近のすべてのVMはIOであり、CPUはほとんど考慮されていません。
jcolebrand

いいえ、ローカルではありません。しかし、SANの詳細は知りません。
JerryOL

2
まだ十分な評判がないためコメントを追加できませんが、[Microsoftによると] [1] 2008 R2では、固定仮想ディスクと動的仮想ディスクのパフォーマンスの違いはほとんどありません。[1]:blogs.msdn.com/b/tvoellm/archive/2009/08/05/...
テリーBochaton

@Terry、今後はそのような回答にフラグを立ててください。それをあなたのために変換します。
jcolebrand

回答:


18

物理マシンと同様に、IOが重要です。仮想化による顕著なIOヒットが発生します(ヒットの程度は選択するテクノロジーによって異なります)。したがって、これを悪化させてIOパフォーマンスをさらに損なうようなことを何もしないでください。

  • ダイナミック仮想ディスクではなく、常に固定サイズを使用し、基盤となるドライブ/アレイが十分であることを確認してください。ダイナミック仮想ディスクは、固定サイズのものよりもパフォーマンスが低くなります。
  • VMのデータがミッションクリティカルでない場合は、パフォーマンスを向上させるために、VMソリューションの書き込みをキャッシュする機能を有効にします(物理的にディスクに物理的に書き込まれるタイミングについてゲストOSに効率的になります)。これは、データが簡単に交換される開発およびテストマシン、または問題が発生した場合に再作成できるマスター専用の読み取り専用レプリカに役立ちますが、そのようなオプションは本番およびバックアップシステムでは使用しないことをお勧めしますマシンの電源が予期せずオフになった場合、データ損失(またはさらに悪いことに破損)の可能性が高まります。
  • 各VMに専用の十分なRAMを確保して、各データベースの通常のワーキングセットがメモリに収まるようにし、不必要なIOを回避するための十分な余裕を確保します。また、ハイパーバイザーがいつでもVM RAMをページアウトしないことを確認してください(たとえば、ほとんどのVMWare製品はこれを行うことができます。これにより、同じハードウェアで実行できるよりも多くのVMを実行できますが、パフォーマンスの低下は大規模な-この動作を調整またはオフにするオプションがあります)。
  • ホストがRAID5アレイを使用している場合、RAID10への移行を検討してください。これにより、使用可能なスペースは減りますが、RAID5(または6)で明らかな書き込みパフォーマンスの問題はなくなります。
  • 多くのIOアクティビティが発生する可能性が高いVMの場合、独自のドライブまたはアレイを提供するか、アクティビティが少ないデータとドライブ/アレイのみを共有することを検討してください。

もちろん、DB全体(およびVMが実行している他のすべて)がVMに割り当てられたRAMに収まり、書き込みアクティビティがほとんどない場合、IOパフォーマンスはそれほど問題になりません。

編集:さらにいくつかのポイント:

  • 仮想ディスクを使用する場合は、パフォーマンスに最適なコントローラータイプが使用されていることを確認してください。一部の仮想化ソリューションは、ゲストの互換性を高めるためにいくつかの仮想コントローラータイプを提供しますが、エミュレートする設計のプロトコル制限およびゲストOSのドライバーの制限により、他のものよりも効率が低い場合があります。
  • 仮想化ソリューションが仮想ドライブコントローラー用の特定のドライバーを提供する場合、ゲストOSがそれらを使用していることを確認してください-これらは、メモリー間のコピーとホスト<->ハイパーバイザー<->ゲストコンテキストの数を減らすことでバルクIOを高速化できます一部の操作に関与するスイッチ。
  • 単純なSMB共有やiSCSIなどのネットワークストレージを使用している場合は、上記の2つの点が適用されます。提供されている最も効率的な仮想ネットワークコントローラーを使用し、ゲストOSが推奨ドライバーを使用していることを確認してください。また、帯域幅は、仮想化レイヤーによるニーズよりも制限される場合があります。

1
はい、そうです。iSCSIイニシエーターを介してVMにマウントされたSANボリュームは、非常に高速です!
ガイウス

1
@ガイウス:良い点。これらのケースで余分なボトルネックの原因となる可能性が高いvNICとドライバーに関するメモを追加しました。
デビッドスピレット

9

1
〜記事から強調したい部分がありますか?
jcolebrand

2
いいえ。仮想化は複雑なトピックになる可能性があるため、すべてを読むことをお勧めします。それほど多くはありません。OPが迅速な回答を探している場合、おそらく正しい答えにはなりません。
エリックハンフリー-lotsahelp

私は一般的にベストプラクティスを追っていました。SQLServer 2000 Standardを新しいVMに移行したばかりで、メモリにキャッシュされていない場合にタイムアウトするストアドプロシージャを呼び出すWebサイトの問題を解決しようとしています。物理メモリとVMに割り当てられたメモリは同じ4GBです。
JerryOL

1
@JerryOL:VMに割り当てられたRAMのページアウトが許可されていないことを確認します(そうでない場合、4GbをVMに割り当てることは物理マシンに4GBを割り当てることと同じではありません)。最適なものが選択され、適切なドライバーがゲストOSで使用されるようにします。
デビッドスピレット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.