没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2005-03-18 10:31:00.000|阅读 1911 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
摘要:本文通过比较事务处理模型,包括数据库事务处理、Microsoft ADO.NET 手动事务处理和使用 Microsoft SQL
Server 2000 数据库的通用应用程序方案中的 ADO.NET 自动事务处理,重点介绍影响性能、可伸缩性和可维护性的事务处理控件的性能部分。
目录
简介
事务处理控件的体系结构选择影响到性能、可伸缩性和可维护性。本文通过比较各种事务处理模型,包括数据库事务处理、Microsoft® ADO.NET
手动事务处理和使用 Microsoft SQL Server™ 2000 数据库的通用应用程序方案中的 ADO.NET
自动事务处理等模型的相关性能,重点介绍这些选择的性能部分。
有关此处所比较的技术方面的代码示例,请参阅 Transaction Control(英文)中的相关文章。
体系结构选项
事务处理控件模型包括数据库事务处理、手动事务处理和自动事务处理。虽然这些模型完成的任务相同,即维护某个事务处理范围内资源之间的一致性,但它们又各有优缺点,因此用途也各不相同。
数据库事务处理
数据库事务处理是在 Transact-SQL 中实现的,Transact-SQL 将所需的操作打包在 BEGIN TRANSACTION 和
COMMIT/ROLLBACK TRANSACTION 语句中。
手动事务处理
手动控制事务处理范围是通过使用一组 ADO.NET 对象进行的,使用明确的指令开始和结束事务处理。
自动事务处理
在 Microsoft Windows® 2000 组件服务 (COM+) 中注册 .NET
类,以便参与事务处理。该类具有声明性属性的标记,指定该类参与事务处理的方式。
测试方案
为了比较事务处理模型,我们使用了一个方法,在数据库的相应表中插入订单标头和详细信息。如果任何插入操作失败,我们将事务处理恢复到原始状态。如果所有插入操作成功,则提交事务处理。
为了使测试尽可能符合实际情况,加载的数据库中包含了 10 万行客户帐户,100 万行订单(每个客户 10 个订单)和 500 万个订单详细信息(每个订单 5
个详细信息)。这些数据位于 SQL Server 2000 数据库和 SQL Server .NET 数据提供程序中,用于连接 SQL
Server。此处比较的某些方法使用了 SQL Server 2000 的 XML 功能。
InsertOrder
InsertOrder 方法接受代表一个订单和多个详细信息的数据,然后将数据插入到数据库中相应的 Order 和 OrderDetails
表中,作为该事务处理的一部分。
测试工具和策略
在我们的测试中,一个 ASPX Web 页调用了一个包含测试代码的 .NET 程序集。如果直接测试事务处理控件技术,而不是通过 Web
服务器,我们可以获得更好的绝对性能,然而,对通用应用程序方案而言,在无状态环境中进行测试更具现实意义。另外,有很多测试工具可以对提供多线程测试的 Web
页进行适当地强度测试。
为达到测试目的,我们使用了 Microsoft 应用程序中心测试 (ACT)。它可以对 Web 服务器进行强度测试,分析 Web 应用程序(包括 ASP
页及其使用的组件)的性能和可伸缩性问题。有关如何创建和运行测试的详细信息,请参阅 ACT
documentation(英文)。通过打开到服务器的多个连接并迅速发送 HTTP
请求,应用程序中心测试可以模拟一大组用户。它还允许我们建立实际的测试方案,我们可以在方案中使用一组随机参数值调用同一个方法。此功能很重要,这样用户就不必使用相同的参数值反复调用同一个方法。另一个有用的功能是,应用程序中心测试可以记录测试结果,从而提供有关
Web 应用程序性能的最重要的信息。
根据业务需求不同,应用程序可能在不同的事务处理隔离级别上运行。隔离是指一个事务处理必须和其他事务处理分离的程度。隔离级别越高,越能保证数据的一致性,但可能会严重影响应用程序的伸缩能力。降低隔离级别可以增强应用程序的可伸缩性,但却不能保证数据的准确性。Microsoft
SQL Server 2000 支持四种隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和
SERIALIAZABLE。默认情况下,它在 READ COMMITTED 隔离级别下运行。有关详细信息,请参阅 Microsoft SQL Server
2000 documentation(英文)。Windows 2000 上运行的 COM+(1.0 版)只支持 SERIALIAZABLE
隔离,即最高程度的隔离。这样高的数据保护级别大大影响了性能。(注意:与 Microsoft Windows .NET Server(目前最高版本是 Beta
3)一同发行的 COM+ 1.5 允许对事务处理组件的隔离级别进行配置。)为了对事务处理模型进行客观的比较,我们在 SERIALIAZABLE
隔离级别上运行事务处理。
计算机配置
下表提供了用于执行测试的测试台配置的简单摘要。
表 1:客户端计算机配置
客户端数量 |
计算机/CPU |
CPU 数量 |
内存 |
硬盘 |
软件 |
1 |
Dell Precision WorkStation 530 MT1694 MHz
|
1 |
512 MB |
16.9 GB |
Windows XP 应用程序中心测试 |
表 2:Web 服务器配置
服务器数量 |
计算机/CPU |
CPU 数量 |
内存 |
硬盘 |
软件 |
1 |
Compaq Proliant 400 MHz |
4 |
640 MB | 50 GB | Windows 2000 Advance Server SP 2 .NET 框架发行版本 |
表 3:数据库服务器配置
服务器数量 |
计算机/CPU |
CPU 数量 |
内存 |
硬盘 |
软件 |
1 |
American Megatrends Atlantis 800 MHz |
2 |
1 GB | 28 GB | Windows 2000 Advance Server
SP 2 SQL Server Enterprise Edition SP 2 |
性能测试结果
吞吐量和滞后时间是关键的性能指标。对于给定数量的返回数据,吞吐量是指单位时间(通常是 1
秒)内处理的客户端请求数量。因为从可用性角度来看,吞吐量在某一响应时间达到峰值是不能接受的,因此我们跟踪了滞后时间,利用由 ACT
为每个运行的测试生成的报告,将其作为响应时间进行测定,并在响应时间超过 1 秒时立即停止某个给定方法的测试。
使用 OPENXML 执行 InsertOrder
在第一组测试中,订单和订单详细信息从 DataSet 表中以 XML 格式传递到一个 Microsoft SQL Server 2000
存储过程中。存储过程中的 Transact-SQL 代码使用 OPENXML 方法,通过一次数据库往返将相应信息插入到 Order 和 OrderDetails
表中。测试首先运行一个包含 10 个详细信息的订单。
图 1:InsertOrder_OpenXml(Order=1, Details=10)
注意
ManualTxn_COM+_IP 产生的 COM+ 相互操作非常少,因为此方法不使用任何 COM+ 服务,这也是它和 ManualTxn
具有非常类似的行为的原因,在 ManualTxn 中,根本没有涉及到 COM+。
如果将 ManualTxn 和 ManualTxn_COM+_IP 与 AutomaticTxn_IP 进行比较,您会发现自动事务处理平均要慢约
30%。这是因为使用分布式事务协调器 (DTC) 设置事务处理的成本要比在事务处理中完成所有工作(11 次插入)的成本大。AutomaticTxn_IP
还涉及到一个上下文方法调用,需要进行上下文转换,因而产生了额外的成本。
AutomaticTxn_IP 提供的性能比 ManualTxn_COM+_OP 和 AutomaticTxn_OP 要好,因为 AutomaticTxn_IP
中的库程序包可以使程序集在调用应用程序进程(本例中是 aspnet_wp.exe)内部运行,从而避免了封送处理。因为无需数据封送,AutomaticTxn_IP
中的总体成本(包括 DTC 成本)要比 ManualTxn_COM+_OP 少,这也是 AutomaticTxn_IP 在性能方面比
ManualTxn_COM+_OP 略胜一筹的原因。
可以看到,AutoCompleteTxn_IP 和 AutoCompleteTxn_OP AutoComplete 版本分别与 AutomaticTxn_IP
和 AutomaticTxn_OP 版本的运行状况类似。使用 AutoComplete
提交的缺点是,它在方法成功返回并确定进行提交时,由于事务处理要释放服务器资源而延长了时间,因而可能会降低应用程序的性能。另外,当事务处理失败时,它不允许用户在需要时发出用户友好消息。
图 2:InsertOrder_OpenXml(Order=1, Details=100)
当测试运行 1 个订单和 100 个详细信息时,各种方法之间几乎没有什么差别。
在吞吐量方面,数据库事务处理模型仍然比其他方法略占一些优势。
此测试中各个模型的性能都非常接近,这是因为在此事务处理中完成了大量工作(101 次插入)。这里的成本(例如进程间的 DTC
通信和数据封送)被分摊到整个事务处理过程中,因此变得不是那么明显。
使用多个 DataAdapter 的 InsertOrder
在第二组测试中,我们为数据库中的 Order 和 OrderDetails 表分别关联了 DataAdapter。在 DataAdapter 上,为
InsertCommand 指定了存储过程。首先调用与 Order 表对应的 DataAdapter 上的 Update 方法,它返回新插入订单的
OrderId。然后调用与 OrderDetails 表对应的 DataAdapter 上的 Update 方法。因为 Update
方法不是以批处理方式向数据库发送更改,因此这一技术使用了多次数据库往返操作,以完成这些插入。
请参阅
Performance Comparison: Data Access Techniques(英文)一文,其中比较了各种数据访问技术,包括
OPENXML 和多个 DataAdapter 方法。
测试首先运行 1 个订单和 10 个详细信息。
图 3:InsertOrder_DataSet(Order=1, Details=10)
注意
在 ManualTxn 方法中,事务处理控件通过 ADO.NET SQLTransaction 对象来实现。
在 ManualTxn_COM+_IP 和 ManualTxn_COM+_OP 中,都是使用 ADO.NET SQLTransaction
对象来控制事务处理,而程序集则由 COM+ 分别配置为库和服务器程序包。
包含 AutomaticTxn 和 AutCompleteTxn 实现的 .NET 程序集使用 COM+ 进行注册。在 AutomaticTxn
中,我们显式提交或中止事务处理,而在 AutoCompleteTxn 中,则由 .NET 程序集来确定提交或中止当前事务处理。
在 AutomaticTxn_IP 和 AutoCompleteTxn_IP 中,包含程序集的 COM+
应用程序是一个由库激活的应用程序,所以该应用程序在创建它的客户端进程中运行。
在 AutomaticTxn_OP 和 AutoCompleteTxn_OP 中,包含程序集的 COM+ 应用程序是一个由服务器激活的应用程序,所以它在代理进程
(dllhost.exe) 中运行。
ManualTxn 和 ManualTxn_COM+_IP 的性能非常类似,这是因为与 COM+ 相互操作相关的成本很小。
AutomaticTxn_IP 与上述方法相比明显缓慢,这是因为使用分布式事务协调器 (DTC) 设置事务处理的成本要比在事务处理中完成所有工作(11
次插入)的成本高。除了 DTC 外,AutomaticTxn_IP 中还因 COM+ 的相互操作和上下文转换而产生了一些额外的成本,这一点我们从上面可以看到。
AutomaticTxn_IP 提供的性能要比 ManualTxn_COM+_OP 和 AutomaticTxn_OP 提供的性能好,因为在后者中,COM+
应用程序被配置为服务器程序包,而服务器程序包在一个单独的代理程序 (dllhost.exe) 中运行,因而需要数据封送。
正如我们所预计的那样,AutoCompleteTxn_IP 和 AutoCompleteTxn_OP AutoComplete 版本分别与
AutomaticTxn_IP 和 AutomaticTxn_OP 版本的运行状况类似。
图 4:InsertOrder_DataSet(Order=1, Details=100)
与第一个测试一样,在大型事务处理(101 次插入)中,事务处理控件模型之间的性能差别大大降低了。而且,与 DTC
和数据封送相关的成本也因大型事务处理的分摊而降低了。
总结
每个事务处理模型在应用程序性能和代码可维护性方面都各有侧重,因此它们适用于不同的方案。
运行存储过程中实现的数据库事务处理可以提供最好的性能,因为它只需要一次数据库往返操作。虽然它提供了很好的性能和灵活性,但用户还需要在 Transact-SQL
中进行编码,而这并不像在 .NET 中那样简单。
使用 ADO.NET
事务处理对象的手动事务处理很容易进行编码,而且用户可以使用显式的指令开始和结束事务处理,因而在控制事务处理的范围时具有很大的灵活性。与这种方便和灵活性相对应的是,ADO.NET
手动事务处理需要进行很多次往返操作,至少等于事务处理中要执行的操作数加上开始和结束事务处理所需要的往返操作次数。
由于和 DTC 的交互以及和 COM 的相互操作,自动事务处理模型还会产生一些额外开销。而与 DTC
相关的成本可以分摊到整个事务处理过程中,如测试中所示。使用此模型的优点是大大简化了应用程序的设计并减少了编码需求。如果事务处理跨越多个能够识别事务处理的资源管理器(可能包括
SQL Server 数据库和 MSMQ 消息队列),那么只能选择自动事务处理。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号