web-dev-qa-db-ja.com

SQL Server tempdb on RAM Disk?

私たちのベンダーアプリケーションデータベースは、非常にTempDBに集中しています。

サーバーは、SQL 2012 Enterprise SP3を実行する40コアおよび768GB RAMの仮想(VMWare)です。

TempDBを含むすべてのデータベースは、SANのTier 1 SSDにあります。 tempdbデータファイルは10個あり、それぞれ1GBに事前拡張されており、自動拡張することはありません。 70GBのログファイルと同じです。トレースフラグ1117および1118は既に設定されています。

sys.dm_io_virtual_file_statsは、tempdbデータとログファイルで過去1か月に50テラバイト以上の読み取り/書き込みが行われ、io_stallの累積が250時間または10日であることを示しています。

過去2年間、ベンダーのコードとSPはすでに調整されています。

現在、大量のメモリがあるため、tempdbファイルをRAMドライブに配置することを考えています。tempdbは、サーバーの再起動時に破棄/再作成されるため、揮発性に配置するのに理想的な候補ですサーバーの再起動時にもフラッシュされるメモリ。

低い環境でこれをテストしましたが、CPUが遅いtempdbドライブで待機するのではなく、より多くの作業を行っているため、クエリ時間は短縮されましたが、CPU使用率が増加しました。

他の誰かがtempdbをRAM高oltpプロダクションシステムに置いていますか?大きな欠点はありますか?特に選択または回避するベンダーはありますか?

11
d-_-b

最初に、patch:2012 Service Pack 1累積更新プログラム10以降を使用していることを確認します。 SQL 2014では、MicrosoftはTempDBを ディスクへの書き込みが少ない に変更しました それを2012 SP1 CU10に驚くほどバックポートしました 。これにより、TempDBの書き込みの負荷を大幅に軽減できます。 。

2番目に、待機時間の正確な数値を取得します。TempDBファイルの平均書き込みストールを確認するには、 sys.dm_io_virtual_file_stats を確認します。これを行う私のお気に入りの方法は次のいずれかです。

sp_BlitzFirst @ExpertMode = 1, @Seconds = 30 /* Checks for 30 seconds */
sp_BlitzFirst @SinceStartup = 1 /* Shows data since startup, but includes overnights */

ファイルの統計セクションを見て、物理的な書き込みに焦点を当てます。 sinceStartupデータには、CHECKDBが実行されている時間も含まれるため、少し誤解を招く可能性があり、TempDBを実際に破壊する可能性があります。

平均書き込みレイテンシが3ミリ秒を超える場合、はい、SANにソリッドステートストレージがある可能性がありますが、それでも高速ではありません。

TempDBのローカルSSDを最初に検討します。良好なローカルSSD(IntelのPCIe NVMeカードなど、特に説明しているサイズで$ 2k USD未満)レイテンシが非常に低く、共有ストレージで実現できるよりも低い。ただし、仮想化では、これには欠点が伴います。あるホストから別のホストにゲストをvMotionして、負荷またはハードウェアの問題に対応することはできません。

a RAM最後にドライブすることを検討してください。このアプローチには2つの大きな問題があります。

まず、TempDBの書き込みアクティビティが本当に多い場合、メモリの変更率が非常に高いため、だれもが気づかないうちにゲストをあるホストから別のホストにvMotionすることができません。 vMotion中に、RAMの内容を1つのホストから別のホストにコピーする必要があります。vMotionネットワーク経由でコピーするよりも速く、それが本当に変化している場合は、問題が発生する可能性があります(特に、このボックスがミラーリング、AG、またはフェールオーバークラスターに関与している場合)。

2番目に、RAMドライブはソフトウェアです。私が行った負荷テストでは、TempDBアクティビティが非常に重い場合の速度に感銘を受けたことはありませんでした。グレードのSSDが追いつかない場合、RAMドライブソフトウェアにも負担がかかります。実際に稼働する前に、これを大幅に負荷テストする必要があります。さまざまなインデックスで多数の同時インデックス再構築が行われ、すべてtemp-in-sortでソートされます。

7
Brent Ozar

RAMドライブを作成するのは簡単です。多くの起動可能なLinuxサムドライブとオプティカルドライブはRAMドライブを作成し、そこにOSファイルを格納します。ルートファイルシステムはWindowsでは、昔は、RAMドライブがconfig.sysにデバイスドライバーとして読み込まれていました。通常、ドライバーはハイメモリに読み込まれていました。私の考えでは、非常に優れたシンプルなソリューションです。RAMドライブを使用してソリューションを作成した場合、そのことを聞きたいと思います。同様のことをしたいのですが、永続的なストレージに書き込みを行い、保存したいと思います。 RAMのdb。私の場合、OSが使用できるよりも多くのRAMをインストールできるマシンがあります。OSのロードが許可する前にRAMディスクを作成しますRAMの使用率は、OSが他の方法では認識しません。

1
Edward Coyle