11

本番SQLServerでいくつかの問題が発生しています。

サーバー:デュアルクアッドコアXeon 8GBRAMシングルRAID10アレイWindows2003サーバー64ビットSQLServer2005標準64ビット

現在、マシンには約250MBの空きRAMがあります。SQLServerには約6GBのRAMがあり、監視ソフトウェアによると、SQLServerに割り当てられたRAMの半分だけが実際に使用されています。

私たちのメインデータベースは約20GBで、約12GBが任意の頻度で使用されています。tempdbは700MBです。両方とも同じ物理ディスクアレイにあります。

さらに、Filemonを使用すると、tempdbファイルに長さ65536の書き込みが100または1000あることがわかりました。ディスクキューの長さは、ほぼ80%の時間で100を超えていました。

だから、ここに私の質問があります-

  1. tempdbにこれらすべての書き込みが発生する原因は何ですか?私たちがいつもそんなに多くの活動をしてきたかどうかはわかりませんが、それは過度に思え、これらの問題は最近のものです。

  2. サーバーにメモリを追加するだけでよいですか?

  3. 高負荷サーバーでは、tempdbファイルとdbファイルを別々のアレイに配置する必要がありますか?

4

5 に答える 5

7

SAN または NAS を使用している場合、ディスク キューの長さが大きいからといって、I/O ボトルネックがあるわけではありません。他の追加のカウンターを確認することをお勧めします。詳細については、説明されている SQL Server Urban Legendsを参照してください。

1: 次の操作は tempdb を多用します。

  • 一時テーブルの作成と削除の繰り返し (ローカルまたはグローバル)
  • ストレージの目的で tempdb を使用するテーブル変数
  • CURSORS に関連付けられた作業テーブル
  • ORDER BY 句に関連付けられた作業テーブル
  • GROUP BY 句に関連付けられた作業テーブル
  • HASH PLANS に関連付けられた作業ファイル

これらの SQL Server 2005 機能も tempdb を頻繁に使用します。

  • 行レベルのバージョン管理 (snapshotisolation)
  • オンライン インデックスの再構築

他の SO の回答で述べたように、tempdb のパフォーマンスを向上させるためのベスト プラクティスに関する この記事をお読みください。

2: サーバーの空き RAM の量を確認します。つまり、WMI カウンターを確認します。メモリ -> 利用可能なメガバイトは、SQL Server がデータ ページを RAM にキャッシュするため、役に立ちません。 .
サーバーに RAM を追加することが役立つかどうかを判断する上でより意味のある、確認する必要があるカウンターは次の
とおり です。非常に長い間メモリ内になく、データがディスクから継続的に読み取られています。ページの寿命が短いサーバーは、RAM を追加することでメリットが得られます。

SQL Server インスタンス: バッファー マネージャー -> バッファー キャッシュ ヒット率 これは、RAM から読み取られ、ディスクからの読み取りを必要としなかったページのパーセンテージを示します。キャッシュ ヒット率が 85 未満の場合、サーバーが恩恵を受けることを意味します。追加の RAM

3 から: はい、ここで失敗することはありません。別のディスク セットに tempdb を配置することをお勧めします。見出しの下にあるこの KB 記事を参照してください: これを行う方法については、tempdb データベースを移動します。

于 2009-03-08T13:59:08.470 に答える
3

すばらしい質問、+ 1

tempdbは、SQL2005以降ではるかに頻繁に使用されます。少なくとも:スナップショット分離レベル、オンラインインデックスの再構築、トリガーでのINSERTED / DELETEDの読み取り(ログファイルの読み取りに使用されます!)

これは、通常のby句、一時テーブルなどに加えて行われます。

おそらく、ログファイルとデータファイルを分割したほうがよいでしょう(回復性のためにも)。より多くのメモリは常に良いですが、この64ビット固有のもの、以下のGrumpyOldDBAを参照してください。

最後に、おそらく最も重要なことですが、tempdbでスペース割り当ての競合が発生する可能性があります。LinchiSheaとSQLServerストレージチームからの説明

後期編集:

Paul Randallは、優れたリンクを提供するエントリ「包括的なtempdbブログ投稿シリーズ」を追加しました。

于 2009-03-06T20:30:27.190 に答える
3

はい、負荷の高いサーバーでは、ユーザー データベースとは別のドライブ セットに TempDB を配置することをお勧めします。

SQL Server 2005 オンライン ブック: tempdb パフォーマンスの最適化

于 2009-03-06T20:37:37.500 に答える
3

あなたの質問に対する直接的な回答ではありませんが、これは良いヒントになるかもしれません: SQL Server インスタンスを再起動すると tempdb がクリアされます。

于 2009-03-08T11:09:10.360 に答える
0
  1. tempdbへの書き込みは何でもかまいません。内部ハッシュテーブル、一時テーブル、テーブル変数、ストアドプロシージャ呼び出しなど。

  2. 空きRAMが250メガバイトしかない場合は、RAMを増やしておくとよいでしょう。

  3. tempdbデータベースとユーザーデータベースを異なるディスクに分割することを常にお勧めします。

tempdbへのすべての書き込みは、各データベースエクステントのサイズである64kのサイズになります。

于 2009-03-08T06:29:23.560 に答える