SQL Serverの最大メモリがRAMの使用を制限しない


18

これについてのご意見をお願いします。SQL Server 2008r2 Entがあります。エド。16コアおよび64GB RAMを備えた64ビット。20111014の時点で完全に修正されたSQLサーバーのインスタンスが1つあります。

最大RAMは60000MBに設定されています。オンラインで数日後のタスクマネージャーによると、フリーラムの量は0です。

最大RAMを53GB未満に変更すると、数日後に安定し、空きRAMが確保されます。

タスクマネージャーに従ってRAMを割り当てるのは、SQLプロセスです。問題が実際に何であるかをどのように判断しますか?言うまでもなく、私は既に多くのテストを行ったが、これを私の好みにまだ解決していない。また、使用可能なRAMが0になったときに、通常のメモリ不足が発生することはありません。

更新1:

このページ/dba//a/7062/2744の RAMに関する別のQ / Aに触発されました。これら2つを使用して、RAMの用途を確認しました。

SELECT TOP ( 10 )
        [type] AS [Memory Clerk Type] ,
        SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM    sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION  ( RECOMPILE ) ;

SELECT  DB_NAME(database_id) AS [Database Name] ,
        COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM    sys.dm_os_buffer_descriptors
--WHERE   database_id > 4 -- system databases
--        AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC
OPTION  ( RECOMPILE ) ;

これらによって示される使用量は、最初に選択された7948432 Kb、2番目の1つ44030,57812 MBであり、SQLサーバーで使用される合計約52GBです...それで、残りのRAMはどこに行きましたか?:-)タスクマネージャーは、現在キャッシュ363、使用可能401、無料40、sqlservr.exeにはメモリプライベートセット64 459 656が表示されています。以前と同様に最大RAMが60000MBに設定されています。

回答:


20

SQL Serverの最大メモリ設定は、バッファプールの使用の制限のみを定義します。制限はありますが、可変ではありますが、かなりの割り当てが必要になります。

Jonathan KehayiasChristian BoltonJohn Samsonのトピックに関するレベル300/400の投稿があります。Brent Ozarには読みやすい記事があり、開始するのに適しています。

また関連:SQL Server 2008 R2“ Ghost Memory”


はい、バッファプールのみを制限することに同意します。ブックマークを見てくれてありがとう。
マーティンシェーベルグ

私はそれらのリンクを読んでいて、いくつかの良いものがあります。見つけたもので質問を更新します。また、Max Pizzeriaの番号をすぐに入手できることを思い出しました。
マーティンシェーベルグ

16

前述のように、バッファプールとプロシージャキャッシュは、最大サーバーメモリによって制御される唯一のものです。SQL Serverには、その制限を超えてメモリを食い尽くす可能性のある他の多くのものがあります。以下が含まれます(ただし、これらに限定されません)。

  • データベースメール
  • SQLCLR
  • 拡張ストアドプロシージャ
  • それら自身のバイナリ
  • SQL Mail
  • SSIS
  • SSAS
  • SSRS

上記のうち、このサーバーではバイナリofcとssisを使用します。
マーティンシェーベルグ

1
サーバーにインストールされている他のソフトウェアは何ですか?そして、私は何を意味します。MPIOドライバー、フラッシュドライブドライバー、バックアップソフトウェア、ウイルス対策、sys-internalsなど
mrdenny

サーバーはかなりきれいで新しくインストールされていますが、いくつかあります。今週の終わりに、完全なリストをまとめてみます。ショートと私の記憶から...我々はiodrive(デル)、マカフィー、デスクトップ上のprocessexplorer、Iometerの、treesize ...持っていない
マーティンSjöberg

1
FusionIOドライバーを使用するには、大量のメモリが必要です。それはおそらくそれの多くを取っています。
mrdenny

これを証明することは可能ですか?または、より少ないRAMを使用するように構成しますか?これまでのところ、必要なときにRAMを解放しているようで、欠点に気付いていませんが、RAMの使用で何が起こるか心配しているssisパッケージの量を増やす必要がある場合に備えてください。
マーティンシェーベルク


2

http://msdn.microsoft.com/en-us/library/ms178067.aspx

最大サーバーメモリを削減するには、SQL Serverを再起動してメモリを解放する必要があります。

私の理解では、バッファプール内のページがディスクに書き込まれていない場合、ページが書き込まれるまで解放されません。

最大メモリ設定を下げると、SQL Serverはダーティページをフラッシュしますか?

彼はそれを確認するために、perfmonのバッファーマネージャーを監視できました。Perfmon-> SQLServer:Buffer Manager:データベースページ


SQL Serverを再起動する必要がある場合があります。常に必要というわけではありません。メモリを解放するために再起動が必要かどうかの条件を知っていますか?
ニックチャマス

これらの詳細を既存の回答に編集して、この回答を削除します。おそらく、mrdennyはダーティページのフラッシュに関する質問に答えることができます。
ニックチャマス

1
正しい、SQLはメモリページをダーティ(書き込み済み)の間は解放できません。システムがチェックポイントを設定するたびに、ダーティページがディスクに書き込まれます。最大サーバーメモリを変更するとチェックポイントが発生するとは思わない。
mrdenny

1
インスタンスを再起動してメモリ設定を変更することは大きな間違いです。メモリ設定を変更CHECKPOINTしてもデータベースでの操作は発生しませんが、プロシージャキャッシュは消去されます。メモリ設定を変更するためだけにインスタンスを再起動すると、プロシージャキャッシュがコールドになるだけでなく、データキャッシュもコールドになります。メモリ内のダーティページが原因で最大メモリを削減できない場合はCHECKPOINT、データベースでコマンドを実行してダーティページをディスクにフラッシュし、オフピーク時にインスタンス再起動せずにメモリ設定を変更します。
ジョンセイゲル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.