Різниця між партією SQL, оператором та RPC?


35

Яка різниця між пакетною програмою SQL, оператором T-SQL та викликом віддалених процедур?
Як я можу визначити, чи частина коду T-SQL - це пакетна чи заява?

Відповіді:


25

Ну, мабуть, ви говорите переважно про класи Profiler, але пояснення все одно є.

Пакет SQL - це набір одного або більше операторів, згрупованих разом і розділених оператором GO. EG: більше операторів SELECT та INSERT утворюють партію, якщо вони мають кінець GO.

Дзвінок RPC - це дзвінок, який надходить від клієнтської програми до бази даних. EG: служба Windows, веб-додаток, додаток для Windows, все, що потрібно для підключення до бази даних, насправді робить дзвінок RPC.

Тепер у Profiler ви побачите все, що стосується сервера баз даних. Пакет із студії управління, виклик RPC (який є або пакетним, або збереженим викликом процедури) із зовнішньої програми, виконання процедури від Management Studio.

Кожен з них складається з операторів TSQL, тому цей клас Profiler корисний у випадку, якщо ви хочете далі розгорнути виконання, щоб побачити, що насправді виконується. Що вставляє, вибирає ... і т.д.

Найпростіший спосіб переглянути їх у Profiler - це ввімкнути лише End RPC-виклик або End-пакетний виклик, і ви побачите там всю необхідну статистику (тривалість, IO, CPU). Потім перемістіться далі, включивши клас операторів TSQL і виконайте глибший коп.


4
+1 Просто для уточнення, чи GOє прийнятим і типовим термінатором пакетів популярних клієнтів, які ми використовуємо (наприклад, SSMS та sqlcmd), але варто зазначити, що фактична GOрядок як термінатор пакетів може змінюватися і може бути налаштована.
Томас Стрінгер

1
"Дзвінок RPC (який є пакетним або збереженим викликом процедури)" . Тож все RPC врешті-решт? Ви можете уточнити це?
Ієн Самуель Маклін Старший

Ні, я хотів сказати, що виклик RPC формується або із збереженого виклику процедури, або з групи більшої кількості операторів. Те, що ви насправді бачите в цій події Profiler, це або окрема процедура, або партія більшої кількості заяв.
Маріан

Будь ласка, дивіться тут пояснення . Деяка інша інформація тут .
Маріан

14

Batch vs T-SQL Заява

Це чітко визначено в SQL Server BOL тут

Пакет - це група одного або декількох операторів Transact-SQL, що надсилаються одночасно з програми на SQL Server для виконання. Go - пакетний сепаратор, який використовується в більшості клієнтських програм, включаючи SSMS.

SQL Server компілює висловлювання партії в єдиний виконуваний блок, який називається планом виконання. Виписки в плані виконання потім виконуються по черзі.

Простим терміном, що базується на моєму розумінні RPC - це коли ви виконуєте збережену процедуру за допомогою API клієнта (наприклад, в ADO.net CommandObject. Метод Execute)

Більш детальне пояснення знайдено в одній з публікацій Інтернет-групи новин тут :

RPC "vs" batch "- це режим виконання TDS, який використовується ADO.NET (або будь-який клієнт SQL Server). Коли звичайний оператор SQL без параметрів не виконується, ми використовуємо" batch ". Коли виконується зберігається-proc, ми використовуємо RPC (це не те саме, що RPC, як автономний мережевий віддалений виклик процедури. Ми просто трапляємося викликати цей режим RPC в TDS (мережевий протокол SQL Server)). Також, якщо ви виконуєте пакет з параметром, ми фактично використовуємо збережений-proc, який називається sp_executesql, і передаємо йому сам оператор SQL та інші параметри, тому він також відображається як RPC.

Пабло Кастро
Менеджер програм - ADO.NET Team
Microsoft Corp.


Так що якщо одна заява в партії не вдається, вся партія автоматично відкидається?
MonsterMMORPG

Ні, кожне твердження в пакеті виконується автономно, якщо тільки партія не знаходиться в межах активної транзакції або ви не встановите IMPLICIT_TRANSACTIONS ON. Пакети та транзакції - це два різних поняття. Я знаю, що питання дуже старе, я просто залишаю це тут для майбутніх читачів.
спагеттідба
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.