com+中transaction的问题(200分)

  • 主题发起人 主题发起人 infowain
  • 开始时间 开始时间
I

infowain

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近做了一个项目, 使用Delphi5 &
SQL Server 200
中间层用的是Socket Server &
COM+
现在有个问题很严重,我有些中间层元件是‘需要新建事务’的,
在连接这些元件的时候,有时候会非常慢,像死机了一样。
这种情况是随机出现的,没有什么规律。
我抓到的错误讯息是
New transaction cannot enlist in the specified transaction coordinator
如果我把中间层和数据库放在同一台机器上,问题出现的就少一点。
如果我把这些元件设置为“不需要事务”,就不会出现这种情况。
我先在确实需要用到‘需要新建事务’的元件,我该怎么办?
 
可以先从如下问题入手:
1.你为什么要选用Require new transaction 属性?
2.你的组建的线程模式是什么?
3.你的组建调用方式是什么?
4.有没有使用SQL2000的监控工具差错?
5.同时激活的组件实例有多少?
6.网络是否有问题?
 
1.require new transaction和require transaction的不同会导致出现我遇到的问题吗?
2.我的组建的线程模式是both。
initialization
TComponentFactory.Create(ComServer, TEntGetData,
Class_EntGetData, ciMultiInstance, tmBoth);
end.
3.我每次调用的时候新建一个sockctconnection调用组件,通过AppServer取得组件的接口
4.你所指的sql2000监控的工具是profile吗?
5.我启用了com+的polling,池化的元件数量是10个。
6.client和server都在同一个domain中,而且线在我的COM+和SQL Server在同一台server上。
多谢你的回复
盼望你能给我更进一步的建议。
 
1.SQL Query Analyzer.
2.我一直使用标准的方式调用COM+组件,Foo=TCoFoo.CreateRemote(MachineName);
3.你的COM+组建是否经过了单独测试。
4.SetAbort合SetComplete是否正确调用。
 
应该不是我的程序的问题
是不是需要做些什么系统配置?
 
COM+ 元件預設的交易隔離等級是 Serializable
 
:nealzhao兄
能讲的详细点吗
 
我觉得应该从体系结构入手,中间件系统的效率和系统的结构设计关系很大,如考虑一下
为什么非得用Required new transaction呢,不能用改用Required transaction或少用
Required new transaction吗?因为事务一开始就会锁定资源,所以锁定一多就可能Lock
了,想想如果Required new transaction模式的Com+ component的调用者本身也需要事务
,又如果它们申请的资源有冲突,就很可能出现你所说的那种情况。
你也可以考虑采用程序方式自己控制事务管理,让事务尽可能迟开始,尽可能早结束。
 
后退
顶部