Является ли MSDTC большой утечкой ресурсов? - PullRequest
4 голосов
/ 27 сентября 2011

Итак, является ли MSDTC большой утечкой ресурсов в системе (сервер и приложение)?

В прошлом я написал несколько крупномасштабных веб-приложений, которые используют MSDTC для базы данных.сделки.Я никогда не исследовал, сколько утечки будет на сервере.

В настоящее время я работаю с платформой CSLA, и CSLA не использует MSDTC для транзакций.Он в основном использует один и тот же объект соединения и выполняет все команды базы данных в объекте TransactionScope .

Я предполагаю, что я ищу какие-либо аргументы в отношении использования MSDTC или нет.

Ответы [ 3 ]

5 голосов
/ 27 сентября 2011

MSTDC используется для распределенной транзакции. Для упрощения, использование TransactionScope может косвенно использовать MSDTC, если транзакция должна быть распределена, то есть: если TransactionScope окружает фрагмент кода, который подразумевает более одного ресурса. Это называется эскалацией, и большую часть времени происходит автоматически.

Итак, да, для этого требуются некоторые ресурсы, но если вам нужна транзакция ACID между несколькими системами (например, «менеджерами ресурсов», такими как SQL Server, Oracle или MSMQ) в ОС Windows, вы у меня нет большого выбора, но используйте MSDTC.

Одна вещь, касающаяся производительности, которая может быть достигнута при настройке MSDTC, заключается в том, чтобы обеспечить наличие только одного координатора для пула распределенных ресурсов, избегая связи MSDTC с MSDTC. Конфигурация обычно является самой большой проблемой, с которой вы столкнетесь при работе с MSDTC. Пример здесь: http://yrushka.com/index.php/security/configure-msdtc-for-distributed-transactions/

2 голосов
/ 27 сентября 2011

По сравнению с вашим приложением, вероятно, нет.Я использую его в своем текущем проекте, и я никогда не замечал, что это влияет на ресурсы процессора.Вы должны быть осторожны с задержкой, если в вашей транзакции задействовано несколько серверов, это будет гораздо большей проблемой, чем ЦП.

Еще один способ взглянуть на то, что он не будет привязан к процессору, выполнение будет основано на IO.Конечно, это предполагает, что вы не выполняете много вычислений в своей транзакции, но это не ошибка DTC, не так ли?

1 голос
/ 27 сентября 2011

Я использовал MSDTC для транзакций, регистрирующих несколько партнеров (один или несколько серверов БД и один или несколько серверов, использующих MSMQ). Потеря использования MSDTC с точки зрения производительности по сравнению с использованием транзакций в целом не имеет большого значения. Мы обрабатывали более 40 миллионов сообщений, передавая данные через MSMQ, и каждое из них также имело действие db (хотя некоторые из них были просто кэшированными чтениями, хотя и немногими).

Самая большая проблема в MSDTC - это огромная боль, но когда вы пересекаете зоны (например, DMZ в интранет). Получение материалов для регистрации, когда они находятся в разных зонах, возможно, но требует настройки. DTC также имеет большое количество параметров конфигурации, если вы заинтересованы.

...