web-dev-qa-db-ja.com

SQL Server 2005:このクエリを実行するにはシステムメモリが不足しています

かなり長い間(数年)安定して動作しているSQL Serverの1つで、最近メモリ不足エラーが発生しています。アプリケーションイベントログから、次のことがわかります。

イベントID:701

説明:このクエリを実行するにはシステムメモリが不足しています。

このサーバーを管理する私たちのチームは、システム管理者の職務を倍増するほとんどの開発者で構成されています。ただし、私たちの主な専門知識は開発です。とはいえ、これをトラブルシューティングする方法に困っています。私たちはフォーラムを調査してきましたが、一致するものは何も見つかりませんでした

トラブルシューティングに役立つ詳細を次に示します。

  • 最小サーバーメモリは0に設定されています。
  • 最大サーバーメモリは2000に設定されています。
  • 合計物理メモリは3,325.85 MBです(sysinfoから)。
  • 合計仮想メモリは7.10 GBです(sysinfoから)。
  • 私たちはメモリの割り当てにAWEを使用していませんでしたが、次にそれが違いを生むかどうかを確認します。
  • このエラーは、クエリを実行するのではなく、トランザクションログをバックアップするジョブによってスローされました。
  • 多くのリンクサーバーがあります。反対側のRDBMSのタイプは、SQL Server(2005および2000)、Oracle 10g、およびOSI PIシステムです。
  • この時点では断続的です。時間やイベントをエラーに関連付けることはできません。
  • もちろん、再起動するとしばらくの間は消えるように見えますが、これはエラーメッセージの性質上、理にかなっています。
  • このサーバーは、データベースサーバーだけでなく、アプリケーションサーバー(Windowsサービスのカップル)とWebサーバーの3つとして機能します。

編集:

SP3を使用しています。見つかった投稿のほとんどはSP1より前のものであり、私たちには当てはまりません。

SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

戻り値

9.00.4035.00 SP3 Standard Edition

13
Aaron Daniels

-g起動パラメーターも使用することをお勧めします。それはほとんどの人にとってうまくいくようで、おそらくあなたにもうまくいくでしょう。私の唯一の懸念は、根本的な問題が解決されない可能性があることです。たとえば、リンクサーバーが原因でメモリリークがあり、MTLが512Mbに増加した場合、メモリの問題の間隔は長くなりますか?私はその答えを知りませんが、perfmonが良いスタートになるかもしれないという点でUndertheFoldに同意する傾向があります。

4
Mike Thien

エラーメッセージ「このクエリを実行するにはシステムメモリが不足しています。」は、仮想アドレス空間(VAS)が利用できず、従来の意味でのメモリではないことを示しています。 SQL Serverプロセス空間内。

このサーバーでは3 GBしか実行しておらず、SQL Serverに最大2 GBが割り当てられている場合、これはOSとさらに重要なことには、ボックス上の他の何でも1 GB未満しか操作できないことを意味します。それは多くのメモリではありません。

この問題が実際にメモリリークの結果である場合、消費されているのはSQL Serverプロセススペース(memToLeave)外のVASです。

-g起動パラメーターを使用して、memToLeave部分により多くのメモリを割り当てることをお勧めします。

詳細については、次の記事を参照してください。

http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/

SQL Serverの最大メモリ設定を減らすこともできますが、これは最後の手段として行います。

7
John Sansom

これは、リンクサーバードライバーのメモリリークに関連している可能性があります このフォーラムのスレッドによると

以下はマイクロソフトが私たちに言ったことです。

明らかに、リンクサーバーを使用してデータを処理すると、具体的にはfox proドライバーがメモリリークを引き起こし、時間の経過とともに蓄積されます。

1
splattne

このサーバーは、データベースサーバーだけでなく、アプリケーションサーバー(Windowsサービスのカップル)とWebサーバーの3つとして機能します。

私はあなたの最小メモリを設定します-これらの他のプロセスがSQLからメモリを「盗んで」いる可能性はかなりあります

これを確認するためにperfmonを使用してカウンターログを実行したり、実際の問題が何であるかを特定するための詳細な情報を自分に与えたりすることができます。

0
CPU_BUSY

このブログから参照を引用!

この問題を解決する別の方法があります。

まず、SQL Serverの設定で「最小サーバーメモリ」と「最大サーバーメモリ」を確認します。両方の値の差が非常に小さい場合は、「最大サーバーメモリ」を増やします。

2番目、メモリ使用量情報を含む長時間実行クエリが見つかりました。このクエリがアイドル状態の場合は、このプロセスを確認して強制終了してください。データベースのパフォーマンスの最適化は、メモリ使用量の主要なものです。

3番目に、システムに適切なインデックスを作成しないと、ディスクI/Oが増加し、メモリに直接影響するため、長時間実行されるクエリのインデックスの使用状況がわかります。

4番目、仮想メモリページングファイルのサイズを確認し、このファイルのサイズを増やします。

5番目、「クエリごとの最小メモリ」のサイズを確認します実際にはデフォルトで1024 KBですが、まれにこのパラメータのサイズを小さくすることができます。実際には、これはお勧めできませんが、試すことができます。

6番目、このDBCCコマンドを実行してみてください。サーバーの全体的なパフォーマンスに影響を与える可能性があるため、これはお勧めできません。しかし、これを試すことができます。

0
Anvesh