SQL Serverのメモリ管理について解説します。
SQL Serverはデフォルトで上限なくメモリを使用する
SQL Serverは明示的に max server memoryに値を設定しないと、上限なくメモリを使用します。例えば16GBのメモリを積んでいる場合は16GBギリギリまで使用しようとします。
ただし厳密に言えばmax server memoryにはデフォルトで上限値が設定されています。ただ、その上限値が 2,147,483,647MB=2,097,151GB=2,047TB=2PB になので実質上限はなしということになります。
■参考サイト
メモリ管理アーキテクチャ ガイド
https://learn.microsoft.com/ja-jp/sql/relational-databases/memory-management-architecture-guide?view=sql-server-ver16
SQL Serverは自分自身のメモリ領域を効率的に使用するためワークスペースという領域を割り当てて管理しています。
ワークスペースのサイズ調整やワークスペースの取得や内部コンポーネントの割り当てはメモリマネージャが対応しています。
メモリマネージャは各タスクよりメモリ取得要求を受け取ると、ワークスペースからメモリを割り当てます。
プランキャッシュとは、クエリがコンパイルされクエリ実行プランにする際に利用するキャッシュである。このキャッシュでコンパイル時間を短縮することができます。
SQL Server データベース エンジンのメモリ使用率
サーバー メモリの構成オプション
https://learn.microsoft.com/ja-jp/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-ver16
以下の2つのオプションがあります。
- max server memory (MB)
- min server memory (MB)
特に max server memory(MB) のデフォルト値は 2,147,483,647 メガバイト (MB) あります。
2,147,483,647MB=2,097,151GB=2,047TB=2PBになる。つまり実質上限はなしということになります。
SQL Serverのメモリモニタリング
SQL Serverのメモリ使用状況を確認する方法について解説します。
DBCCコマンド
DBCCはDatabase Console Commandのことを言います。SQL Serverのデータベース管理用コマンドです。
メモリの状態のスナップショットを取得する
以下のコマンドを実行するとSQL Serverのメモリの状態のスナップショットを取得します。
DBCC MEMORYSTATUS
GO
Microsoft SQL Server と OS の現在のメモリ状態のスナップショットを提供します。SQL Serverのメモリ分散と使用状況の最も詳細な出力の 1 つを提供します。出力を使用して、SQL Serverのメモリ消費の問題をトラブルシューティングしたり、特定のメモリ不足エラーのトラブルシューティングを行ったりできます。メモリ不足エラーの多くは、この出力をエラー ログに自動的に生成します。
コマンド実行例
Process/System Counts Value
------------------------------------ ------------
Available Physical Memory 5060247552
Available Virtual Memory 140710048014336
Available Paging File 7066804224
Working Set 430026752
Percent of Committed Memory in WS 100
Page Faults 151138
System physical memory high 1
System physical memory low 0
Process physical memory low 0
Process virtual memory low 0
単位はバイト(Byte)です。例えばAvailable Physical Memoryの5,060,247,552は、5,060,247,552Byte=4,941,648KB=4,825MB=4.7GBになります。
例えば、Available Virtual Memoryの140710048014336は、140,710,048,014,336Byte=137,412,156,264KB=134,191,558MB=131,046GB=128TBになります。
- 使用可能な物理メモリ(Available Physical Memory): この値は、コンピューター上の空きメモリの全体的な量を示します。 この例では、空きメモリは 5,060,247,552 バイトです。
- 使用可能な仮想メモリ(Available Virtual Memory): この値は、SQL Server プロセスの空き仮想メモリの全体的な量が 140,710,048,014,336 バイト (128 TB) であることを示します。 詳細については、「 メモリとアドレス空間の制限」を参照してください。
- 使用可能なページング ファイル(Available Paging File): この値は、空きページング ファイル領域を示します。 この例では、値は 7,066,804,224 バイト(約6.6GB)です。
- ワーキング セット(Working Set): この値は、SQL SERVER プロセスが RAM に含まれる仮想メモリの全体的な量 (ページアウトされていない) が 430,026,752 バイトであることを示します。
- WS でのコミット済みメモリの割合(Percent of Committed Memory in WS): この値は、割り当てられた仮想メモリSQL Server RAM 内に存在する (またはワーキング セット) の割合を示します。 100% の値は、コミットされたすべてのメモリが RAM に格納され、その 0% がページアウトされていることを示しています。
- ページ フォールト(Page Faults): この値は、SQL Serverのハード およびソフト ページ フォールトの全体的な量を示します。 この例では、値は 151,138 です。
パフォーマンスモニター
SQL Serverのパフォーマンスモニターもメモリの使用状況の確認で利用することができます。パフォーマンス モニター はグラフィカル ツールでSQL Serverのパフォーマンスを測定することができます。
パフォーマンスモニターの起動方法
[スタート] ボタンをクリックして [ファイル名を指定して実行] をクリックし、[ファイル名を指定して実行] のボックスに「perfmon」と入力し、[OK] をクリックします。
コメント