Jaki jest typ oczekiwania SQLCLR w Monitorze aktywności w SQL Server Management Studio (SSMS)?

10

Kiedy sprawdzam nasz serwer SQL Prod, za każdym razem, gdy otwieram Monitor aktywności, zawsze widzę SQLCLRpierwszą listę w sekcji oczekiwania na zasoby w Monitorze aktywności. Zawsze ma wysoką liczbę. Do czego służy SQLCLR? Czy to źle, że serwer ma to SQLCLRw monitorze aktywności o wysokiej liczbie oczekujących zasobów?

Keith Rivera
źródło

Odpowiedzi:

11

SQLCLR to możliwość uruchamiania kodu .NET w SQL Server.

Kiedy ludzie mówią o SQLCLR, zwykle odnoszą się do możliwości pisania niestandardowego kodu .NET (Procedury składowane, funkcje, wyzwalacze, typy zdefiniowane przez użytkownika i agregowane przez użytkownika). W tym przypadku tę zdolność można włączyć i wyłączyć za pomocą opcji serwera „clr enabled” wewnątrz sp_configurei uważam, że nazywa się to „CLR Integration” w graficznym interfejsie graficznym Surface Area Configuration. Dodanie funkcjonalności .NET wymaga użycia CREATE ASSEMBLY do załadowania skompilowanego kodu .NET do SQL Server.

Jednak nawet z opcją „clr włączony” ustawioną na 0/ „wyłączony” / „wyłączony”, funkcja CLR jest nadal używana do funkcji wewnętrznych i niektórych wbudowanych funkcji i zawsze będzie dostępna, chyba że „użyj włókien systemu Windows” / ” lightweight pooling ”jest włączona.

Aby uzyskać bardzo szczegółowy opis tego, czym jest SQLCLR, nie jest i co można zrobić, zobacz artykuł, który napisałem na ten temat w SQL Server Central: Schody do SQLCLR Poziom 1: Co to jest SQLCLR? (wymagana jest bezpłatna rejestracja, aby wyświetlić treść na tej stronie). Skrócona wersja tego artykułu jest dostępna w następującej odpowiedzi StackOverflow: Kiedy potrzebujemy funkcji CLR w SQL Server? .

Jeśli chcesz wiedzieć, czy instancja zezwala na dodawanie niestandardowego kodu .NET do baz danych, uruchom następujące polecenie i zaznacz pole „wartość_ Run”:

EXEC sp_configure 'clr enabled';

W odniesieniu do znaczenia typu oczekiwania SQLCLR w Monitorze zasobów zobacz następujący post na blogu:

Jak to działa: Co kryje się za kategorią oczekiwania SQLCLR w Monitorze aktywności programu SQL Server 2008

i uważam, że istotna linia (jak dotyczy kategorii SQLCLR, na którą patrzysz) z tego postu to:

Odkryłem, że kilka typów typu wait należy zignorować, ponieważ są oczekiwane.

Solomon Rutzky
źródło
To jest SQL2008 i prawdopodobnie miał zostać poprawiony (na podstawie połączonego artykułu). OP zgłosił SQL 2012. Właśnie patrzę na to samo, co dla mnie SQLCLR stoi stabilnie na 3000ms + -1 i nie używamy go.
Roger Willcocks
@RogerWillcocks Zaplanowane do naprawienia nie zawsze oznacza, że ​​zostanie naprawione. Po przeczytaniu komentarzy do tego linku zobaczysz osoby zgłaszające, że nadal występuje problem w dodatku SP1 i SP2 z 2012 roku. Jakiej wersji SSMS używasz? Uruchom następujący (następny komentarz), aby sprawdzić, czy pasuje do tego, co widzisz. Ponadto istnieje kilka wbudowanych funkcji korzystających z SQLCLR, takich jak typy geometryczne, geograficzne i HierarchyID; polecenie FORMAT i kilka innych rzeczy.
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