¿Cuál es el tipo de espera SQLCLR en el Monitor de actividad dentro de SQL Server Management Studio (SSMS)?

10

Cuando reviso nuestro servidor SQL Prod, cada vez que abro el Monitor de actividad siempre veo SQLCLRla primera lista en la sección de espera de recursos en el Monitor de actividad. Siempre tiene un número alto. Lo que es SQLCLRpara? ¿Es malo que el servidor tenga eso SQLCLRcon un alto número de espera de recursos en el monitor de actividad?

Keith Rivera
fuente

Respuestas:

11

SQLCLR es la capacidad de ejecutar código .NET dentro de SQL Server.

Cuando las personas hablan de SQLCLR, generalmente se refieren a la capacidad de escribir código .NET personalizado (procedimientos almacenados, funciones, disparadores, tipos definidos por el usuario y agregados definidos por el usuario). En este caso, esta capacidad se puede activar y desactivar a través de la opción del servidor "clr enabled" dentro sp_configure, y creo que se llama "Integración CLR" en la GUI de configuración de superficie. Agregar la funcionalidad .NET requiere usar CREATE ASSEMBLY para cargar el código .NET compilado en SQL Server.

Sin embargo, incluso con la opción "clr enabled" establecida en 0/ "off" / "disabled", la funcionalidad CLR todavía se usa para la funcionalidad interna y algunas funciones integradas y siempre estará ahí, a menos que "use fibras de Windows" / " la opción de agrupación ligera "está habilitada.

Para obtener una descripción muy detallada de lo que SQLCLR es, no es y de lo que puede hacer, consulte el artículo que escribí sobre este tema en SQL Server Central: Escalera a SQLCLR Nivel 1: ¿Qué es SQLCLR? (Se requiere registro gratuito para ver el contenido de ese sitio). Una versión simplificada de ese artículo está disponible en la siguiente respuesta de StackOverflow: ¿ Cuándo necesitamos una función CLR en SQL Server? .

Si desea saber si la instancia permite o no que se agregue código .NET personalizado a las bases de datos, ejecute lo siguiente y marque el campo "run_value":

EXEC sp_configure 'clr enabled';

Con respecto al significado del tipo de espera SQLCLR en el Monitor de recursos, consulte la siguiente publicación de blog:

Cómo funciona: qué hay detrás de la categoría de espera SQLCLR en el Monitor de actividad de SQL Server 2008

y creo que la línea pertinente (en lo que respecta a la categoría SQLCLR que está viendo) de esa publicación es:

Lo que encontré fue que varios de los wait_types deberían ignorarse ya que se espera que esperen.

Solomon Rutzky
fuente
Eso es SQL2008, y supuestamente fue programado para ser corregido (basado en el artículo vinculado). El OP ha marcado SQL 2012. Solo estoy viendo lo mismo que para mí SQLCLR está estable a 3000ms + -1 y no lo estamos usando.
Roger Willcocks el
@RogerWillcocks Programado para ser reparado no siempre significa que será reparado. Si lee los comentarios en esa publicación vinculada, verá personas que informan que todavía es un problema en 2012 SP1 y SP2. ¿Qué versión de SSMS estás usando? Ejecute el siguiente (siguiente comentario) para ver si coincide con lo que está viendo. Además, hay varias características integradas que usan SQLCLR, como los tipos Geometry, Geography y HierarchyID; el comando FORMATO y algunas otras cosas.
Solomon Rutzky
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;
Solomon Rutzky