SQL toplu iş, ifade ve RPC arasındaki fark?


35

SQL toplu iş, T-SQL deyimi ve Uzaktan Yordam Çağrısı arasındaki fark nedir?
T-SQL kodunun bir bölümünün bir toplu iş veya deyim olduğunu nasıl anlarım?

Yanıtlar:


25

Sanırım çoğunlukla Profiler sınıfları hakkında konuşuyorsunuz, ancak açıklama yine de duruyor.

Bir SQL toplu işlemi birlikte gruplandırılmış ve bir GO ifadesiyle ayrılmış bir veya daha fazla ifade grubudur. EG: daha fazla SELECT ve INSERT ifadesi sonunda bir GO varsa bir toplu iş oluşturur.

RPC çağrısı, bir istemci uygulamasından veritabanına gelen bir çağrıdır. EG: bir windows servisi, bir web uygulaması, bir windows uygulaması, veri tabanına bağlantısı gereken her şey RPC çağrısı yapar.

Şimdi, Profiler'da veritabanı sunucusuna dokunan her şeyi göreceksiniz. Management Studio'dan bir parti, harici bir uygulamadan RPC çağrısı (toplu iş veya saklı yordam çağrısıdır), Management Studio'dan bir yordam yürütme.

Her biri TSQL deyimlerinden oluşur, bu nedenle bu Profiler sınıfı, yürütmeyi daha da genişletmek, gerçekte ne yapıldığını görmek için kullanışlıdır. Ne ekler, seçer ... vb.

Profiler'de bunlara bakmanın en kolay yolu, yalnızca End RPC çağrısını veya Toplu aramayı sonlandır özelliğini etkinleştirmektir ve orada gereken tüm istatistikleri göreceksiniz (süre, IO, CPU). Ardından, TSQL Statements sınıfını etkinleştirerek daha da ileri gidin ve daha derine inin.


4
+1 Sadece belirtmek GOgerekirse, kullandığımız popüler istemcilerin (yani SSMS ve sqlcmd) kabul edilen ve varsayılan parti sonlandırıcısıdır, ancak GOparti sonlandırıcısı olarak gerçek dizenin değişebilir ve yapılandırılabilir olduğunu belirtmekte fayda vardır .
Thomas Stringer

1
"Bir RPC çağrısı (toplu iş veya saklı yordam çağrısıdır)" . Yani sonunda her şey RPC mi? Bunu açıklayabilir misin?
Iain Samuel McLean Elder,

Hayır, bir RPC çağrısının saklı bir prosedür çağrısından veya daha fazla ifadeden oluşan bir gruptan oluştuğunu söylemek istedim. Bu Profiler etkinliğinde gerçekte gördüğünüz şey, ya tek bir prosedür ya da daha fazla ifadenin bir araya gelmesidir.
Marian,

Lütfen burada bir açıklamaya bakınız . Burada başka bir bilgi var .
Marian,

14

Toplu vs T-SQL Bildirimi

Bu açıkça burada açık SQL Server BOL tanımlanır

Toplu iş, aynı anda bir uygulamadan yürütme için SQL Server'a gönderilen bir veya daha fazla Transact-SQL ifadesi grubudur . Go , SSMS dahil olmak üzere çoğu istemci uygulamasında kullanılan bir toplu ayırıcıdır.

SQL Server, toplu iş ifadelerini yürütme planı olarak adlandırılan tek bir yürütülebilir birim halinde derler. İcra planındaki ifadeler daha sonra birer birer yürütülür.

Anlayışımı temel alan basit bir ifadeyle RPC, istemci API'sini kullanarak depolanmış bir proc çalıştırdığınızda gerçekleşir (örn. ADO.net CommandObject. Execute yönteminde)

Burada yayınlanan internet haber grubunun birinde daha ayrıntılı bir açıklama bulunmaktadır :

RPC "vs" batch ", ADO.NET'in (veya herhangi bir SQL Server istemcisinin) kullandığı TDS yürütme modudur. Parametresiz düz bir SQL ifadesi yürütüldüğünde, bir" toplu iş "kullanırız. RPC'yi kullanıyoruz (bu, tek başına ağ uzaktan yordam çağrısı ile aynı RPC ile aynı değil, sadece bu modu TPC'de (SQL Server ağ protokolü) RPC olarak adlandırırız.) Ayrıca, parametre ile bir toplu iş yürütürseniz, aslında sp_executesql adında bir depolanmış-proc kullanıyoruz ve SQL deyiminin kendisini ve parametrelerin geri kalanını ona aktarıyoruz, bu yüzden RPC olarak da ortaya çıkıyor.

Pablo Castro
Program Yöneticisi - ADO.NET Team
Microsoft Corp.


Yani, toplu iş içindeki bir ifade başarısız olursa, toplu işin tamamı otomatik olarak geri alınır mı?
MonsterMMORPG

Hayır, toplu iş içindeki herhangi bir ifade, parti etkin bir işlem içinde değilse veya IMPLICIT_TRANSACTIONS ON ayarını yapmazsanız, özerk bir şekilde yapılır. Gruplar ve işlemler iki farklı kavramdır. Sorunun çok eski olduğunu biliyorum, bunu gelecek okuyucular için burada bırakıyorum.
spaghettidba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.