那么,MSDTC是否是系统(服务器和应用程序)的大量资源消耗?
过去,我编写了几个依赖MSDTC进行数据库事务的大型Web应用程序。我从来没有调查过服务器上有多少耗水量。
目前,我正在使用CSLA框架,CSLA不依赖于MSDTC进行交易。它基本上重用了相同的连接对象,并在 TransactionScope 对象中执行所有数据库命令。
我想我正在寻找一些关于使用MSDTC的论据。
答案 0 :(得分:4)
MSTDC用于分发交易。为简化起见,如果需要分发事务,则使用TransactionScope
可以隐含地使用MSDTC,即:如果TransactionScope包含一段隐含多个资源的代码。这称为升级,大部分时间都是自动发生的。
所以,是的,它需要一些资源,但是如果你需要在Windows操作系统上跨多个系统(例如“资源管理器”,例如SQL Server,Oracle或MSMQ)进行ACID事务,那么你就不要有很多选择,但使用MSDTC。
关于配置MSDTC时可以完成的性能的一件事是确保只有一个协调器用于分布式资源池,避免MSDTC到MSDTC通信。配置通常是MSDTC面临的最大问题。示例:http://yrushka.com/index.php/security/configure-msdtc-for-distributed-transactions/
答案 1 :(得分:2)
与您的应用程序相比可能不是。我在我当前的项目中使用它,我从未注意到它会影响CPU资源。如果您的事务涉及多个服务器,那么您需要注意的是延迟,这将是一个比CPU更大的问题。
另一种看待的方法是,它不会受CPU限制,执行将基于IO。当然,这假设您在交易中没有进行大量计算,但现在不是DTC的错误吗?
答案 2 :(得分:1)
我已将MSDTC用于注册多个合作伙伴的事务(一个或多个数据库服务器和一个或多个使用MSMQ的服务器)。使用MSDTC在性能和使用交易方面的流失并不是什么大问题。我们通过MSMQ处理了超过4000万条消息,并且每一条消息都有一个db动作(尽管有些只是缓存的读取,但不是很多)。
最大的问题是MSDTC是一个巨大的痛苦,但当你跨越区域(例如DMZ到内联网)。当他们在不同的区域时获取注册是可能的,但需要调整。如果您有兴趣,DTC还有大量配置选项。