Management Studio System.OutOfMemoryException


38

Microsoft SQL Server 2012を使用していて、Management Studio内で単純なクエリを実行しようとしています。次のエラーが表示されます(SSMSで、サーバーで実行中):

バッチの実行中にエラーが発生しました。エラーメッセージは次のとおりです。タイプ 'System.OutOfMemoryException'の例外がスローされました。

システムには24GBのRAMがインストールされていますが、タスクマネージャーで見ると、sqlservr.exeプロセスは2.9GBしか使用していません。

RAMの使用を制限している設定はどこかにありますか?

回答:


39

このエラーは、Management Studioがメモリ不足であり、SQL Serverサービスではないことを示しています。64ビットSQL Serverをインストールした場合でも、SQL Server Management Studio実行可能ファイルは32ビットアプリケーションです。

これは、Management Studioに返す結果セットのサイズが原因である可能性があります。SELECT * FROM really_big_tableのようなものを実行していますか?詳細については、http://support.microsoft.com/kb/2874903を参照してください


19

Mikeは、受け取ったエラーメッセージは、SQL Serverからではなく、Management Studioアプリケーション自体からのものであることは正しいです。おそらく、クライアントアプリケーションに160億行をプルしようとするために使い尽くされたローカルワークステーションのメモリです(グリッド内の多くのデータのレンダリングはメモリの点で非常に高価なので、TOPなどを使用してクエリを制限してください。-とにかくすべてのローカルメモリを使い果たすのに十分なデータでどのような実用的なことができるのかわかりません)。

しかし、別の問題に対処したいと思います。タスクマネージャーを使用して、SQL Serverが使用しているメモリの量を評価します。これをしないでください。それは大胆な嘘つきです。この回答からコピーします(あなたの質問は2つあるので、重複として閉じることはできません):


タスクマネージャーを信頼して、SQL Serverが使用しているメモリ量を知ることは決してできません。この期間、タスクマネージャーの使用を停止します。パフォーマンスカウンターを使用します-DMVを使用してパフォーマンスカウンターを照会することもできます。

SELECT object_name, cntr_value 
  FROM sys.dm_os_performance_counters
  WHERE counter_name = 'Total Server Memory (KB)';

[ツール]> [オプション]> [環境]> [キーボード]> [クエリショートカット]でクエリショートカットとして保存し、タスクマネージャーから不正確な結果を取得するよりもはるかに速くクエリウィンドウで正確な結果を取得できます。

これらのクエリを使用して、メモリの負荷(およびそれについて何かできるかどうか)も確認できます。

SELECT object_name, cntr_value
  FROM sys.dm_os_performance_counters
  WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_kb FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

EXEC sp_configure 'max server memory';

上記のコマンドは、SQLの新しいバージョン用です。SQL 2008 R2サーバーの場合、コマンドは若干異なります。コメントのフォローアップとして、これらのサーバーは、ここに入れて十分にフォーマットしないために病気にこの下の下に別の投稿を追加
デヴィッド・ブリッジ


9

IntelliSenseをオフにすると役立つことがわかりました。また、使用しているアドインを確認することをお勧めします(RedGateツールやApexSQLなども問題を悪化させました)。

この問題は何日も悩みましたが、正直なところ、Microsoftには非常に弱いです。最近はビッグデータ、64ビットサーバー、デスクトップ環境を扱っているため、実際には64ビットツールセットが必要です。


1
私の場合、RedGate SQL Promptはインテリセンスに組み込まれたSSMSと戦っていました。SSMSインテリセンスをオフにすると、SQLプロンプトの動作も改善されました。
TTT

1

SQL 2008 R2の場合、メモリクエリコマンド(Aaron Bertrandの投稿から)は次のとおりです。

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Total Server Memory (KB)';

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

また、コマンド

EXEC sp_configure 'max server memory';

詳細オプションを有効にしていないと機能しない場合があります。たとえば、これを最初に行う

EXEC sp_configure 'show advanced options',1
RECONFIGURE

1

これには、SSMSメモリリークであるため、Microsoft接続の問題があることに注意してください。彼らはv16.5で解決したと思う

こちらをクリックして、Connect.microsoft.comの問題をご覧ください。

最新版をインストールしても問題が解決しない場合は、再度投票して投票してください。

SSMS v16.5はこちら

16.5で修正されたメモリリークを示す接続の問題はこちら

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