консоль System Center Service Manager работает медленно после обновления SQL Server
Эта статья поможет устранить проблему, из-за которой Service Manager консоль становится медленной после обновления до Microsoft SQL Server 2014 или более поздней версии.
Исходная версия продукта: System Center 2016 Service Manager, System Center 2012 R2 Service Manager
Исходный номер базы знаний: 4056822
Признак
После обновления до SQL Server 2014 или более поздней версии программы System Center Service Manager консоль становится медленной.
Кроме того, после добавления пользователя в роль Администраторы производительность этого пользователя будет нормальной.
Причина
Проблема возникает из-за того, что запросы Service Manager предназначены для выполнения по оценщику кратности SQL Server 2012 года.
Разрешение
Сначала проверка текущий уровень совместимости с помощью следующего SQL-запроса:
Use ServiceManager
Select Name, Compatibility_Level from sys.databases Where name = 'ServiceManager'
- Если текущий уровень совместимости равен 110, эта статья не применяется к вашей системе.
- Если текущий уровень совместимости превышает 110, используйте один из следующих методов для повышения производительности.
Способ 1. Изменение уровня совместимости базы данных ServiceManager на 110 (SQL Server 2012 г.)
Для этого используйте следующий запрос:
ALTER DATABASE ServiceManager
SET COMPATIBILITY_LEVEL = 110
Метод 2. Установка существующего экземпляра SQL Server для запуска с флагом трассировки 9481 для использования оценщика кратности SQL Server 2012
Для этого выполните следующие действия.
- Откройте диспетчер конфигурации SQL Server и выберите службы SQL Server.
- Щелкните правой кнопкой мыши используемый экземпляр SQL Server, выберите Свойства, а затем перейдите на вкладку Параметры запуска.
- Введите -T9481 в текстовом поле и нажмите кнопку Добавить.
Примечание.
Если в том же экземпляре SQL Server работают другие базы данных, производительность других баз данных может быть затронута.
Метод 3. Изменение хранимой процедуры p_UserRoleSelectAccessToMultipleEntities
ServiceManager путем добавления OPTION (QUERYTRACEON 9481)
Для этого используйте следующий запрос:
IF (0 = @ReturnUserRoleInfo)
BEGIN
INSERT INTO #BaseManagedEntityWithUserRoleInstanceScope
SELECT T.[BaseManagedEntityId], T.[UserRoleId], NULL AS [ScopeId]
FROM
(
SELECT E.[BaseManagedEntityId], E.UserRoleId
FROM #BaseManagedEntityWithUserRoleOperationTypeScope E
INNER JOIN dbo.[RecursiveMembership] as RM
ON E.[BaseManagedEntityId] = RM.[ContainedEntityId]
INNER JOIN #UserRoleWithScope AS L
ON E.[UserRoleId] = L.[UserRoleId]
INNER JOIN dbo.[UserRoleGroupType] AS URIS
ON (URIS.[GroupId] = RM.[ContainerEntityId] OR (URIS.[GroupId] IS NULL))
AND (URIS.TypeId IS NULL)
AND (URIS.[ScopeType] = 2 OR URIS.[ScopeType] = 8)
AND (URIS.[ScopeId] = L.[ScopeId])
UNION ALL
SELECT E.[BaseManagedEntityId], E.UserRoleId
FROM #BaseManagedEntityWithUserRoleOperationTypeScope E
INNER JOIN dbo.[RecursiveMembership] as RM
ON E.[BaseManagedEntityId] = RM.[ContainedEntityId]
INNER JOIN dbo.[TypedManagedEntity] AS TMECONTAINER
ON RM.[ContainerEntityId] = TMECONTAINER.BaseManagedEntityId
INNER JOIN dbo.[DerivedManagedTypes] AS DMTCONTAINER
ON TMECONTAINER.[ManagedTypeId] = DMTCONTAINER.DerivedTypeId
INNER JOIN #UserRoleWithScope AS L
ON E.[UserRoleId] = L.[UserRoleId]
INNER JOIN dbo.[UserRoleGroupType] AS URIS
ON (URIS.TypeId = DMTCONTAINER.[BaseTypeId])
AND (URIS.TypeId IS NOT NULL)
AND (URIS.[ScopeType] = 2 OR URIS.[ScopeType] = 8)
AND (URIS.[ScopeId] = L.[ScopeId])
) AS T OPTION (QUERYTRACEON 9481)
Примечание.
Этот метод не устраняет другие SQL-запросы, которые также могут быть настроены для работы с оценщиком кратности SQL Server 2012.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по