Applies ToSQL Server 2008 Enterprise SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise

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, ниво 16, щат 1, процедура sp_sqlagent_get_perf_counters, Line 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.

Решение

Информация за сборна актуализация

Кумулативна актуализация на пакет 3 за SQL Server 2008 R2 SP1

Корекцията за този проблем е издадена за първи път в кумулативната актуализация на пакет 3. За повече информация как да получите тази кумулативна актуализация на пакета за SQL Server 2008 R2 SP1, щракнете върху следния номер на статия, за да видите статията в базата знания на Microsoft:

2591748 Кумулативна актуализация на пакет 3 за SQL Server 2008 R2 SP1Забележка Тъй като компилациите са кумулативни, всяко ново издание за актуализиране съдържа всички актуални корекции и всички актуализации на защитата, които са били включени при предишното издание на актуализацията на SQL Server 2008 R2 SP1. Препоръчваме ви да обмислите прилагането на най-новата версия за актуализиране, която съдържа тази спешна корекция. За допълнителна информация щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:

2567616 SQL Server 2008 R2, които са издадени след издаването на SQL Server 2008 R2 SP1

Заобиколно решение

За да заобиколите този проблем, актуализирайте подзаявката на 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, които са посочени в секцията "важи за".

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.