サーバー構成: access check cache
適用対象: SQL Server
データベース オブジェクトに SQL Serverからアクセスすると、アクセス チェックが access check result cacheと呼ばれる内部構造にキャッシュされます。 アドホック クエリの実行率が高い SQL Server のインスタンスでは、sys.dm_os_memory_cache_entries
ビューにクラスが 65535 のアクセス チェック トークン エントリが多数存在する場合があります。 クラスが 65535 のアクセス チェック トークン エントリは、特殊なキャッシュ エントリを表します。 これらのキャッシュ エントリは、クエリの累積的なアクセス許可チェックに使用されます。
たとえば、次のクエリを実行します。
SELECT *
FROM t1
INNER JOIN t2
INNER JOIN t3;
この場合、SQL Server ではこのクエリの累積的なアクセス許可チェックを計算します。 このチェックでは、ユーザーが t1
、t2
、t3
に対する SELECT 権限を持っているかどうかを判定します。 これらの累積的なアクセス許可チェックの結果は、アクセス チェック トークン エントリに埋め込まれており、ID が 65535 のアクセス チェック キャッシュ ストアに挿入されます。 同じユーザーがこのクエリを複数回再利用または実行する場合、SQL Server ではそのアクセス チェック トークン キャッシュ エントリを 1 回再利用します。
このキャッシュの使用を最適化するには、さまざまなクエリ パラメーター化手法の使用するか、よくあるクエリ パターンをストアド プロシージャを使用するように変換することを検討してください。
access check cache bucket count
オプションは、access check result cache に使用されるハッシュ バケットの数を制御します。
access check cache quota
オプションは、access check result cache に格納されるエントリの数を制御します。 エントリが最大数に達すると、最も古いエントリが access check result cache から削除されます。
注釈
既定値は 0
で、SQL Server がこれらのオプションを管理していることを示します。 既定値は次の内部構成に変換されます。
SQL Server 2016 (13.x) 以降のバージョン
構成設定 | サーバー アーキテクチャ | 既定のエントリ数 |
---|---|---|
access check cache quota |
X64 | 1,024 |
access check cache bucket count |
X64 | 256 |
SQL Server 2008 (10.x) から SQL Server 2014 (12.x) まで
構成設定 | サーバー アーキテクチャ | 既定のエントリ数 |
---|---|---|
access check cache quota |
x86 | 1,024 |
x64 と IA-64 | 28,192,048 | |
access check cache bucket count |
x86 | 256 |
x64 と IA-64 | 2,048 |
まれに、これらのオプションを変更することによってパフォーマンスが向上する場合があります。 たとえば、メモリの使用率が高すぎる場合は、access check result cache のサイズを小さくした方がよいでしょう。 または、アクセス許可の再計算時に CPU の使用率が高い場合、access check result cache のサイズを大きくします。
これらのオプションはマイクロソフト カスタマー サポート サービスから指示があった場合にのみ変更することをお勧めします。 access check cache bucket count
と access check cache quota
の値を変更する場合は、1:4 の比率を使用します。 たとえば、access check cache bucket count
の値を 512
に変更する場合は、access check cache quota
の値を 2048
に変更する必要があります。