SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server Standard Edition のメモリリソースの制限を Express Edition で確認する

leave a comment

SQL Server は SQL Server 2016 SP1 からエディション間の機能差が緩和され、従来までは Enterprise Edition でしか使用できない機能の一部が、空以外のエディションでも利用できるようになりました。

また、SQL Server 2014 / SQL Server 2016 では、Standard Edition で使用可能なハードウェアリソースについても上限が緩和されました。

  • SQL Server 2014
    • メモリサイズ: 64 GB -> 128 GB
  • SQL Server 2016
    • CPU コア数: 4 ソケットまたは 16 コアのいずれか小さいほう -> 4 ソケットまたは 24 コアのいずれか小さいほう
    • 以降、投稿を書いている時点で GA している最新バージョンの SQL Server 2019 まで同一のリソース上限です

SQL Server 2012 では、次のようになっていました。

  • CPU コア数: 4 ソケットまたは 16 コアのいずれか小さいほう
  • メモリサイズ: 64 GB

最新の SQL Server にすると、ハードウェアリソースの上限もだいぶ変わりますね。

2012 ~ 2016 までのサポート機能は次の情報から確認することができます。

SQL Server 2012 から最新の SQL Server に移行する場合、Standard Edition でも使用可能なリソース / 機能が増えているため、現行は Enterprise を使用していても移行後は Standard を使用するという選択肢をとることもあるのではないでしょうか。

Standard を使用する場合、よく聞かれる質問が「128 GB 以上のメモリを搭載していて意味があるか?」というものです。

SQL Server が使用するメモリと OS / SQL Server 以外のアプリケーションが使用するメモリを考慮すると、128 GB 以上のメモリを踏査することの意義は十分にあるのですが、実際に SQL Server Standard Edition でどの程度メモリが使用できるのかの実際の値をとることについては、128 GB を超えるメモリを搭載している環境の準備が難しいので実施してはいませんでした。

メモリリソースの制限ですが、Express Edition でもサイズは異なりますが、上限が設定されています。

  • メモリサイズ: 1,410 MB

Standard Edition の上限を超えるメモリの環境を用意できなくても Express Edition の 1.4 GB のメモリ制限がどのように動作するかを確認することで、Standard Edition のメモリ制限がどのように動作するのか把握することができます。

詳細な情報については、次の技術情報を確認してください。

現在の SQL Server のドキュメンでは最大メモリは「インスタンスごとのバッファプールの最大メモリ」という記載になっており、過去のバージョンの SQL Server では、異なる記載になっていますが、これは、

The memory consumed by caches outside buffer pool is not restricted by above memory limits and can grow up to limits defined by "max server memory". This is not specific to SQL Server 2016 SP1 and is also applicable to earlier releases of SQL Server as well.

となっており、基本的な考え方はそれより前のバージョンの SQL Server も同様となります。(表現方法が変わっただけで動作は同一)

実際に SQL Server 2022 RC0 Express Edition を稼働させた環境で、様々なメモリを使用した環境が以下になります。

image

SQL Server のプロセス (Process\Working Set) で 5.5 GB 程度メモリを使用していることが確認できます。

SQL Server 2019 以降のメモリについては次のように記載されています。

image

「SQL Server データベース エンジン のインスタンスごとのバッファー プールの最大メモリ」が「1,410 MB」となっています。

記載されているメモリですが、「バッファキャッシュ (データキャッシュ)」のメモリ上限となり、上述の画像であれば「Memory Manager\Database Cache Memory (KB)」が「1,442,928 KB」となっており、これ以上、データのキャッシュを行うことができません。

現状、5.5 GB のメモリを使用しているのですが、残りの「4.1 GB」は「データキャッシュ以外」のメモリとなり、今回の環境であれば、

  • SQL Server のプロセス
  • ワーカースレッド
  • ワークスペースメモリ
  • ロックメモリ
  • プランキャッシュ

というように、データキャッシュ以外の用途でメモリを使用します。

 

SQL Server のスケールの上限に記載されているメモリ上限は「データキャッシュ」の上限となり、SQL Server はそれ以外の用途でメモリを確保して使用します。

SQL Server では max server memory (MB) という設定があり、この設定が、バッファプールとそれ以外で使用するメモリの上限となります。(ワーカースレッドについては、設定したメモリサイズ外で取得されます)

SQL Server が使用できるメモリについては、次のようになります。

image

Standard Edition までは、Edition 毎の最大メモリとして記載されているのはデータキャッシュのメモリとなり、sqlservr.exe という SQL Server のプロセスで考えた場合には、それ以外の用途でもメモリを使用するため、記載されているメモリサイズを超えて sqlservr.exe のプロセスがメモリを使用します。

Standard Edition であれば、128GB はデータキャッシュの上限となり、それ以外の用途でもプロセスはメモリを使用するので、128 GB を超えるメモリを搭載することは SQL Server 観点でも意味はあります。

また、max server memory は、データキャッシュを含む、SQL Server の主要な用途のメモリの上限を指定するものとなり、Standard Edition / Express Edition でも、SQL Server のプロセスがどの程度メモリを使用するかを制御するのに設定として重要となります。

 

今回は、Express Edition を Standard Edition のメモリリソース制限の代替として使用しましたが、Express Edition を使用しても、

  • ドキュメントに記載されているバッファプールの最大メモリサイズが何を表しているか
  • それ以上のメモリをどう際することの意味
  • max server memory の設定の効果

を確認することができます。

Standard Edition のメモリリソースの上限を検証することができる環境を用意することが難しくても、Express Edition のリソース上限に達する環境の用意は容易かと思います。

Standard Edition の最大メモリサイズが SQL Server の動作にどのように影響するかについては、本投稿のような内容を使用することで Express Edition で代替して確認することができるのではないでしょうか。

Share

Written by Masayuki.Ozawa

8月 31st, 2022 at 8:59 pm

Posted in SQL Server

Tagged with

Leave a Reply