web-dev-qa-db-ja.com

RAMディスクを使用したSQLServer一時テーブル処理の高速化

私たちが開発しているシステムは、Webアプリのフロントエンドと、SQL Server 2008 R2のストアドプロシージャを使用して多くのデータ処理を行うバックエンドで構成されています(理由は聞かないでください...)。これらのストアドプロシージャは一時テーブル(作成、挿入、結合)を多用するため、tempdb I/Oレートは書き込みと読み取りで高くなります。私たちのクライアントはスピードを必要としているので、私たちは以下をお勧めしようとしています:

  • メインデータベースを保存するためのRAID1 SSDアレイを備えたサーバーを購入し(お金があればRAID10)、OSとSQL Serverのインストールに別のハードドライブを使用して、重要なデータがレプリケーションで高速ドライブに保存されるようにします。 64GBのRAM。
  • tempdbデータベースを格納するためにRamdiskを使用して、一時テーブル(私たちが考える最大のパフォーマンスのボトルネック)がRAMで処理されるようにします。

いくつかのコンテキストデータ:

  • 私たちのデータベースは10GB以下を使用しており、予想される成長率は非常に低くなっています。 Tempdbは通常、2〜3GBまでしか大きくなりません。
  • サーバーはDBとWebサーバーに使用されます。
  • Ramdiskソフトウェアは、Windowsの起動時にramdiskをマウントできます。

多くのRAMを搭載したラップトップでRAMディスクアプローチをテストしました。少なくともスピードアップは目覚ましい(ストアドプロシージャの実行時間は1/3に短縮)。

これが適切な解決策であるかどうかを判断し、欠落している可能性のある欠陥(明らかまたはあまり明白ではない)を検出するための支援が必要です。

編集:これまでの回答をありがとう!アプリケーションを使用する同時ユーザーが存在するため、複数の一時テーブル操作が実行されることを明示的に言及するのを忘れました。また、WebサーバーとDBサーバーを混在させることは私たちの選択ではありません。私たちはすでにそれが最適ではないことを知っています;)

5
mramirez

それはレートだけではなく、待機です。適切にベンチマークします。 IOPSとディスクキューの長さを確認してください。 PerfmonおよびSQLプロファイリングを使用します。どうぞ-お待ちしております。

実際のパフォーマンスに懸念がある場合は、OSをスピンドルのセット、MDFを別のセット、LDFを別のセット、tempdbファイルを別のセットに配置する必要があることはすでにご存知でしょう。あなたがそれをすることにコミットすることができないならば、それをベンチマークして、あなたの優先順位を見つけてください。また、読み取りと書き込みのパターンが異なると、それぞれのRAIDレベルが異なる可能性があります。

適切なRAID構成を備えた標準ディスクを使用すると、エンタープライズSSDに対応するのではなく、必要な場所に移動できることがわかります。ただし、tempdbが十分に打撃を受けている場合は、単一のSSDが適している可能性があります。おそらく、パフォーマンスのためにRAIDは必要ありませんが、冗長性のためにRAIDを使用することをお勧めします。もちろん、あなたの予算とあなたがダウンすることができる期間に依存します。

また、SQLサーバーをWebサーバーから分離する必要があることもご存知ですか?パフォーマンスが懸念される場合は?あなたが今問題を抱えていなくても、あなたが成長するならば、あなたはどちらがより強く打たれているのか、そして適切な修正が何であるのかを決定するのに苦労するでしょう。

1
mfinni

すべての答えをありがとう。彼らは非常に役に立ちました。その後の調査の結果、この特定のケースではI/O速度が主なボトルネックではないことがわかりましたが、一般的には重要です。 tempdb管理のベストプラクティスには、少なくとも4つのデータファイルが含まれます。 Microsoftは、CPUコアごとに1つのデータファイルも推奨しています。より多くのファイルがあると、競合の問題のいくつかのフレーバーを減らすのに役立ちます。

これに関するいくつかのリンク:

0
mramirez

RAIDは冗長性用であり、パフォーマンスはウィンドウの外に出ます。例:データの一部を読み取るためのRAID5 allコンポーネントディスクを読み取る必要があり、パリティをチェックする必要があります(is単一のディスクからの読み取りよりも遅いため、ヘッドの動きは遅くなります。同期する必要があるため、セットの最長を待っています。書き込みとは、すべてを読み取り、パリティを計算し、新しいデータとパリティを書き込むことを意味します。これは、単に書き込むよりも明らかに遅いです。

はい、優れたRAID実装とスマートオペレーティングシステムはこれを大幅に軽減できます(単一のディスクでもRAMに関してひどく遅いため、その価値のあるオペレーティングシステムは、ディスクに関係なく大規模なキャッシュを実行します)。

はい、スマートDBMSはデータを可能な限りRAMにキャッシュします(データの整合性、耐障害性などに関する約束を尊重します。必要に応じて、データを明示的に待機します。続行する前に、安全にディスク上に置いてください)。

どのDBにとっても、RAMdiskは純粋な毒です(「データは明示的にディスクに書き込まれるため、安全ではありません」)。

0
vonbrand