SQLServer用のEC2のインスタンスタイプを変更したら、CPU利用率がたまに上昇

SQLServer用に利用中のEC2インスタンスをインスタンスタイプ:r4.2xlargeから、 r5d.xlargeに変更しました。
構成は、SQL Server 2016 Standard Edition(Always On 可用性グループで冗長構成)で、
変更前のSQL ServerのCPU利用率は10%ほど、メモリサイズも30GBほどでした。

インスタンス詳細

モデルvCPUメモリ (GiB)ストレージ (GiB)専用 EBS 帯域幅 (Mbps)最大スループット (MB/秒、128 KB I/O)最大 IOPS (16 KB I/O)ネットワーキングパフォーマンス (Gbps)
r4.2xlarge861EBS のみ最大 1,700212.512,000最大 10
r5.2xlarge864EBS のみ最大 3,500437.518,750最大 10
r5d.2xlarge8641 x 300 NVMe SSD最大 3,500437.518,750最大 10
r5d.xlarge4321 x 150 NVMe SSD最大 3,500437.518,750最大 10

変更に当たり、tempdbをNVMeのローカルストレージへ移動し、SQLServerに割り当てるメモリサイズは26GBへ縮小しました。
事前に同一環境で行ったHummerDBでのパフォーマンステストはr4.2xlargeより良い結果が出ていました。

ところが、インスタンスタイプを変更して数日後に突然、CPU利用率が上昇。
インデックスの使われ方やコンパイル回数が上昇したので、実行プランがおかしくなったのかと、
統計情報の更新などしましたが収まらず、原因を探っているうちに時間が経ち自然収束しました。
さらに、数日後にまた異常な状態になり、今度は数時間経っても改善せず、待機系DBへ切り替え収束させました。

CPUが高負荷になっているときは、Stolen Server Memoryが飛んで、Compilations、Table Scanが上昇していました。

運用中のSQLServerバージョンは、Microsoft SQL Server 2016 (SP2-CU2-GDR) (KB4458621) – 13.0.5201.2 (X64)で、
SQL Serverの更新プログラムを確認したところ、CU3,5でメモリ不足がらみのFIXが出ていたので、SP2 CU5適用しました。

SP2CU3
 12268546 4347088 [FIX] SQL Serverに空きページが多数ある場合でもメモリ不足エラーが発生する SQLエンジン

SP2CU5
 12532591 4461562 [FIX] SQL Server 2016および2017でクエリストアを使用するとトランザクションおよびログの切り捨てがブロックされることがある SQLエンジン
 12574520 4470916 [FIX] SQL Server 2014および2016でデータベースノードメモリ(KB)が2%を下回るとメモリ不足エラーが発生する SQLエンジン
 12480339 4480635 [FIX] SQL Server 2016に多数のバッチ要求があるとCPU使用率が高くなる SQLパフォーマンス

https://support.microsoft.com/ja-jp/help/4475776/cumulative-update-5-for-sql-server-2016-sp2

SP2CU5適用後、メモリ利用状況が変化し、安定するようになりました。


管理人 has written 31 articles