UDF'lerin genel bir seri planı zorladığı oldukça iyi belgelenmiştir.
Bu kadar iyi belgelenmiş olduğundan emin değilim.
- Skaler T-SQL fonksiyonu planın herhangi bir yerinde paralellik önler.
- Bir skaler CLR işlevi, veritabanına erişmediği sürece paralel olarak yürütülebilir.
- Çok ifadeli tablo değerli T-SQL işlevi, başka bir yerde paralellik kullanabilen bir plandaki seri bölgeyi zorlar.
- Satır içi tablo değerli T-SQL işlevi bir görünüm gibi genişletilir, bu nedenle doğrudan bir etkisi yoktur.
Bkz. Paralel Yürütme Planını Zorlama ve / veya Craig Freedman'ın Paralel Yürütme sunumu .
Kara kutu olmanın UDF'lerin imleç kullanması gerektiğine dair iddialar var.
Bu iddialar doğru değil.
Motorun neden sadece UDF hesaplama aşaması yerine tüm planı seri olmaya zorladığını açıklayan ekstra noktalar.
Anladığım kadarıyla, mevcut kısıtlamaların tamamen belirli uygulama detaylarının bir sonucu olduğu. Paralellik kullanılarak işlevlerin yürütülememesinin temel bir nedeni yoktur.
Özellikle, T-SQL skaler fonksiyonları ayrı bir T-SQL bağlamında yürütülür, bu da doğru çalışmayı, koordinasyonu ve kapanmayı (özellikle bir hata durumunda) önemli ölçüde karmaşıklaştırır.
Aynı şekilde, tablo değişkenleri genel olarak paralel okumaları destekler (ancak yazmaz), ancak tablo değerli bir işlevle ortaya çıkan tablo değişkeni uygulamaya özel nedenlerle paralel okumaları destekleyemez. Korkarım, yetkili bir yanıt sağlamak için kaynak kodu erişimine (ve ayrıntıları paylaşma özgürlüğüne) sahip birine ihtiyacınız olacak.
Paralel UDF desteği talep etmek için makul bir özellik midir?
Tabii ki, yeterince güçlü bir dava yapabilirseniz. Kendi düşüncem, ilgili çalışmanın kapsamlı olacağı, bu nedenle teklifinizin son derece yüksek bir bara ulaşması gerekeceğidir . Örneğin, satır içi skaler fonksiyonlar sağlamak için ilgili (ve çok daha basit) bir talebin büyük bir desteği var, ancak yıllardır uygulanmadı.
Microsoft belgesini okumak isteyebilirsiniz:
... Microsoft'un SQL Server 2017'den sonraki sürümde T-SQL skaler fonksiyon performansı sorunlarını ele almak için attığı yaklaşımı özetliyor.
Froid'in amacı, geliştiricilerin performanstan ödün vermeden UDF'lerin ve prosedürlerin soyutlamalarını kullanmalarını sağlamaktır. Froid, bu amaca, zorunlu programları otomatik olarak mümkün olduğunca eşdeğer ilişkisel cebirsel biçimlere dönüştürmek için yeni bir teknik kullanarak başarıyor. Froid, zorunlu kod bloklarını ilişkisel ifadeler olarak modeller ve Uygula operatörünü kullanarak bunları sistematik olarak tek bir ifadede birleştirir, böylece sorgu optimize edicinin verimli küme odaklı, paralel sorgu planları seçmesini sağlar .
(benimkini vurgula)
Satır içi skaler T-SQL işlevleri artık SQL Server 2019'da uygulanmaktadır .