Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2019 (15.x) en latere versies
In dit artikel worden SQL Server Language Extensions en de native Common Language Runtime (CLR) vergeleken. Hiermee worden de belangrijkste verschillen tussen deze twee geïdentificeerd en kunt u bepalen welke u wilt gebruiken.
SQL Server Language Extensions is een functie van SQL Server die wordt gebruikt voor het uitvoeren van externe code. De relationele gegevens kunnen worden gebruikt in de externe code met behulp van het uitbreidbaarheidsframework.
Met de native Common Language Runtime (CLR) kunt u enkele functies van SQL Server implementeren met .NET-talen. De CLR levert beheerde code met services zoals integratie tussen talen, beveiliging van codetoegang, levensduurbeheer van objecten en ondersteuning voor foutopsporing en profilering.
De talen die beschikbaar zijn in SQL Server Language Extensions zijn geen directe vervanging voor SQL CLR. Het uitbreidbaarheidsframework en de taalextensies breiden het oppervlak van SQL Server uit en bieden een uitvoeringsomgeving voor runtimes dichter bij de database-engine. Ze bieden ook een opensource-framework dat kan worden gebruikt voor het onboarden van nieuwe runtimes zonder enginewijzigingen. Momenteel is het oppervlak beperkt tot de systeem opgeslagen procedure, sp_execute_external_script.
Hier volgen enkele van de belangrijkste verschillen tussen SQL-taalextensies en SQL CLR:
| Eigenschap | SQL CLR | SQL-taalextensies |
|---|---|---|
| Platformondersteuning | Windows & Linux - Linux ondersteunt alleen SAFE assembly's. |
Windows & Linux - volledige pariteit in termen van functionaliteit. |
| Uitvoeringsmodus | In-proc | Out-of-proc |
| Isolatie | CLR-code wordt uitgevoerd binnen het engineproces; instantiebeheerder moet alle assembly's/code vertrouwen. | Runtime-uitvoering valt buiten het engineproces. Verdere isolatie wordt geboden met app-containers in Windows of naamruimten in Linux. Externe netwerkcommunicatie is ook standaard uitgeschakeld. |
| Declaratieve syntaxis (T-SQL) | Door de gebruiker gedefinieerde typen, door de gebruiker gedefinieerde aggregaties, functies, procedures, triggers. | Alleen ad-hocuitvoering met behulp van sp_execute_external_script. |
| DDL-ondersteuning |
CREATE ASSEMBLY om gebruikerscode te uploaden en andere objecten te definiëren (functies, procs, triggers UDTs, UDAggs). |
CREATE EXTERNAL LANGUAGEom EXTERNAL LIBRARY extensies en bibliotheken te beheren. |
| Bibliotheekondersteuning | Bereikt via assembly's. | Bibliotheken voor specifieke runtime kunnen worden gebruikt (bijvoorbeeld R- of Python-pakketten, Java-bibliotheken). |
| Ondersteunde runtimes | .NET Framework | R, Python, Java, C# of Bring Your Own Runtime (BYOR). |
| OSS-framework | N.v.v. - kan worden uitgebreid via door de gebruiker gedefinieerde .NET-assembly's. | Ja: extensie-SDK biedt het ontwerpen van nieuwe extensies of integratie met runtimes zonder enginewijzigingen. |
| QO-integratie | Integratie op operatorniveau voor verschillende syntaxis, waaronder parallellisme. | Eén externe scriptoperator voor het verzenden/ontvangen van resultaten en gegevens van runtimes, deze operator ondersteunt uitvoering van batchmodus en parallelle uitvoering. |
| Resourcebeheer | Geen - weinig knoppen buiten resource governor. | Biedt EXTERNAL RESOURCE POOL een object als een afzonderlijk mechanisme voor het beheren van resources die worden gebruikt door de runtime/externe scripts. Beleidsregels kunnen naast de SQL-workload worden gedefinieerd voor externe runtimes. |
| Machtigingsmodel | Beheer op exemplaarniveau met db-bereikobjecten. | Beheer op exemplaarniveau met db-bereikobjecten. |
| Performance | SQL CLR-code presteert doorgaans beter dan uitbreidbaarheid vanwege de aard van de uitvoering. | Ideaal voor batchgeoriënteerde uitvoering. |
| Bewakingsmogelijkheden |
sys.dm_clr* DMV's en beperkte SQL CLR-specifieke prestatiemeteritems. |
sys.dm_external* DMV's, DMV's voor externe resourcegroepen, Prestatiemeteritems voor Windows JobObject. |
Wanneer gebruikt u elk
Of u nu taalextensies of CLR gebruikt, is afhankelijk van uw scenario's en doelstellingen. Als u het T-SQL-oppervlak bijvoorbeeld wilt uitbreiden met uw eigen aggregaties of typen, is CLR de beste keuze omdat type of aggregatie niet kan worden gedefinieerd met behulp van het uitbreidbaarheidsmechanisme. Als u daarentegen bestaande expertise op het gebied van data science in uw organisatie of team wilt gebruiken, is het gebruik van R/Python-integratie met uitbreidbaarheid de beste keuze.
Op dezelfde manier kunnen uw prestatiedoelen uw beslissing bepalen. Het implementeren van een regex-functie in C# en het gebruik van CLR is veel sneller dan het gebruik van uitbreidbaarheid om een Python-script aan te roepen dat dezelfde regex-functionaliteit uitvoert.