Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 DTCTransaction и SQL Profiler  [new]
KellyLynch
Member

Откуда:
Сообщений: 94
У меня почему-то транзакции на моём SQL Server 2008 превращаются в Distributed Transactions; и поэтому я (это и есть моя проблема) не могу их отслеживать в SQL Profiler

У меня есть SQL Server 2008 R2. В числе прочих запросов к нему обращается и некое BizTalk-приложение (не мной написанное). Оно вызывает хранимые процедуры.

Когда я попытался через SQL Profiler посмотреть - что именно в этот момент происходит - то увидел такую картину:

1. Событие SQLTransaction с EventSubClass = '0 - Begin'. Всё понятно - BizTalk "оборачивает" вызов моей процедуры в транзакцию.
2. тут же событие DTCTransaction '7 - Enlisting in a DTC transaction'
затем событие DTCTransaction '1 - Propagate transaction'

ВОПРОС: если я это правильно понял, то транзакция ставновится "Distributed (DTC) transaction". А это почему? У меня реально нет никакой "распределённой базы" размещающейся на нескольких серверах. Оддин сервер, на нём моя база - и всё. Почему же эта транзакция стала distributed?

3. Далее я в Profiler log-е вижу как выполняется моя процедура, заканчивается, и... не вижу кто и как делает commit (rollback) для этой транзакции. Последний раз где упоминается ID этой транзакции - это событие RPC:Completed 'exec sp_reset_connection'. Больше я ID этой транзакции не видел - а я ждал ещё 8 минут.

ВОПРОС: - почему в Profiler log-е я не вижу момента когда произведён commit той транзакции? А он был очевидно произведён - логика того BizTalk-приложения такова что вряд ли оно стало бы ждать с commit-ом как только та моя процедура закончилась.

Может, если транзакция не "простая" а Distributed, то SQL Profiler не умет правильно отображать её? А мне сейчас именно нужно отследить момент когда происходит commit (rollback).
Всё усугубляется тем что я не писал то BizTalk-приложение, и потому не знаю - что именно оно делает с транзакциями. Есть ли там нечто что "заставляет" ту транзакцию превращаться в Distributed - этого я просто не знаю.

В SQL Profiler-е я выбирал такие события:
Stored Procedures: RPC Output Parameter; RPC: Completed; RPC:Starting; SP:Completed; SP:Startinng; SP:StmtCompleted; SP:StmtStarting;
TSQL: SQL:BatchCompleted; SQL:BatchStarting
Transactions: все
18 апр 14, 13:56    [15901135]     Ответить | Цитировать Сообщить модератору
 Re: DTCTransaction и SQL Profiler  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Почитайте справку по BEGIN DISTRIBUTED TRANSACTION для начала, может там есть ответ на вопрос.
18 апр 14, 14:08    [15901204]     Ответить | Цитировать Сообщить модератору
 Re: DTCTransaction и SQL Profiler  [new]
KellyLynch
Member

Откуда:
Сообщений: 94
Владислав Колосов
Почитайте справку по BEGIN DISTRIBUTED TRANSACTION для начала, может там есть ответ на вопрос.


Спасибо за ссылку. Хотя в моём конкретном случае она ине подошла. Я посмотрел - что у меня установлено в 'remote proc trans'. Оказалось - 0. То есть то самое "a local transaction automatically cause the local transaction to be promoted to a distributed transaction managed by MS DTC" у меня отключено

И ещё больше меня интересует вопрос (кто бы ни вызвал этот propagation в DTC) - чем (каким инструментом) посмотреть: где и когда MS DTC сделает мне commit для той транзакции? В описании события DTCTransaction соответствующие случаи вроде как имеются:

http://technet.microsoft.com/en-us/library/ms189564.aspx
...
16=Transaction is aborting
17=Transaction is committing
...

но я их в своём log-е не вижу. Вижу только "1=Propagate Transaction" и "7=Enlisting in a DTC transaction"

Заранее извиняюсь если мои вопросы относящиеся к DTC покажутся глупыми - так как про DTC почти ничего не знаю...
18 апр 14, 14:47    [15901484]     Ответить | Цитировать Сообщить модератору
 Re: DTCTransaction и SQL Profiler  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Что-то такое недавно мелькало в конференции, дело в самом приложении. Уровень транзакции как раз эскалировадся до распределенной.
18 апр 14, 15:11    [15901689]     Ответить | Цитировать Сообщить модератору
 Re: DTCTransaction и SQL Profiler  [new]
KellyLynch
Member

Откуда:
Сообщений: 94
Владислав Колосов
Что-то такое недавно мелькало в конференции, дело в самом приложении. Уровень транзакции как раз эскалировадся до распределенной.


да - вот что можно получить в приложении написанном на .NETе если использовать класс TransactionScope:

http://stackoverflow.com/questions/1690892/transactionscope-automatically-escalating-to-msdtc-on-some-machines

автор
...
SQL2008:

Allows multiple connections within a single TransactionScope (as demonstrated in the above sample code.)
Caveat #1: If those multiple SqlConnections are nested, that is, two or more SqlConnections are opened at the same time, TransactionScope will immediately escalate to DTC.
...


Возможно - то BizTalk-приложение именно так и поступает.

И ещё больше меня интересует вопрос (кто бы ни вызвал этот propagation в DTC) - чем (каким инструментом) посмотреть: где и когда MS DTC сделает мне commit для той транзакции? В описании события DTCTransaction соответствующие случаи вроде как имеются:

http://technet.microsoft.com/en-us/library/ms189564.aspx
...
16=Transaction is aborting
17=Transaction is committing
...

но я их в своём log-е не вижу. Вижу только "1=Propagate Transaction" и "7=Enlisting in a DTC transaction"
18 апр 14, 16:48    [15902400]     Ответить | Цитировать Сообщить модератору
 Re: DTCTransaction и SQL Profiler  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Commit может выполняться неявно на операция вставки, удаления, обновления. Я, например, не нашел в списке событий отслеживание неявного закрытия, только клиентские команды.
18 апр 14, 17:18    [15902563]     Ответить | Цитировать Сообщить модератору
 Re: DTCTransaction и SQL Profiler  [new]
KellyLynch
Member

Откуда:
Сообщений: 94
Владислав Колосов
Commit может выполняться неявно на операция вставки, удаления, обновления. Я, например, не нашел в списке событий отслеживание неявного закрытия, только клиентские команды.


>Commit может выполняться неявно на операция вставки, удаления, обновления

Да. Но у меня дела обстоят как: всё что делается внутри упомянутой транзакции - это вызов (BizTalk-приложением) хранимой процедуры. Больше ничего нет. Сразу после того как процедура завершилась (RPС:Completed), упомянутая транзакция больше нигде не фигурирует. BizTalk-приложение вызывает только эту процедуру и не пытается напрямую вызвать UPDATE/DELETE/INSERT.

Подозреваю, что SQL Profiler не показывает произошедший commit потому что транзакция - distributed. С другой стороны, нигде об этом явно не написано....
18 апр 14, 17:29    [15902617]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить