Microsoft distribuisce le correzioni di Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) in un unico file scaricabile. Dato che le correzioni sono cumulative, ogni nuova versione contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nella versione di aggiornamento precedente di SQL Server 2008 R2 Service Pack 1 (SP1).
Sintomi
Quando viene generato un avviso di condizione delle prestazioni di SQL Server in Microsoft SQL Server 2008 R2, è possibile che venga visualizzato il messaggio di errore seguente:
Msg 512, livello 16, stato 1, procedura sp_sqlagent_get_perf_counters, linea 40Subquery restituito più di 1 valore. Questa operazione non è consentita quando la sottoquery segue =,! =, <, <=, >, >= o quando la sottoquery viene usata come espressione.
Inoltre, il messaggio di errore viene registrato nel log degli errori di SQL Server Agent in questa situazione.Nota Questo problema si verifica anche in Microsoft SQL Server 2008.
Causa
Questo problema si verifica perché la sottoquery della stored procedure di sistema msdb.dbo.sp_sqlagent_get_perf_counters calcola il valore di un contatore in modo non corretto. La sottoquery non dispone di una relazione di join interna per la colonna [object_name] nella condizione della sottoquery. Di conseguenza, più righe vengono restituite in modo non corretto e si verifica il problema menzionato nella sezione "Sintomi".Nota La stored procedure di sistema msdb.dbo.sp_sqlagent_get_perf_counters viene eseguita quando viene generato un avviso di condizione delle prestazioni di SQL Server.
Risoluzione
Informazioni sull'aggiornamento cumulativo
Pacchetto di aggiornamento cumulativo 3 per SQL Server 2008 R2 SP1
La correzione di questo problema è stata rilasciata per la prima volta nel pacchetto di aggiornamento cumulativo 3. Per altre informazioni su come ottenere questo pacchetto di aggiornamento cumulativo per SQL Server 2008 R2 SP1, fare clic sul numero dell'articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base:
2591748 Pacchetto di aggiornamento cumulativo 3 per SQL Server 2008 R2 SP1Nota Poiché le compilazioni sono cumulative, ogni nuova versione di aggiornamento contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nella versione di aggiornamento precedente di SQL Server 2008 R2 SP1. Ti consigliamo di considerare l'applicazione della versione di aggiornamento più recente che contiene questo hotfix. Per ulteriori informazioni, fare clic sul numero dell'articolo seguente per visualizzare l'articolo nella Microsoft Knowledge Base:
2567616 Build di SQL Server 2008 R2 rilasciate dopo il rilascio di SQL Server 2008 R2 SP1
Soluzione alternativa
Per risolvere il problema, aggiornare la sottoquery della stored procedure di sistema msdb.dbo.sp_sqlagent_get_perf_counters . A questo scopo, Aggiungi la condizione seguente alla clausola where delle quattro sottoquery usate nel calcolo della colonna [value] :
(spi1.[object_name] = spi2.[object_name])
Dopo aver aggiunto la condizione, le sottoquery sono simili alle seguenti:
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
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".