Was ist der SQLCLR-Wartetyp in Activity Monitor in SQL Server Management Studio (SSMS)?

10

Wenn ich unseren SQL Prod-Server überprüfe, wird jedes Mal, wenn ich den Aktivitätsmonitor öffne, SQLCLRdie erste Liste im Abschnitt "Ressourcen warten" im Aktivitätsmonitor angezeigt. Es hat immer eine hohe Anzahl. Wofür ist SQLCLR? Ist es schlecht für den Server SQLCLRmit der hohen Wartezeit im Aktivitätsmonitor?

Keith Rivera
quelle

Antworten:

11

SQLCLR ist die Fähigkeit, .NET-Code in SQL Server auszuführen.

Wenn Leute von SQLCLR sprechen, beziehen sie sich normalerweise auf die Fähigkeit, benutzerdefinierten .NET-Code zu schreiben (gespeicherte Prozeduren, Funktionen, Trigger, benutzerdefinierte Typen und benutzerdefinierte Aggregate). In diesem Fall kann diese Funktion über die Serveroption "clr enabled" aktiviert sp_configureund deaktiviert werden. Ich glaube, sie wird in der Benutzeroberfläche für die Oberflächenkonfiguration als "CLR-Integration" bezeichnet. Das Hinzufügen von .NET-Funktionen erfordert die Verwendung von CREATE ASSEMBLY , um den kompilierten .NET-Code in SQL Server zu laden.

Selbst wenn die Option "clr enabled" auf 0/ "off" / "disabled" gesetzt ist, wird die CLR-Funktionalität weiterhin für interne Funktionen und einige integrierte Funktionen verwendet und ist immer verfügbar, es sei denn, "Windows-Fasern verwenden" / " Lightweight Pooling "Option ist aktiviert.

Eine sehr detaillierte Beschreibung dessen, was SQLCLR ist, was nicht und was es kann, finden Sie in dem Artikel, den ich zu diesem Thema in SQL Server Central geschrieben habe: Treppe zu SQLCLR Ebene 1: Was ist SQLCLR? (Eine kostenlose Registrierung ist erforderlich, um Inhalte auf dieser Website anzuzeigen.) Eine abgespeckte Version dieses Artikels finden Sie in der folgenden StackOverflow-Antwort: Wann benötigen wir eine CLR-Funktion in SQL Server? .

Wenn Sie wissen möchten, ob die Instanz das Hinzufügen von benutzerdefiniertem .NET-Code zu Datenbanken zulässt, führen Sie Folgendes aus und aktivieren Sie das Feld "run_value":

EXEC sp_configure 'clr enabled';

Informationen zur Bedeutung des SQLCLR-Wartetyps im Ressourcenmonitor finden Sie im folgenden Blogbeitrag:

Funktionsweise: Was steckt hinter der Wartekategorie SQLCLR in SQL Server 2008 Activity Monitor?

und ich glaube, die relevante Zeile (da sie sich auf die SQLCLR-Kategorie bezieht, die Sie betrachten) aus diesem Beitrag lautet:

Was ich fand, war, dass einige der wait_types ignoriert werden sollten, da erwartet wird, dass sie warten.

Solomon Rutzky
quelle
Das ist SQL2008 und sollte angeblich korrigiert werden (basierend auf dem verlinkten Artikel). Das OP hat SQL 2012 markiert. Ich sehe nur das Gleiche wie für mich. SQLCLR sitzt stabil bei 3000 ms + -1 und wir verwenden es nicht.
Roger Willcocks
@RogerWillcocks Geplant, repariert zu werden, bedeutet nicht immer, dass es repariert wird. Wenn Sie die Kommentare zu diesem verlinkten Beitrag lesen, werden Sie feststellen, dass 2012 in SP1 und SP2 immer noch ein Problem vorliegt. Welche SSMS-Version verwenden Sie? Führen Sie den folgenden Schritt aus (nächster Kommentar), um festzustellen, ob er mit dem übereinstimmt, was Sie sehen. Es gibt auch mehrere integrierte Funktionen, die SQLCLR verwenden, z. B. die Typen Geometrie, Geografie und Hierarchie-ID. den Befehl FORMAT und einige andere Dinge.
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