web-dev-qa-db-ja.com

Management Studio System.OutOfMemoryException

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

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

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

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

38
Ben Durkin

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

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

39
Mike Stankavich

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

しかし、別の問題に取り組みたいと思います。タスクマネージャーを使用して、SQL Serverが使用しているメモリの量を評価します。これを行わないでください。それは太字のうそつきです。 this answer からコピーします(質問は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';
19
Aaron Bertrand

私も同じです。私のSQL Server Management Studioは数日間開いていました。私はそれを再起動し、それは解決しました。

15
Barry Guvenkaya

IntelliSenseをオフにすると助けになることがわかりました。また、お持ちのアドインを確認することをお勧めします(RedGateツールやApexSQLのようなものも問題を悪化させました)。

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

9
Tahir Khalid

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
David Bridge

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

ここをクリックしてConnect.Microsoft.comの問題を参照してください

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

SSMS v16.5はこちら

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

1
David Bridge