Společnost Microsoft distribuuje Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) jako jeden soubor ke stažení. Protože jsou opravy kumulativní, každá nová verze obsahuje všechny opravy hotfix a všechny aktualizace zabezpečení, které byly součástí předchozí verze aktualizace SQL Server 2008 R2 Service Pack 1 (SP1).
Příznaky
Když je v Microsoft SQL serveru 2008 R2 aktivována výstraha výkon serveru SQL, může se zobrazit tato chybová zpráva:
Msg 512, úroveň 16, stav 1, postup sp_sqlagent_get_perf_counters, řádek 40Subquery vrátil více než 1 hodnotu. Tento postup není povolený, pokud poddotaz následuje =,! =, <, <=, >, >= nebo když je poddotaz použit jako výraz.
Kromě toho se chybová zpráva v této situaci zaznamená do protokolu chyb agenta SQL serveru.Poznámka K tomuto problému dochází taky v Microsoft SQL serveru 2008.
Příčina
K tomuto problému dochází proto, že poddotazem uložené procedury msdb.dbo.sp_sqlagent_get_perf_counters systému vypočítá hodnotu čítače nesprávně. Poddotaz nemá v podmínce poddotazu relaci vnitřního spojení pro sloupec [object_name] . Z toho důvodu je nesprávně vráceno více řádků a problém uvedený v části Příznaky se zobrazí.Poznámka Pokud je aktivována výstraha výkon systému SQL Server, spustí se uložená procedura msdb.dbo.sp_sqlagent_get_perf_counters systémem.
Řešení
Informace o kumulativní aktualizaci
Kumulativní balíček aktualizací 3 pro SQL Server 2008 R2 SP1
Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci balíčku 3. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2008 R2 SP1, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
2591748 Kumulativní balíček aktualizací 3 pro SQL Server 2008 R2 SP1Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová aktualizace obsahuje všechny opravy hotfix a všechny aktualizace zabezpečení, které byly součástí předchozí verze aktualizace SQL Server 2008 R2 SP1. Doporučujeme zvážit použití nejnovější aktualizace, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2567616 Buildy SQL Server 2008 R2 vydaná po vydání SQL serveru 2008 R2 SP1
Alternativní řešení
Tento problém vyřešíte tak, že aktualizujete poddotaz pro uloženou proceduru msdb.dbo.sp_sqlagent_get_perf_counters . Chcete-li to udělat, přidejte následující podmínku do klauzule WHERE těchto čtyř poddotazů, které se používají při výpočtu sloupce [hodnota] :
(spi1.[object_name] = spi2.[object_name])
Po přidání podmínky budou poddotazy vypadat takto:
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
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.