Microsoft 將 Microsoft SQL Server 2008 R2 Service Pack 1 (SP1)修正為一個可下載的檔案。 因為修正程式是累加的,所以每個新發行版本本都包含舊版 SQL Server 2008 R2 Service Pack 1 (SP1)更新版本中所包含的所有熱修復程式和安全性更新。

徵狀

在 Microsoft SQL Server 2008 R2 中產生 SQL Server 效能條件警示時,您可能會收到下列錯誤訊息:

Msg 512、Level 16、State 1、程式 sp_sqlagent_get_perf_counters、行40Subquery 傳回1個以上的值。 當子查詢遵循 =、! =、<、<=、>、>= 或子查詢用做為運算式時,則不允許這麼做。

此外,在這種情況下,錯誤訊息會記錄在 SQL Server 代理程式錯誤記錄中。注意: 這個問題也會在 Microsoft SQL Server 2008 中發生。

原因

發生這個問題是因為 msdb.dbo.sp_sqlagent_get_perf_counters 系統存儲程式的子查詢不正確地計算計數器的值。 子查詢在子查詢的條件中,缺少 [object_name] 資料行的內部聯結關聯性。 因此,不正確地傳回多個資料列,並會出現「症狀」一節中所提及的問題。注意: 當產生 SQL Server 效能條件警示時,會執行 msdb.dbo.sp_sqlagent_get_perf_counters 系統存儲程式。

解決方案

累積更新資訊

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 更新版本中所包含的所有修復程式及所有安全性更新。 我們建議您考慮套用包含此熱修復程式的最新更新版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2567616 在發行 SQL Server 2008 R2 SP1 之後發行的 SQL Server 2008 R2 組建

因應措施

若要解決此問題,請更新 msdb.dbo.sp_sqlagent_get_perf_counters 系統儲存程式的子查詢。 若要這樣做,請在[值]資料行計算中使用的四個子查詢的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

狀態

Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×