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


13

かなり長い間(数年)安定して稼働している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


このエラーに関する追加の詳細がある可能性があるため、SQL Serverエラーログを確認できます。
ジョンサンソム

回答:


4

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


7

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

このサーバーで3GBのみで実行され、SQL Serverが2GBまで割り当てられていることを考えると、これは、OSおよびより重要なことにボックス上の他のものは1GB未満で遊ぶことを意味します。それはメモリの多くではありません。

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

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

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

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

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


良い記事。オーサリングもありがとう!SQLログには、いくつかのAppDomainsのアンロードがあります。CLRストアドプロシージャは2つしかなく、基本的には、Webサービスとの間でデータを送受信するだけです。これらの2つのCLRストアドプロシージャがすぐに使用するVASが多すぎるのは奇妙に思えます。
アーロンダニエルズ

どういたしまして。ご存知かもしれませんが、memToLeaveのデフォルトの割り当てはわずか256MBです。これは、特にサーバーで使用可能なすべてのメモリを使用している場合、AppDomain、すべてのCLR /マネージコード、リンクサーバークエリ、SSISなどの非常に小さなサンドボックスです。-g起動パラメーターを使用して、512MBに倍増することをお勧めします。
ジョン・サンソム

1

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

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

リンクサーバーを使用して、特にfox proドライバーを使用してデータを処理すると、メモリリークが発生し、時間の経過とともに増加します。


0

このサーバーは、データベースサーバーだけでなく、アプリケーションサーバー(Windowsサービスのペア)とWebサーバーの3倍になります。

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

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


0

このブログから引用した参考文献!

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

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

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

第三に、適切なインデックスを作成しないと、システムのディスクI / Oが増加し、メモリに直接影響するため、長時間実行されるクエリのインデックスの使用法を見つけました。

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.