2016-08-17 24 views
14

実際にどれくらいの(実際の)メモリが使用されているかを確認するにはどうすればよいですか? が使用されているのと比較して、SQL Serverはどれくらい割り当てられていますか?SQL Serverでメモリを解放するにはどうすればよいですか?

私はmemory_utilization_率に頼られてきたが、それはメモリを解放するために、以下を実行した後に変更していないようです。

SELECT [Memory_usedby_Sqlserver_MB] = (physical_memory_in_use_kb/1024) , 
     [Memory_utilization_percentage] = memory_utilization_percentage 
FROM sys.dm_os_process_memory; 

DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE 
DBCC FREEPROCCACHE 

SELECT [Memory_usedby_Sqlserver_MB] = (physical_memory_in_use_kb/1024) , 
     [Memory_utilization_percentage] = memory_utilization_percentage 
FROM sys.dm_os_process_memory; 

ソリューションは、SQL Serverの最大サーバーメモリをドロップし、それが再び使用されていないが、割り当てられたメモリを解放するために、SQL Serverを強制的に増加させることです。しかし、このアプローチの問題は、最大サーバーメモリをどれくらい減らしてSQL Serverを強制終了する危険性があるかわからないということです。このため、の最大サーバーメモリの値を減らす前に、SQL Serverが実際にどれだけ使用しているかを理解することが重要です。

+2

、彼らは単にページをマーク:

この記事をsqlskillsは監視し、必要に応じてスロットルを上げることによって、その後スロットリングのためのベースラインを推奨しています利用可能な機能に関連しています。サーバがメモリを割り当てた後は、それを保持します。高価な再編成とフラッシュを実行する理由はありません。最大メモリオプションは例外です。実際の質問はおそらく*なぜ*あなたはこれを行う必要がありますか? –

+0

アクティブアクティブインスタンスの場合、SQL Serverインスタンスは必要以上に多くのメモリを保持することがあり、必然的に必要な他のインスタンスを制約します。ノードあたりのインスタンス数が少なくて済み、物理メモリーを増やす以外の方法として、これに対処するより良い方法はありますか? – Tigerjz32

+3

1)この質問はDBAに属します。 2)これをしないでください。 SQL Serverに使用可能なメモリ量を教えてください。一般的には、それが必要と思うほど多くのメモリを使用します。データベース全体のサイズに加えて、メモリの上限より大きい。これをしたくない場合は、 'max server memory'設定を使って制限を設定する必要があります。 – Ben

答えて

0

「最大サーバーメモリ」には1〜2 GBの値を設定する必要があります。この範囲はほとんどの場合安全です。これは、下記の実行後にメモリを解放するために時間がかかることがあります。

sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
sp_configure 'max server memory', 1024; 
GO 
RECONFIGURE; 
GO 

設定は、プールをクリアすることを可能にすること、メモリをコンパイルし、すべてのキャッシュなど

CLRメモリ、「最大の最小値をサーバーメモリ 'は128 MBですが、特定の構成でSQL Serverが起動しない可能性があるため推奨されていません。そのような場合は、 "-f"スイッチを使用して最小限の設定でSQLを開始し、元の値に変更します。このポストは、以下のリンクで解決され

+0

ありがとうございました!しかし、1-2GBが安全だと仮定するのではなく、「最大限のメモリ」を落とすべき最低の数を把握する方法はありますか? – Tigerjz32

+0

多くのパラメータと設定に依存しているとは思わないので、最小値まで安全にクリアするオプションはありません。 128 MBが設定されたMSでも最小ですが、推奨しません。なぜあなたはそれを解放する必要がありますか?あなたは、多くのメモリを消費するサーバー上で何かを実行しますか? – Anton

+0

サーバはアクティブ - アクティブクラスタ上で実行されます。つまり、任意のインスタンスが特定の時点でノードのいずれかで実行されます。インスタンスAがその時点で必要以上に多くのメモリを割り当てた場合、インスタンスBはそれ自身に割り当てることができないか、または使用するメモリが少なくて済みます。これを避けるには、インスタンスAから手動でメモリを解放する必要があります。メモリを解放する最も良い方法は、最大メモリを落として再度メモリを増やすことです。ドロップするには、進行中のプロセスに影響を与えることなく、どれだけ落とすかを知る必要があります。 – Tigerjz32

-1

、フォーマットを確認してください。

SQL Server not releasing memory after query executes

+0

残念ながら、そうではありません。複数のコメントで述べたように、アクティブなアクティブクラスタであるため、最大サイズを制限するのではなく、メモリを解放したいと考えています。 – Tigerjz32

0

私が割り当てられたメモリを解放する方法のためのソリューションを持っていません。しかし、私たちの目的のために、アクティブ/アクティブクラスタを安全に実行する方法を理解することができました。 の最小サーバーメモリを〜2GBに設定することにしました。これは、インスタンスがどれだけの最大メモリを使用するかにかかわらず、メモリから他のインスタンスを実行することはないため、有用です。しかし、これもやはり私たちの目的を解決しますが、実際に使用されているメモリの量、最大サーバーメモリをどれくらい減らすことができるか、という質問にはまだ答えません。

0

SQL Serverオペレーティングシステムが積極的に要求しない限り、メモリは解放されます。より多くのメモリを要求する他のプロセスが存在し、SQL Serverがまったく存在しない場合、SQL Serverは使用されていないメモリを単独で解放します。余裕のないメモリをフラッシュするのではなく、おそらくSQLの最大許容メモリを制限するつもりです。さらに詳細については

sp_configure 'show advanced options', 1 
GO 

RECONFIGURE 
GO 

sp_configure 'max server memory', 512; --or some other value 
GO 

RECONFIGURE 
GO 

、あなたは、このMSDNの記事をチェックすることができ:https://msdn.microsoft.com/en-us/library/ms178067.aspx

1

SQL Serverは、常にそれがプライマリアプリケーション実行中であると想定。リソースを共有するようには設計されていません。利用可能なメモリはすべて使用され、「最大サーバメモリ」を使用しないとオペレーティングシステム用に解放されます。

設計上、SQL Serverは他のサーバーとうまく動作しません。

https://www.sqlskills.com/blogs/jonathan/how-much-memory-does-my-sql-server-actually-need/

DBCC無料通話がバックオペレーティングシステムにメモリを解放するように設計されていない
関連する問題