Qual é o tipo de espera SQLCLR no Activity Monitor no SQL Server Management Studio (SSMS)?

10

Quando verifico o servidor SQL Prod, sempre que abro o Activity Monitor, sempre vejo SQLCLRa primeira lista na seção de espera de recursos no Activity Monitor. Sempre tem um número alto. Para que serve SQLCLR? É ruim para o servidor ter isso SQLCLRcom alto número de espera de recurso no monitor de atividades?

Keith Rivera
fonte

Respostas:

11

SQLCLR é a capacidade de executar o código .NET no SQL Server.

Quando as pessoas falam de SQLCLR, geralmente se referem à capacidade de escrever código .NET personalizado (procedimentos armazenados, funções, disparadores, tipos definidos pelo usuário e agregados definidos pelo usuário). Nesse caso, essa capacidade pode ser ativada e desativada através da opção do servidor "clr enabled" dentro sp_configure, e acredito que seja chamada "Integração CLR" na GUI de configuração da área de superfície. Adicionar funcionalidade .NET requer o uso de CREATE ASSEMBLY para carregar o código .NET compilado no SQL Server.

No entanto, mesmo com a opção "clr enabled" configurada como 0/ "off" / "disabled", a funcionalidade CLR ainda é usada para funcionalidade interna e algumas funções internas e sempre estará lá, a menos que a opção "use fibres do Windows" / " opção pool leve "está ativada.

Para obter uma descrição muito detalhada do que o SQLCLR é, não é e o que ele pode fazer, consulte o artigo que escrevi sobre este tópico no SQL Server Central: Stairway to SQLCLR Nível 1: O que é SQLCLR? (é necessário registro gratuito para visualizar o conteúdo desse site). Uma versão simplificada desse artigo está disponível na seguinte resposta StackOverflow: Quando precisamos de uma função CLR no SQL Server? .

Se você deseja saber se a instância está ou não permitindo que o código .NET personalizado seja adicionado aos bancos de dados, execute o seguinte e verifique o campo "run_value":

EXEC sp_configure 'clr enabled';

Com relação ao significado do tipo de espera SQLCLR no Monitor de Recursos, consulte a seguinte postagem no blog:

Como funciona: O que está por trás da categoria de espera SQLCLR no SQL Server 2008 Activity Monitor

e acredito que a linha pertinente (no que se refere à categoria SQLCLR que você está vendo) desse post é:

O que descobri foi que vários dos wait_types devem ser ignorados, pois são esperados.

Solomon Rutzky
fonte
É o SQL2008 e foi programado para ser corrigido (com base no artigo vinculado). O OP sinalizou o SQL 2012. Estou apenas olhando a mesma coisa que para mim o SQLCLR está sentado a 3000ms + -1 e não o estamos usando.
Roger Willcocks
@RogerWillcocks Agendado para ser corrigido nem sempre significa que será corrigido. Se você ler os comentários dessa postagem vinculada, verá pessoas relatando que ainda é um problema no 2012 SP1 e SP2. Qual versão do SSMS você está usando? Execute o seguinte (próximo comentário) para ver se ele corresponde ao que você está vendo. Além disso, existem vários recursos internos que usam SQLCLR, como os tipos Geometry, Geography e HierarchyID; o comando FORMAT e outras coisas.
Solomon Rutzky 01/08/19
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 01/08/19