Каков тип ожидания SQLCLR в Activity Monitor в SQL Server Management Studio (SSMS)?

10

Когда я проверяю наш сервер SQL Prod, каждый раз, когда я открываю Activity Monitor, я всегда вижу SQLCLRв первом списке раздел ожидания ресурсов в Activity Monitor. У него всегда большое число. Для чего SQLCLR? Это плохо для сервера, имеющего это SQLCLRс большим номером ожидания ресурса в мониторе активности?

Кит Ривера
источник

Ответы:

11

SQLCLR - это возможность запуска кода .NET в SQL Server.

Когда люди говорят о SQLCLR, они обычно имеют в виду возможность написания собственного кода .NET (хранимые процедуры, функции, триггеры, пользовательские типы и пользовательские агрегаты). В этом случае эту возможность можно включить и выключить с помощью опции сервера «clr enabled» внутри sp_configure, и я считаю, что она называется «Интеграция CLR» в графическом интерфейсе настройки поверхности. Добавление функциональности .NET требует использования CREATE ASSEMBLY для загрузки скомпилированного кода .NET в SQL Server.

Тем не менее, даже если для параметра «clr enabled» задано значение « 0/ off» / «disabled», функции CLR все еще используются для внутренних функций и некоторых встроенных функций и всегда будут присутствовать, если только «использовать волокна Windows» / » опция облегченного пулирования включена.

Чтобы получить очень подробное описание того, что такое SQLCLR, что нет, и что он может делать, см. Статью, которую я написал по этой теме, на SQL Server Central: Лестница к SQLCLR Уровень 1: Что такое SQLCLR? (для просмотра контента на этом сайте требуется бесплатная регистрация). Развернутая версия этой статьи доступна в следующем ответе StackOverflow: Когда нам нужна функция CLR в SQL Server? ,

Если вы хотите узнать, разрешает ли экземпляр добавлять собственный код .NET в базы данных, выполните следующее и проверьте поле «run_value»:

EXEC sp_configure 'clr enabled';

Что касается значения типа ожидания SQLCLR в Resource Monitor, см. Следующий пост в блоге:

Как это работает: что стоит за категорией ожидания SQLCLR в SQL Server 2008 Activity Monitor

и я считаю, что соответствующая строка (поскольку она относится к категории SQLCLR, которую вы просматриваете) из этого поста:

Я обнаружил, что некоторые из wait_types следует игнорировать, так как они ожидают ожидания.

Соломон Руцкий
источник
Это SQL2008, и предположительно было запланировано его исправление (на основе связанной статьи). ОП пометил SQL 2012. Я просто смотрю на то же, что и для меня, SQLCLR устойчиво стоит на уровне 3000 мс + -1, и мы его не используем.
Роджер Уиллкокс
@RogerWillcocks Запланированное исправление не всегда означает, что оно будет исправлено. Если вы прочитаете комментарии к этому связанному сообщению, вы увидите, что люди сообщают, что это проблема 2012 SP1 и SP2. Какую версию SSMS вы используете? Запустите следующее (следующий комментарий), чтобы увидеть, соответствует ли оно тому, что вы видите. Кроме того, есть несколько встроенных функций, которые используют SQLCLR, таких как типы Geometry, Geography и HierarchyID; команда FORMAT и некоторые другие вещи.
Соломон Руцкий
2
SELECT * FROM sys.dm_os_wait_stats WHERE wait_type IN ('CLR_AUTO_EVENT', 'CLR_CRST', 'CLR_JOIN', 'CLR_MANUAL_EVENT', 'CLR_MEMORY_SPY', 'CLR_MONITOR', 'CLR_RWLOCK_READER', 'CLR_RWLOCK_WRITER', 'CLR_SEMAPHORE', 'CLR_TASK_START', 'CLRHOST_STATE_ACCESS', 'ASSEMBLY_LOAD', 'FS_GARBAGE_COLLECTOR_SHUTDOWN', 'SQLCLR_APPDOMAIN', 'SQLCLR_ASSEMBLY', 'SQLCLR_DEADLOCK_DETECTION', 'SQLCLR_QUANTUM_PUNISHMENT') ORDER BY wait_time_ms DESC, wait_type ASC;
Соломон Руцкий