現象

Microsoft SQL Server 2016 または Windows の SQL Server 2017 では、次の条件に該当する場合、パフォーマンスが低下することがあります。

  • 複数の同時実行を実行する場合は、[操作] をテンポラリテーブルに選択します。

  • Sys.dm_os_waiting_tasks のクエリを行います。 この状況では、複数の要求について、[ページの空き領域 (PFS)] ページの [ Resource_description ] 列が表示されます。

原因

INSERTSELECT の INSERT の SELECT 操作は、SQL Server 2016 または Windows の SQL Server 2017 で導入されました。 ローカルの一時テーブルへの挿入 (# prefix で識別されるもののみ、および # # prefix で識別されるグローバルな一時テーブルの場合のみ)、非一時的なテーブルに必要な TABLOCK ヒントを指定せずに、並列処理が自動的に有効になります。 通常、INSERT の並列処理はクエリのパフォーマンスを向上させますが、同時に複数のテンポラリテーブル INSERTSELECT 操作がある場合は、競合が PFS ページに対して有効になることがあります。 場合によっては、パフォーマンスが全体的に低下することがあります。

解決方法

この問題は、 SQL Server 2016 Service Pack 1で最初に修正されています。 SQL Server 2016 SP1 を適用した後、[挿入] に平行に挿入されます。[ ローカル一時テーブルを有効にする] は既定で無効になっています。これにより、PFS ページでの競合が少なくなり、同時ワークロードの全体的なパフォーマンスが向上します。 ローカルのテンポラリテーブルへの並列挿入が必要な場合は、ローカルのテンポラリテーブルに挿入するときに、 TABLOCK ヒントを使用する必要があります。「回避策」セクションで説明されているトレースフラグ9495を有効にしている場合は、SQL Server 2016 SP1 をトレースフラグ9495として適用した後にトレースフラグを無効にして削除することをお勧めします。 TABLOCK ヒントに関係なく並列挿入が無効になります。

累積的な更新プログラムの情報

この問題は、SQL Server 2016 の次の累積的な更新プログラムで修正されました。

SQL Server の累積更新プログラムについて

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

ご意見をいただきありがとうございます。

×