Запрос SQL Server 2016 с высокой загрузкой ЦП

#sql-server #tsql

#sql-сервер #tsql

Вопрос:

Существует запрос Microsoft, который запускается всякий раз, когда я запускаю новый сеанс SSMS и выполняю первый запрос сеанса. Я выполнил трассировку во время его выполнения и определил, что он увеличивает значение одного из параметров. Есть ли способ отключить это от выполнения?

 @_msparam_0=N'CO',@_msparam_1=N'JOHNP'
@_msparam_0=N'CO',@_msparam_1=N'JOHNP#'
@_msparam_0=N'CO',@_msparam_1=N'JOHNT'
@_msparam_0=N'CO',@_msparam_1=N'JOHNT#'
@_msparam_0=N'CO',@_msparam_1=N'JONG'
@_msparam_0=N'CO',@_msparam_1=N'JONG#'
@_msparam_0=N'CO',@_msparam_1=N'JONL'
@_msparam_0=N'CO',@_msparam_1=N'JONL#'
  
 SELECT
u.name AS [Name],
u.principal_id AS [ID],
CAST(CASE WHEN u.principal_id < 5 OR u.principal_id = 16382 OR u.principal_id = 16383 THEN 1 ELSE 0 END AS bit) AS [IsSystemObject],
CASE WHEN N''U'' = u.type THEN 0 WHEN N''G'' = u.type THEN 1 WHEN N''S'' = u.type THEN 2 WHEN N''C'' = u.type THEN 3 WHEN N''K'' = u.type THEN 4 WHEN N''E'' = u.type THEN 5 WHEN N''X'' = u.type THEN 6 END AS [LoginType],
CAST(CASE dp.state WHEN N''G'' THEN 1 WHEN ''W'' THEN 1 ELSE 0 END AS bit) AS [HasDBAccess],
u.sid AS [Sid],
u.create_date AS [CreateDate],
u.modify_date AS [DateLastModified],
ISNULL(u.default_schema_name,N'''') AS [DefaultSchema],
ISNULL(ak.name,N'''') AS [AsymmetricKey],
ISNULL(cert.name,N'''') AS [Certificate],
ISNULL(suser_sname(u.sid),N'''') AS [Login],
ISNULL(u.default_language_lcid, -1) AS [DefaultLanguageLcid],
ISNULL(u.default_language_name,N'''') AS [DefaultLanguageName],
u.authentication_type AS [AuthenticationType],

        CASE
        WHEN N''C'' = u.type THEN 1
        WHEN N''K'' = u.type THEN 2        
        WHEN N''S'' = u.type AND SUSER_SNAME(u.sid) is null AND u.authentication_type != 2 THEN 3
        ELSE 0 END
       AS [UserType]
FROM
sys.database_principals AS u
LEFT OUTER JOIN sys.database_permissions AS dp ON dp.grantee_principal_id = u.principal_id and dp.type = @_msparam_0
LEFT OUTER JOIN sys.asymmetric_keys AS ak ON ak.sid = u.sid
LEFT OUTER JOIN sys.certificates AS cert ON cert.sid = u.sid
WHERE
(u.type in (''U'', ''S'', ''G'', ''C'', ''K'' ,''E'', ''X''))and(u.name=@_msparam_1)',N'@_msparam_0 nvarchar(4000),@_msparam_1 nvarchar(4000)
  

Это было определено как проблема с Intellisense. Когда Intellisense отключен, это больше не проблема. Сейчас я пытаюсь выяснить, как это исправить, чтобы я мог продолжать использовать Intellisense.

Подробные сведения:

  • С Intellisense: 687 секунд процессора, 12 394 чтения и длительность 811.
  • Без Intellisense: 16 секунд процессора, 1160 операций чтения и длительность 123.

Версия SSMS: 13.0.16106.4

Дальнейшее изучение трассировки выявило Intellisense в качестве виновника

Комментарии:

1. Сколько логинов sql Server у вас всего? Какую версию SQL Server вы используете?

2. @gofr1 Я определил, что это проблема с Intellisense. Я отредактировал исходное сообщение, чтобы включить эти обновленные сведения.

3. У SSMS и Azure Data Studio есть эта проблема. Мне просто любопытно, сколько логинов у вас в вашей БД? Эта проблема обычно возникает при огромном количестве логинов SQL Server.