Quel est le type d'attente SQLCLR dans le moniteur d'activité dans SQL Server Management Studio (SSMS)?

10

Lorsque je vérifie notre serveur SQL Prod, chaque fois que j'ouvre le moniteur d'activité, je vois toujours SQLCLRdans la première liste de la section d'attente des ressources du moniteur d'activité. Il a toujours un nombre élevé. À quoi ça sert SQLCLR? Est-ce mauvais pour le serveur qui a SQLCLRun nombre d'attente de ressources élevé dans le moniteur d'activité?

Keith Rivera
la source

Réponses:

11

SQLCLR est la possibilité d'exécuter du code .NET dans SQL Server.

Lorsque les gens parlent de SQLCLR, ils font généralement référence à la possibilité d'écrire du code .NET personnalisé (procédures stockées, fonctions, déclencheurs, types définis par l'utilisateur et agrégats définis par l'utilisateur). Dans ce cas, cette capacité peut être activée et désactivée via l'option serveur de "clr enabled" dans sp_configure, et je crois que cela s'appelle "Intégration CLR" dans l'interface graphique de configuration de la surface d'exposition. L'ajout de fonctionnalités .NET nécessite l'utilisation de CREATE ASSEMBLY pour charger le code .NET compilé dans SQL Server.

Cependant, même avec l'option "clr enabled" réglée sur 0/ "off" / "disabled", la fonctionnalité CLR est toujours utilisée pour la fonctionnalité interne et certaines fonctions intégrées et sera toujours là, sauf si "utiliser les fibres Windows" / " l'option de regroupement léger "est activée.

Pour une description très détaillée de ce que SQLCLR est, n'est pas et de ce qu'il peut faire, consultez l'article que j'ai écrit sur ce sujet sur SQL Server Central: Escalier vers SQLCLR Niveau 1: Qu'est-ce que SQLCLR? (une inscription gratuite est requise pour visualiser le contenu de ce site). Une version allégée de cet article est disponible dans la réponse StackOverflow suivante: Quand avons-nous besoin d'une fonction CLR dans SQL Server? .

Si vous souhaitez savoir si l'instance autorise ou non l' ajout de code .NET personnalisé aux bases de données, exécutez ce qui suit et cochez le champ "run_value":

EXEC sp_configure 'clr enabled';

En ce qui concerne la signification du type d'attente SQLCLR dans le moniteur de ressources, veuillez consulter le billet de blog suivant:

Fonctionnement: ce qui se cache derrière la catégorie d'attente SQLCLR dans le moniteur d'activité SQL Server 2008

et je pense que la ligne pertinente (en ce qui concerne la catégorie SQLCLR que vous regardez) de ce poste est:

Ce que j'ai trouvé, c'est que plusieurs des wait_types doivent être ignorés car ils sont des attentes.

Solomon Rutzky
la source
C'est SQL2008, et devait être corrigé (sur la base de l'article lié). L'OP a marqué SQL 2012. Je regarde juste la même chose que pour moi SQLCLR est stable à 3000ms + -1 et nous ne l'utilisons pas.
Roger Willcocks
@RogerWillcocks Planifié pour être corrigé ne signifie pas toujours qu'il sera corrigé. Si vous lisez les commentaires sur ce message lié, vous verrez des gens signaler qu'il s'agit toujours d'un problème dans 2012 SP1 et SP2. Quelle version de SSMS utilisez-vous? Exécutez ce qui suit (commentaire suivant) pour voir si cela correspond à ce que vous voyez. En outre, plusieurs fonctionnalités intégrées utilisent SQLCLR, telles que les types Geometry, Geography et HierarchyID; la commande FORMAT, et quelques autres trucs.
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