Корпорация Майкрософт распространяет Microsoft SQL Server 2008 R2 с пакетом обновления 1 (SP1) и предоставляет один загружаемый файл. Поскольку исправления носят кумулятивный характер, каждый новый выпуск содержит все исправления и все обновления для системы безопасности, которые были выпущены в предыдущем выпуске сервера SQL Server 2008 R2 с пакетом обновления 1 (SP1).
Проблемы
Если в Microsoft SQL Server 2008 R2 появляется предупреждение о состоянии производительности SQL Server, может появиться следующее сообщение об ошибке:
Сообщение 512, уровень 16, состояние 1, sp_sqlagent_get_perf_counters процедуры, строка 40Subquery вернула более одного значения. Это не разрешено, если в подзапросе следует следующее: =,! =, <, <=, >, >= или, если в качестве выражения используется подчиненный запрос.
Кроме того, сообщение об ошибке регистрируется в журнале ошибок агента SQL Server в этой ситуации.Примечание. Эта проблема также возникает в Microsoft SQL Server 2008.
Причина
Эта проблема возникает из-за того, что вложенный запрос системной хранимой процедуры msdb.dbo.sp_sqlagent_get_perf_counters вычисляет значение счетчика неправильно. В подзапросе отсутствует отношение INNER JOIN для столбца [object_name] в условии подзапроса. Следовательно, несколько строк возвращаются неправильно, и возникает проблема, описанная в разделе "проблема".Примечание. Системная хранимая процедура msdb.dbo.sp_sqlagent_get_perf_counters запускается, когда создается предупреждение о состоянии производительности SQL Server.
Решение
Сведения о накопительном пакете обновления
Накопительный пакет обновления 3 для SQL Server 2008 R2 с пакетом обновления 1 (SP1)
Исправление этой проблемы впервые было выпущено в пакете обобщенного обновления 3. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2 с пакетом обновления 1 (SP1), щелкните следующий номер статьи базы знаний Майкрософт:
2591748 Накопительный пакет обновления 3 для SQL Server 2008 R2 с пакетом обновления 1 (SP1)Примечание. Поскольку сборки являются кумулятивными, каждый новый выпуск обновлений содержит все исправления и все обновления для системы безопасности, которые были включены в предыдущий выпуск обновления для SQL Server 2008 R2 SP1. Рекомендуется установить самую последнюю версию обновления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2567616 Сборки SQL Server 2008 R2, выпущенные после выпуска сервера SQL Server 2008 R2 с пакетом обновления 1 (SP1)
Обходное решение
Чтобы устранить эту ошибку, обновите подчиненный запрос msdb.dbo.sp_sqlagent_get_perf_counters системной хранимой процедуры. Для этого добавьте следующее условие к предложению WHERE четырех подзапросов, используемых в вычислении столбцов [Value] .
(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
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".