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.2xlarge | 8 | 61 | EBS のみ | 最大 1,700 | 212.5 | 12,000 | 最大 10 |
r5.2xlarge | 8 | 64 | EBS のみ | 最大 3,500 | 437.5 | 18,750 | 最大 10 |
r5d.2xlarge | 8 | 64 | 1 x 300 NVMe SSD | 最大 3,500 | 437.5 | 18,750 | 最大 10 |
r5d.xlarge | 4 | 32 | 1 x 150 NVMe SSD | 最大 3,500 | 437.5 | 18,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適用後、メモリ利用状況が変化し、安定するようになりました。