web-dev-qa-db-ja.com

SQL Server:メモリ使用量が多い(7GB)+ページファイル使用量が多い(7GB)がCPU使用率(2%から10%)

重複の可能性:
SQLServerのメモリは常に増加しています。1GBからRAM 1週間で7GBに使用されます。

こんにちは皆さん、

大量のデータ(複数のテーブルの数百万のレコード)を更新する多数のスクリプトを使用してSQLサーバーを実行しています。ただし、RAM使用量は可能な8GBの7.5GBになります-これは8コアサーバー上にあるため、メモリリークがあると思います。ページファイルは7.28GBになります。これは、SQLサーバーが使用しているとは思わないRAM.

これを引き起こしている可能性があるもの、またはこれをトラブルシューティングする方法についてのアドバイスが本当に必要です!

私のセットアップ

Microsoft Windows Server 2003
Standard 64-bit edition
Service Pack 2

SQL Server 2005
Microsoft SQL Server Management Studio  9.00.4035.00
Microsoft Analysis Services Client Tools 2005.090.4035.00
Operating System 5.2.3790

SQLServerのアプリケーションと使用法

私はPHpでSQLサーバーを使用しており、PHPのexec関数を使用してSQLCMD経由でスクリプトとクエリを実行しています。

このすべてのRAM使用量と巨大なページファイルの考えられる原因は何でしょうか?

問題を特定するのに十分な情報を提供できたと思います。他に追加したり、調べたりする必要があるものがあれば教えてください。

皆さんありがとう

2
Abs

SQL Serverのメモリ管理は非常に幅広いトピックですが、ここで対処する必要のあることがいくつかあります。

私はあなたがページファイルの使用法としてあなたが言及しているものを得るためにタスクマネージャーを見ていると仮定するつもりです。これは[〜#〜] not [〜#〜]物理ページファイルのサイズまたは使用される物理ページファイルスペースの量です-これは コミットチャージ と呼ばれるもの。これは基本的に、すべての VAS(VAS)を保持するために必要な物理ページファイルスペースの合計の潜在的な量です。と物理メモリは同じものではありません) 。実際のページファイルの使用状況を確認したい場合は、PagingFile:%Usageperfmonカウンターを表示してください。ほぼ確実に非常に小さな割合になります。コミット料金の合計サイズ(つまり、タスクマネージャーがPF使用量として表示するもの)は、基本的にすべての可能なVAS(つまり、すべてのページファイルスペース+システム上の合計物理メモリ)の合計です。

Sql Serverは[〜#〜] not [〜#〜]OSのメモリ管理機能をオーバーライドしません-同じウィンドウで提供されるメモリAPIを使用します任意のユーザーモードアプリケーション(主に VirtualAlloc ファミリおよび AWEファミリはまだ64ビットシステムで使用 )、。 SQL Server には、それ自体のメモリ使用率の管理専用のサブシステムがあります が、このサブシステムは、要求、受信に関して、ユーザーモードアプリケーションで利用できない特別なことは何もしません。 、基盤となるOSからのメモリのコミットなど。

他の人が言及したように、SQL Serverは、システム/ユーザー定義の制約に基づいて、可能な限り多くのメモリを使用するように設計されています。ただし、システムの使用率に基づいてこのメモリフットプリントに拡大します(つまり、起動時に比較的少量のメモリを予約し、必要に応じてOSからの要求/予約を続行します)。また、必要に応じてOSのメモリ不足に対応するように設計されており、OSが「要求」しない限り、予約済みのメモリフットプリントを維持するように設計されています(これについての詳細は、 このブログこのブログこのブログ )。

Sql Serverに現在のメモリフットプリントを強制的に解放/縮小させたい場合は、 "maxで指定された値を下げることで、(Sql 2005以降を実行していると仮定して)そうするように指示できます。サーバーメモリ」システム構成 および再構成の実行。これには確かに制限があります(つまり、この構成はバッファプールのみを制限しますが、これは圧倒的に最大のメモリ消費者です)。これは[〜#〜] not [〜#〜]他の場所でほのめかされている接続レベルの設定であり、システム全体の設定です(はメモリ関連の接続レベルの設定ですが、この質問とは何の関係もありません)。 Sql 2000を実行している場合は、調整を行ってからSqlサービスをリサイクルする必要があります-Sql 2000では、メモリ管理がほとんどすべての点で大きく異なっていたことに注意してください(別の質問/ディスカッションが必要になる可能性があります)。

いくつかのブログ を読んで、 基本的なウィンドウとSQLサーバーのメモリ管理 を理解することを強くお勧めします。このような状況で何が起こっているのかを理解しようとするときは、それほど時間はかからず、知識の価値が十分にあります。

14
boydc7

SQLServerには独自のメモリ管理があり、OSのメモリ管理を上書きします。取得するメモリの量を制限できます。これを行うにはいくつかの方法がありますが、おそらく最も簡単なのは、SqlServer Management Studioを起動し、SQLインスタンスを右クリックしてプロパティを選択し、[メモリ]タブに移動することです。管理対象コードからデータベースを呼び出す場合は、接続レベルでこれを行うこともできます。

0
slugster

SQL Serverは設計使用可能なすべてのシステムメモリを使用します。 slugsterが示唆しているように、ボックスにRAMが必要なものがある場合は、これを制限できますが、一般的なルールは、SQLがRAM = :-)。

0
Randolph West