Microsoft は、Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) の修正プログラムを1つのダウンロード可能なファイルとして配布します。 修正プログラムは累積的であるため、新しいリリースごとに、以前の SQL Server 2008 R2 Service Pack 1 (SP1) 更新プログラムに含まれていたすべての修正プログラムとセキュリティ更新プログラムが含まれています。
現象
Microsoft SQL server 2008 R2 で SQL Server のパフォーマンス条件警告が発生した場合、次のエラーメッセージが表示されることがあります。
Msg 512、レベル16、状態1、プロシージャ sp_sqlagent_get_perf_counters、行40Subquery クエリは1つ以上の値を返しました。 サブクエリが =、! =、<、<=、>、>= または式として使用されている場合、これは許可されません。
さらに、このような状況では、SQL Server エージェントのエラーログにエラーメッセージが記録されます。注: この問題は、Microsoft SQL Server 2008 でも発生します。
原因
この問題は、 msdb.dbo.sp_sqlagent_get_perf_counters システムストアドプロシージャのサブクエリでカウンターの値が誤って計算されるために発生します。 サブクエリでは、サブクエリの条件に [object_name] 列の内部結合リレーションシップがありません。 そのため、複数の行が誤って返され、「現象」セクションで説明されている問題が発生します。注: Msdb.dbo.sp_sqlagent_get_perf_countersシステムストアドプロシージャは、SQL Server のパフォーマンス条件の警告が発生したときに実行されます。
解決方法
累積的な更新プログラムの情報
SQL Server 2008 R2 SP1 の累積更新プログラムパッケージ3
この問題の修正プログラムは、累積的な更新プログラムパッケージ3で最初にリリースされました。SQL Server 2008 R2 SP1 用の累積更新プログラムパッケージの入手方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2591748 SQL Server 2008 R2 SP1 の累積更新プログラムパッケージ3注: ビルドは累積的であるため、新しい更新プログラムの各リリースには、以前の SQL Server 2008 R2 SP1 更新プログラムのリリースに含まれていたすべての修正プログラムとセキュリティ更新プログラムが含まれています。 この修正プログラムを含む最新の更新プログラムのリリースを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
2567616 SQL Server 2008 R2 SP1 がリリースされた後にリリースされた SQL Server 2008 R2 ビルド
回避策
この問題を回避するには、 msdb.dbo.sp_sqlagent_get_perf_counters システムストアドプロシージャのサブクエリを更新します。 これを行うには、 [値]列の計算で使用されている4つのサブクエリのWHERE句に次の条件を追加します。
(spi1.[object_name] = spi2.[object_name])
条件を追加すると、サブクエリは次のようになります。
SELECT CASE spi2.cntr_value WHEN 0 THEN 1 ELSE spi2.cntr_value ENDFROM sys.dm_os_performance_counters spi2WHERE (spi1.[object_name] = spi2.[object_name])AND (spi1.counter_name + ' ' = SUBSTRING(spi2.counter_name, 1, PATINDEX('% Base%', spi2.counter_name)))AND (spi1.instance_name = spi2.instance_name)AND (spi2.cntr_type = @perfTypeLargeRawBase
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。