SE の雑記

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

SQL Server 2016 の AlwaysOn 可用性グループの Redo スレッドの並列化について軽く調べてみる

leave a comment

SQL Server 2016 の AlwaysOn の機能拡張として、セカンダリレプリカの Redo スレッドの並列化 (マルチスレッド) による性能向上があるかと思います。

SQL Server 2014 までは、可用性グループの DB 毎に Redo スレッドが起動していたものが並列化されたことで、1Gbps のログの転送といったことが可能となったのが SQL Server 2016 なのですが、この辺の動作をデモで見える形で取得できないかなと思ったのが今回のお話です。

SQL Server 2014 では、Troubleshooting REDO queue build-up (data latency issues) on AlwaysOn Readable Secondary Replicas using the WAIT_INFO Extended Event のような形で確認ができていたと思うのですが、2016 でどのように取れるのかなと。

待ち事象としては並列化されたものが増えているようですね。

select * from sys.dm_os_wait_stats where wait_type LIKE '%REDO%' order by wait_type

image

スレッド数ですが情報の通り、CPU 数によって変わってくるようです。

プライマリで更新をかけているタイミングで、セカンダリで以下のクエリを実行してみます。

SELECT db_name(database_id) as DBName
FROM sys.dm_exec_requests
WHERE command = 'DB STARTUP'
select count(*) from sys.dm_os_workers
where last_wait_type like '%REDO%'

上が 8 / 下が 32 を SQL Server のスケジューラーとして認識させた状態の情報となります。

image

image

8 の場合は 6 のワーカーが、32 の場合は、18 のワーカーが起動していることが確認できますね。

CPU 数に応じて、Redo スレッドの数が異なるというデモはこれでできるのかなと。

Share

Written by Masayuki.Ozawa

6月 22nd, 2016 at 11:23 pm

Posted in SQL Server

Tagged with ,

Leave a Reply