フルスキャンの更新統計では、SQL Server 2008 R2でCPUの20%を使用しているのに、同じテーブルで同様のハードウェア機能を使用しているのに、SQL Server 2014でCPUの100%を使用するのはなぜですか?
私はMAXDOP
やその他のオプションを見てきましたが、特に目立つものは何もありません。これを引き起こす可能性のある設定があることは承知していますが、設定は両方のデータベースで非常に似ています(たとえば、MAXDOP
は両方とも4で、両方に複数のコアがあります)。どちらもEnterprise Editionです。
SQL Server 2014とSQL Server 2008 R2では、これを説明できる「異なる」ものはありますか?両方のサーバーでメモリオプションを90%にしています。何を探すべきかについての考えはありますか?
SQL Server 2008 R2/SP3とSQL Server 2014/SP2を使用する2台のサーバーで、週に1回フルスキャン(100%)で統計更新を実行していますが、データベースの構造は同じです。 2008 R2サーバーでは、2つの非常に大きなテーブルの更新統計に数時間かかりますが、これは予想どおりですが、CPUは全体の使用率が20%未満にとどまります。ただし、2014サーバーでは、CPUは約40分間100%になります。テーブルは2014サーバーでは少し小さくなっています。 SQLモニターの分析メニューを使用してこれを確認します。
これは、2014 SQL ServerのOlaログファイルの出力です。CPUは、約2:10から2:45まで100%になります。
Date and time: 2017-06-24 02:10:20
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000005_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:07:48
Date and time: 2017-06-24 02:18:08
Date and time: 2017-06-24 02:18:08
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000006_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:32:22
Date and time: 2017-06-24 02:50:30
上記の2つの統計の2008 R2 SQL ServerのOlaログファイルの出力を次に示しますが、CPUはおそらく15%になります。
Date and time: 2017-06-24 03:30:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000003_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:05:00
Date and time: 2017-06-24 03:35:32
Date and time: 2017-06-24 03:35:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000004_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:52:31
Date and time: 2017-06-24 04:28:03
サーバーのmaxdop = 1でこれらを実行することはできません。これにより、すべての並列プランの生成が排除され、アプリケーションに悪影響を与える可能性があります。私は反対方向に進み、それを8に増やし(ボックスには16コアがある)、何が起こるかを確認する予定です。 CPUがペグされる時間を短縮するために、より高速になる場合があります。このジョブは、ユーザーがほとんどいなくなったときに実行されます。
統計の更新は、SQL Serverのさまざまなオプションに基づいて並行して実行できます。
SQL Serverの新しいバージョン(2016以降)では、これはさらに複雑になります。
お気づきのように、2008R2はシングルスレッド化されていますが、2014はマルチスレッド化されています(したがって、より速く終了しますが、実行中にCPUを最大限に活用します)。
統計ジョブの適切なバランスを見つけるには、次のことを考慮してください。
推測:統計を更新するために選択された計画は、2008 R2ボックスよりも2014ボックスで並列か、より並列です。
fullscan
の並列更新統計は2005年以降であり、2016年以降のサンプル統計については、SQL ServerデータベースエンジンブログのGjorgji Gjeorgjievskiによる SQL Server 2016のクエリオプティマイザーの追加 を参照してください。
Enterprise Editionを使用している場合は、 Resource Governor を使用して、メンテナンスジョブで使用されるCPUを制限できます。
また、Javier VillegasによるConnect提案 Add MAXDOP
parameter to Update Stats への投票も検討してください。
関連Q&A: 並列統計の更新