web-dev-qa-db-ja.com

最高のパフォーマンスを実現するMSSQLレイアウト

MSSQLバックエンドとして機能する新しいサーバーを購入しました。最適なセットアップが何であるかを知りたいです。

サーバーはDellR710で、6台のハードドライブが2x 74GB15kと4x146GB15kです。

これは現在、RAID 1/Raid10構成でセットアップされています。

私の質問は、次はどこ(どの配列)に行くべきかということです。

TEMPDB(数、サイズ、拡張も)システムDB(マスター、モデルなど)アプリケーションMDFアプリケーションLDFシステムページファイル

OSはすでにRAID1にインストールされています。

4
ITGuy24

OS、ページングファイル、LDFをRAID1アレイに配置します。 RAID10アレイ上の他のすべて。

Windows 2008を使用していない場合は、パーティションが正しく配置されていることを確認してください。

http://msdn.Microsoft.com/en-us/library/dd758814.aspx

すでに説明したように、CPUコアごとに1つのTEMPDBファイルを追加します-それらをすべて同じサイズにします。

ログファイルのサイズを適切に設定し、1つのステップで作成します。

可能であれば、ネットワーク共有を介してデータベースを別のサーバーにバックアップすることを検討してください。アレイが完全に失敗し、データベースとバックアップを取得するリスクを軽減するためです。

2
SuperCoolMoss

TempDB

私はtempdbの最適化について少し前に調査を行い、自分自身に答えました Stackoverflowに関する質問 。これが私が見つけたものです。

Tempdbのパフォーマンスを最適化するには、物理​​ディスクの構成、ファイルの構成、およびデータベース内のいくつかの設定に注意してください。

物理ディスク構成

tempdbはその独自の専用物理ディスクに存在する必要があります。これにより、SQLServer上の残りのボリュームからI/Oトランザクションを分割できます。

Tempdbを新しいディスクドライブに移動するには、ALTER DATABASEを使用します。この操作を実行するための重要なT-SQLコマンドです。 Microsoftは、SQL Server 2005 BooksOnlineで良い例を提供しています。記事名はALTERDATABASE(Transact-SQL)で、特定のセクションは 'Gです。 tempdbを新しい場所に移動しています。 '

Tempdbは非常に書き込みの多いデータベースです。そのため、RAID5アレイは適切な場所ではありません。 tempdb RAID1またはRAID10アレイのいずれかにを配置する必要があります。これは、高書き込みアプリケーション用に最適化されているためです。 tempdbの物理データベースファイルごとに追加のRAID1またはRAID10アレイを購入できる場合は、パフォーマンスが向上します。

データベースファイル

サーバーのCPUコアごとに1つの物理ファイルが必要です。したがって、デュアルチップ、デュアルコアサーバーを使用している場合は、tempdbデータベース用に4つの物理データベースファイルが必要です。データベースファイルをさらに追加するときは、ファイルを同じ初期サイズと同じ拡張設定で構成することが重要です。そうすることで、SQLServerはファイル全体に可能な限り均等にデータを書き込みます。

データベースファイルサイズ

Tempdbデータベースのサイズは、システムのパフォーマンスに影響を与える可能性があります。たとえば、tempdbに定義されているサイズが小さすぎる場合、システム処理の負荷の一部が次のようになる可能性がありますSQLServerのインスタンスを再起動するたびにワークロードをサポートするために必要なサイズにtempdbを自動拡張する。 tempdbデータとログファイルのサイズを増やすことで、このオーバーヘッドを回避できます。

実稼働環境でのtempdbの適切なサイズの決定は、既存のワークロードや使用されているSQLServer機能などの多くの要因によって異なります。 SQL Server test環境で次のタスクを実行して、既存のワークロードを分析することをお勧めします。

  1. Tempdbの自動拡張をオンに設定します(テスト環境で!)
  2. 個々のクエリまたはワークロードトレースファイルを実行し、tempdbスペースの使用を監視します。
  3. インデックスの再構築やtempdbスペースの監視など、インデックスのメンテナンス操作を実行します。
  4. 前の手順のスペース使用値を使用して、ワークロードの合計使用量を予測します。予測される同時アクティビティに対してこの値を調整し、それに応じてtempdbのサイズを設定します。

Tempdbの最小サイズの推奨事項は次のとおりです。

環境。サイズDBサイズ(MB)ログサイズ(MB)
 ----------- ------------ ----------- 
小1024256 
中51201024 
大100242048 

データベース設定

自動更新統計を無効にするによってtempdbのパフォーマンスをさらに向上させることができます。これにより、tempdbの作業が節約されます。 統計の自動作成オプションをfalseに設定することもできます。

免責事項:設定は慎重に変更する必要があります。 tempdbにかける負荷の種類によっては、設定を変更するとシステムパフォーマンスに悪影響を与える可能性があります。

最適なtempdbパフォーマンスを実現するには、 tempdbパフォーマンスの最適化 に記載されているガイドラインと推奨事項に従ってください。

tempdbの使用状況を監視する方法は?

実行中tempdbのディスク領域が不足可能性があります重大な混乱を引き起こす SQL Server実稼働環境で、実行中のアプリケーションが操作を完了できない可能性があります。

sys.dm_db_file_space_usage動的管理ビューを使用して、tempdbファイル内のこれらの機能によって使用されるディスク領域を監視できます。さらに、セッションまたはタスクレベルでtempdbのページ割り当てまたは割り当て解除アクティビティを監視するには、sys.dm_db_session_space_usageおよびsys.dm_db_task_space_usage動的管理ビューを使用できます。

これらのビューは、大量のtempdbディスク領域を使用している大きなクエリ、一時テーブル、またはテーブル変数を識別するために使用できます。 tempdbで使用可能な空き領域と、tempdbを使用しているリソースを監視するために使用できるカウンターもいくつかあります。

リンク:

13
splattne

簡単な一般的な答えは、高いIOをRAID10ディスクグループに入れる必要があることです。また、パーティション戦略または質問のその部分を決定しましたか?

したがって、最初のディスクグループでは、おそらく単一のパーティション(約70GBが使用可能)を作成し、OSとMSSQLアプリケーションをこの上に配置します。

2番目に、次のパーティションを作成します

1)ページファイル用のパーティション(使用しているメモリの量によって異なりますが、約10〜20GB 2)トランザクションログファイル用のパーティション100GB 3)データファイル用のパーティション100GB

これにより、約50 GBのスペアが残りますが、これは未割り当てのままにしておくため、要件の変化に応じてログパーティションまたはデータパーティションのいずれかを拡張できます。

興味深いことに、私は現在、LinuxとOracleを使用しているだけで、まったく同じスペックのマシンで作業しています。あなたはパラレルユニバースの私ですか?

ジェームズ

1
James

これまでにいくつかの素晴らしい答えがありましたので、私はそれを我慢するつもりはありませんが、あなたに質問をします。

サーバーを購入する前に、なぜこの質問をしなかったのですか?システムのニーズに合わせてサーバーを購入するのではなく、購入済みのサーバーにシステムを詰め込もうとしているのはなぜですか?

1
mrdenny

申し訳ありませんが、この質問を未登録ユーザーとして質問しましたが、回答済みとしてマークできません。管理者からここに戻って、私のアカウントを質問に再度添付できるかどうかを確認するのを待っています。

さらに洞察を与えるために、このサーバーには大きな負荷がかからず、実際にはソース管理バックエンドです。サーバーとDASまたはISCSIを購入するSANまたは何かが過剰に殺され、コストがプロジェクトのチャンスを押しつぶしていたでしょう。私はSMB約100人であるため、IT予算は特に現在タイトです。

@mrdenny

この構成を推奨したソフトウェアベンダーに質問しました。私たちがここで尋ねたクエストを提起したとき、彼らはログ、データベース、およびtempdbをすべてレイド10パーティションに置くと言ったのでそれを購入しました。私はDBの大物ではありませんが(本当に??)、ほとんどの人が同じスピンドルでldfsとmdfを混在させないことを知っているので、これは怪しいように聞こえました。

@ splattne-tempdbに関する洞察に感謝します。これは、今回および将来のSQLインストールに役立ちます。

@ SuperCoolMoss-私は自分のITFirendネットワークの何人かの人々と話をしましたが、彼らはこれについてあなたに同意します。 RAID1のOS、ページファイル、LDF、およびRAID10のtempdbとMDF

コメントしてくれた他のみんなに感謝します。

私が読んだところによると、これらは、ディスクに関してSQLを導入する際に従うべき基本的なルールです。私の意見では、これらはこの順序で従う必要があります。同意するか同意しないかをお知らせください。

  1. 冗長ディスクを使用する(かなり明白)
  2. 高速ディスクを使用する(SCSI/SAS、可能であれば15k)
  3. 異なるスピンドルでldfファイルとmdfファイルを分離します
  4. LdfsまたはtempdbにRAID5を使用しないでください(RAID10またはRAID1を使用)
  5. Tempdbを最速のスピンドルに配置します。可能であれば、tempdbをldfおよびmdfスピンドルから分離します。

このリストの変更版をお気軽に共有してください。

1
ITGuy24

古いシステムからいくつかのIO統計を収集することから始めます。たとえば、Performance Dahsboardレポートから始めます: http://www.Microsoft.com/downloads/details.aspx ?FamilyId = 1d3a4a0d-7e0c-4730-8204-e419218c1efc&displaylang = en これにより、データベースのIO統計が得られ、 '1ではなく情報に基づいた決定を行うことができます。サイズはすべての一般的なアドバイスに適合します。もちろん、古いサーバーは、データベースごとに新しいサーバーとは異なるIO特性を持つ場合があります。特に、異なる量のRAMが利用可能な場合) 。それでも、純粋な推測よりも優れています。

理想的には、高負荷のI/Oファイルを独自のデバイスに分離することを目的とし、MDFアクセスのランダムI/OとLDFアクセスの線形書き込みを混在させたくない場合もあります。あなたの場合、組み合わせはそれほど多くなく、実際には2つの場所(RAID1の2つのディスクとRAID10の4つのディスク)しかありません。データベースごとにIO古いサーバーから収集され、ファイルの場所を分割して、2つの宛先間でIOをRAID1ではおそらく1/5、RAID10では4/5の比率で分散するようにします( OSとページファイルのアカウントIO)。書き込みを多用するアプリケーション(シーケンシャルLDF書き込み負荷が高い)がないことを願っています。

TempDBレイアウトは通常、スケジューラごとに1 NDF(CPUコアはマスクされていない)であることが推奨され、すべて同じサイズであり、その理由はここで説明されています: http://blogs.msdn.com/sqlserverstorageengine/archive/2009/01/04/managing-tempdb-in-sql-server-tempdb-configuration.aspx 。これは、SQL 2Kの高負荷では深刻な問題になる可能性のあるページ割り当ての競合に対処します。2k5ではそれほどではなく、2k8ではさらに少なくなります。ただし、基本的に構成に費用がかからないことを考えると、それでも実行する必要があります。

0
Remus Rusanu

どのくらいのパフォーマンスが必要ですか? 「これがディスクだ」という答えを出すのは難しい。さらに、すべてのデータをキャッシュに入れることができれば、SQLのパフォーマンスははるかに向上するため、RAMが十分にあることを確認してください。

私はあなたの2x74GbボリュームのOSとページファイルに行きます。ログトラフィックが多い状況に陥っている場合は、RAID10をRAID1のペアに分割し、そこにログを配置できます。

明らかに、「最良の」レイアウトをめぐる宗教戦争はたくさんありますが、実際には移動するのに十分なディスクがありません。データドライブを分割する意味はありません。本当に気になるのはスピンドルの数であり、サーバーに収まるものによって制限されるからです。

PowerVaultなどを入手し、146Gbドライブを(他のドライブと一緒に)リサイクルして、データ/ログ/システム+ tempdbボリュームに分割することをお勧めします。

0
user2278

それは実際には非常に高速なディスクシステムではありません。素晴らしい答えを得るためにsplattneに完全にクレジットされていますが、実際にはそれはそれほど高速なディスクセットアップではないので、どれだけのトラブルに取り組む価値があるのか​​わかりません。

2つのディスクRAID1では、レイドされていない1つのディスクに比べてパフォーマンスがほとんどまたはまったく向上しません。 4ディスクRAID10は、2ディスクRAID0の速度を提供します。これは高速ですが、驚くほど高速ではありません。これは低速のサーバーではありませんが、非常に要求の厳しいSQLデータベースを実行するための明白な候補ではありません。

それが私のサーバーである場合、さらに2つの146GBディスクを見つけて、6ディスクのRAID5にします。 OK、データファイルと同じスピンドルにtempdbを配置したことで悲鳴を上げるつもりですが、PercコントローラーはRAID5に非常に優れており、6ディスクのRAID5は(おそらく)非常に高速になります。 RAID1にtempdbがあり、RAID5にディスクが4つしかない場合よりもパフォーマンスが向上します。すべての場合と同様に、ロード方法に依存するため、「おそらく」と言います。

JR

0
John Rennie