Firma Microsoft rozprowadza poprawki dodatku Service Pack 1 (SP1) dla programu Microsoft SQL Server 2008 R2 jako jeden plik do pobrania. Ponieważ poprawki są kumulatywne, każde nowe wydanie zawiera wszystkie poprawki i wszystkie aktualizacje zabezpieczeń, które zostały dołączone do poprzedniej wersji aktualizacji dodatku SQL Server 2008 R2 z dodatkiem Service Pack 1 (SP1).
Symptomy
Po uruchomieniu alertu o stanie wydajności programu SQL Server w programie Microsoft SQL Server 2008 R2 może zostać wyświetlony następujący komunikat o błędzie:
Msg 512, poziom 16, stan 1, sp_sqlagent_get_perf_counters procedury, wiersz 40Subquery zwrócił więcej niż 1 wartość. Nie jest to dozwolone, gdy podkwerendą jest następująca wartość =,! =, <, <=, >, >= lub gdy podkwerenda jest używana jako wyrażenie.
Ponadto w takiej sytuacji komunikat o błędzie jest rejestrowany w dzienniku błędów programu SQL Server Agent.Uwaga Ten problem występuje również w programie Microsoft SQL Server 2008.
Przyczyna
Ten problem występuje, ponieważ podkwerenda procedury składowanej systemu msdb.dbo.sp_sqlagent_get_perf_counters błędnie oblicza wartość licznika. W podkwerendzie dla kolumny [object_name] w warunku podkwerendy brakuje relacji sprzężenia wewnętrznego. Z tego powodu wiele wierszy jest błędnie zwróconych, a problem występujący w sekcji "Symptomy".Uwaga Procedura składowana systemu msdb.dbo.sp_sqlagent_get_perf_counters jest uruchamiana, gdy zostanie podniesiony alert dotyczący wydajności programu SQL Server.
Rozwiązanie
Informacje o aktualizacji zbiorczej
Pakiet aktualizacji zbiorczej 3 dla programu SQL Server 2008 R2 z dodatkiem SP1
Poprawka dotycząca tego problemu została po raz pierwszy wydana w pakiecie aktualizacji zbiorczej 3. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego pakietu aktualizacji zbiorczej dla programu SQL Server 2008 R2 z dodatkiem SP1, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2591748 Pakiet aktualizacji zbiorczej 3 dla programu SQL Server 2008 R2 z dodatkiem SP1Uwaga Ponieważ kompilacja jest zbiorcza, każda nowa wersja aktualizacji zawiera wszystkie poprawki i wszystkie aktualizacje zabezpieczeń, które zostały dołączone do poprzedniej wersji aktualizacji programu SQL Server 2008 R2 z dodatkiem SP1. Zalecamy zastosowanie najnowszego wydania aktualizacji, który zawiera tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2567616 Kompilacje programu SQL Server 2008 R2 wydane po opublikowaniu programu SQL Server 2008 R2 SP1
Obejście
Aby obejść ten problem, zaktualizuj podkwerendę procedury składowanej systemu msdb.dbo.sp_sqlagent_get_perf_counters . Aby to zrobić, Dodaj następujący warunek do klauzuli WHERE czterech podkwerend, które są używane w obliczaniu kolumny [Value] :
(spi1.[object_name] = spi2.[object_name])
Po dodaniu warunku podkwerendy przypominają następujące:
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
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".