CACHESTORE_SQLCP SQLプランは、数日後に> 38 GBを消費します。
「アドホックワークロード用に最適化」オプションをオンにして実行しています。 (Entity Frameworkとカスタムレポートは多くのアドホックを作成します!)
マルチAZミラーリングを使用したAWS RDS上のSQL Server 2016 SE 3.00.2164.0.v1
私が走ると:
_DBCC FREESYSTEMCACHE('SQL Plans');
_
または
_DBCC FREEPROCCACHE
_
または
_DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
_
または
_DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
_
それはそれをクリアしていないようです:
_SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb desc
type name pages_kb
CACHESTORE_SQLCP SQL Plans 38321048
_
クエリストアを有効にして実行していたのですが、クエリストアを無効にして、それが何かを妨げているかどうかを確認しました。
本当に変なのも
_SELECT COUNT(*) FROM sys.dm_exec_cached_plans
_
1〜3程度(現在実行中のクエリしか表示されないように見えます)、すべてのメモリは予約されていますが、何も消去しようとする前でも、何が欠けていますか?
CACHESTORE_SQLCPが使用可能なすべてのメモリの60%以上を占めています。これは、時々発生するメモリ待機があるため、問題になります。さらに、メモリ不足のため待機がスタックされていたため(PHYSICAL_ONLYをオンにしてエラーなしで即座に完了したため)、週末に4時間続くルーチンDBCC CHECKDBを強制終了する必要がありました。
このメモリを再利用する方法はありますか(毎晩の再起動以外!)?
私が走るとき
_SELECT * FROM sys.fn_my_permissions(NULL,NULL)
_
私は得る
_entity_name subentity_name permission_name
server CONNECT SQL
server CREATE ANY DATABASE
server ALTER ANY LOGIN
server ALTER ANY LINKED SERVER
server ALTER ANY CONNECTION
server ALTER TRACE
server VIEW ANY DATABASE
server VIEW ANY DEFINITION
server VIEW SERVER STATE
server ALTER SERVER STATE
server CREATE SERVER ROLE
server ALTER ANY SERVER ROLE
_
必要な_ALTER SERVER STATE
_権限が含まれています。
_DBCC FREEPROCCACHE
_の出力は
DBCCの実行が完了しました。 DBCCがエラーメッセージを出力した場合は、システム管理者に連絡してください。
これが標準メッセージです。 RDSがサポートしていない他のDBCC関数は、アクセス許可に関するエラーメッセージを表示します。
(1日後、それを再度実行した後も、SQLプランは38,321,280 kbです)
_SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools
_
出力:
_pool_id name cache_memory_kb compile_memory_kb
1 internal 38368408 1168080
_
DBCC FREEPROCCACHE ('internal')
は何も異なることはありません
SQLエラーログは毎回次のログを記録します。
_2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
_
RDSでは、13.00.2164.0.v1から13.00.4422.0.v1へのエンジンバージョンのアップグレードが利用可能です。自動マイナーバージョンアップグレードに設定されていますが、最新に更新されているようには見えません。今週末、再起動してインストールし、効果があるかどうかを確認します。
13.00.4422.0.v1(SQL Server 2016 SP1)にアップグレードして再起動しました。
これまでのところ、DBCC FREESYSTEMCACHE('SQL Plans');
コマンドを使用してSQLプランのメモリをクリアできます。
メモリが少し賢く使用されているかどうかを確認する時が来ますが、少なくとも今度は、肥大化した場合にリセットする方法があります。
DBCC FREEPROCCACHE
またはDBCC FREESYSTEMCACHE
を実行するには、アカウントに権限ALTER SERVER STATE
が必要です。
サーバーでのALTER SERVER STATE権限が必要です。
DBCC FREEPROCCACHE(Transact-SQL) (Microsoftドキュメント)
適用対象:SQL Server、Parallel Data Warehouse
- サーバーでのALTER SERVER STATE権限が必要です。
AWS RDSはリソースガバナー設定を許可しますか?はいの場合、構文は次のとおりです。
DBCC FREEPROCCACHE ('<pool_name>').
次のプールがあるかどうかを確認します。
SELECT * FROM sys.dm_resource_governor_resource_pools
次のコマンドを実行して、これらの権限があるかどうかを確認します。
SELECT * FROM sys.fn_my_permissions(NULL,NULL)
記事 Amazon RDS上のMicrosoft SQL Server の章に記載されているように、AWS RDSインスタンスの管理者に付与されるアクセス許可にはいくつかの制限があります Microsoft SQL Serverのセキュリティ
ここで概要:
次のサーバーレベルのロールは、現在Amazon RDSでは使用できません。
- bulkadmin
- dbcreator
- diskadmin
- securityadmin
- serveradmin
- システム管理者
次のサーバーレベルの権限は、SQL Server DBインスタンスでは使用できません。
- 管理者の一括操作
- 資格情報を変更
- イベント通知の変更
- イベントセッションの変更
- 任意のサーバー監査を変更
- リソースを変更
- ALTER SETTINGS(DBパラメーターグループAPIを使用してパラメーターを変更できます。詳細については、「DBパラメーターグループの操作」を参照してください。
- サーバーの認証
- CONTROL_SERVER
- DDLイベント通知の作成
- エンドポイントを作成
- トレースイベント通知の作成
- 外部アクセスアセンブリ
- SHUTDOWN(代わりにRDS再起動オプションを使用できます)
- UNSAFEアセンブリ
- ALTER ANY AVAILABILITY GROUP(SQL Server 2012のみ)
- 可用性グループの作成(SQL Server 2012のみ)
これらの制限/制限は、ドキュメントの公開後に変更された可能性があります。
ブレントオザーは記事「 SQL Server RDS 」を書いており、彼は次のように述べています...
多くのDBCCコマンドはまったく機能しません–
DBCC DBINFO
およびDBCC LOGINFO
は明示的に拒否されました。しかし、私はDBCC FREEPROCCACHE
を好きなだけ実行できることを発見しました。これらの制限は時間の経過とともに変化する可能性があることに注意してください–新しい機能は定期的に追加されます。
アカウントに必要な権限があり、キャッシュを解放できない場合は、Amazonでサポートチケットを開くことができます。