Aracılığıyla paylaş


SQL Server Dil Uzantılarını SQL CLR ile Karşılaştırma

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümleri

Bu makalede SQL Server Dil Uzantıları ve yerel ortak dil çalışma zamanı (CLR) karşılaştırılır. Aralarındaki önemli farkları tanımlar ve hangisini kullanacağınıza karar vermenize yardımcı olur.

SQL Server Dil Uzantıları , dış kodu yürütmek için kullanılan bir SQL Server özelliğidir. İlişkisel veriler, genişletilebilirlik çerçevesi kullanılarak dış kodda kullanılabilir.

Yerel ortak dil çalışma zamanı (CLR), .NET dilleri ile SQL Server'ın bazı işlevlerini uygulamanıza olanak tanır. CLR, yönetilen kodu diller arası tümleştirme, kod erişimi güvenliği, nesne yaşam süresi yönetimi ve hata ayıklama ve profil oluşturma desteği gibi hizmetlerle sağlar.

SQL Server Dil Uzantıları'nda kullanılabilen diller, SQL CLR'nin doğrudan yerine geçemez. Genişletilebilirlik çerçevesi ve dil uzantıları SQL Server'ın yüzey alanını genişletir ve veritabanı altyapısına daha yakın çalışma zamanları için bir yürütme ortamı sağlar. Ayrıca altyapı değişiklikleri olmadan yeni çalışma zamanlarını eklemek için kullanılabilecek bir açık kaynak çerçeve sağlar. Şu anda yüzey alanı, sistem saklı yordamı sp_execute_external_scriptolan ile sınırlıdır.

SQL Dil Uzantıları ile SQL CLR arasındaki temel farklardan bazıları şunlardır:

Özellik SQL CLR SQL Dil Uzantıları
Platform desteği Windows ve Linux - Linux yalnızca SAFE derlemeleri destekler. Windows & Linux - işlevsellik açısından tam eşlik.
Yürütme modu In-proc Proc dışında
Yalıtım CLR kodu altyapı işlemi içinde yürütülür; örnek yöneticisinin tüm derlemelere/kodlara güvenmesi gerekir. Çalışma zamanı yürütmesi altyapı işleminin dışındadır. Windows'ta Uygulama Kapsayıcıları veya Linux'ta Ad Alanları kullanılarak daha fazla yalıtım sağlanır. Dış ağ iletişimi de varsayılan olarak devre dışıdır.
Bildirim temelli söz dizimi (T-SQL) Kullanıcı tanımlı türler, kullanıcı tanımlı toplamalar, işlevler, yordamlar, tetikleyiciler. Yalnızca kullanan sp_execute_external_scriptgeçici yürütme.
DDL desteği CREATE ASSEMBLY kullanıcı kodunu karşıya yüklemek ve diğer nesneleri tanımlamak için (işlevler, procs, tetikleyiciler UDF'ler, UDAggs). CREATE EXTERNAL LANGUAGE, EXTERNAL LIBRARY uzantıları ve kitaplıkları yönetmek için.
Kitaplık desteği Derlemeler aracılığıyla elde edilir. Belirli çalışma zamanı kitaplıkları kullanılabilir (Örn: R veya Python paketleri, Java kitaplıkları).
Desteklenen çalışma zamanları .NET Çerçevesi R, Python, Java, C# veya Kendi çalışma zamanınızı getirin (BYOR).
OSS çerçevesi Yok - kullanıcı tanımlı .NET Derlemeleri aracılığıyla genişletilebilir. Evet - uzantı SDK'sı, altyapı değişiklikleri olmadan yeni uzantıların yazılmasını veya çalışma zamanlarıyla tümleştirmenin sağlanmasını sağlar.
QO tümleştirmesi Paralellik de dahil olmak üzere çeşitli söz dizimleri için işleç düzeyi tümleştirmesi. Çalışma zamanlarından sonuç ve veri göndermek/almak için tek dış betik işleci, bu işleç toplu iş modu yürütmeyi ve paralelliği destekler.
Kaynak İdaresi Hiçbiri - kaynak yöneticisi dışında birkaç düğme. Nesneyi çalışma zamanı/dış betikler EXTERNAL RESOURCE POOL tarafından kullanılan kaynakları idare etmek için ayrı bir mekanizma olarak sağlar. İlkeler SQL iş yüküne ek olarak dış çalışma zamanları için de tanımlanabilir.
İzin modeli Veritabanı kapsamlı nesnelerle örnek düzeyi denetimi. Veritabanı kapsamlı nesnelerle örnek düzeyi denetimi.
Performance SQL CLR kodu genellikle yürütmenin doğası gereği genişletilebilirlik açısından daha iyi performans gösterir. Toplu iş odaklı yürütme için idealdir.
İzleme özellikleri sys.dm_clr* DMV'ler ve sınırlı SQL CLR'ye özgü Performans İzleyicisi sayacı. sys.dm_external* DMV'ler, dış kaynak havuzu DMV'leri, Windows JobObject Performans İzleyicisi sayaçları.

Her birinin ne zaman kullanılacağı

Dil Uzantıları veya CLR kullanmanız senaryolarınıza ve hedeflerinize bağlıdır. Örneğin, T-SQL yüzey alanını kendi toplamalarınız veya türleriniz ile genişletmeniz gerekiyorsa, türün veya toplamanın genişletilebilirlik mekanizması kullanılarak tanımlanamaması nedeniyle CLR en iyi seçenektir. Öte yandan, kuruluşunuzda veya ekibinizde mevcut veri bilimi uzmanlığını kullanmak istiyorsanız genişletilebilirlik ile R/Python tümleştirmesini kullanmak en iyi seçenektir.

Benzer şekilde, performans hedefleriniz kararınızı belirleyebilir. C# dilinde bir regex işlevi uygulamak ve CLR kullanmak, aynı regex işlevini gerçekleştiren bir Python betiğini çağırmak için genişletilebilirlik kullanmaktan çok daha hızlıdır.