Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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.