COM+并发(200分)

  • 主题发起人 主题发起人 kite20020304
  • 开始时间 开始时间
K

kite20020304

Unregistered / Unconfirmed
GUEST, unregistred user!
现象:
试验1、客户端通过MTS服务调用一个比较耗时的存储过程:25.937s
试验2、客户端通过MTS服务远程执行一个简单的查询:0.219s
试验3、客户端A通过MTS服务调用一个比较耗时的存储过程,
同时客户端B通过MTS服务远程执行一个简单的查询,
此时调用时间分别是:26.6s,24.825s(!慢了很多,存储过程执行完毕后才能取出查询结果)
请问如何处理并发处理慢的问题?
测试环境:
Delphi7
模式:
TComponentFactory.Create(ComServer,TMTS,Class_MTS,ciSingleInstance,tmBoth);

(几种模式都试过了,效果差不多)
 
实验1 的存储过程在执行中是不是会对实验2的查询产生影响呢?
 
试验1只是一个模拟耗时的存储过程,里面就是循环循环再循环,没有对任何表进行操作
 
帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com

╰=========================================╯
 
可以引进多线程来执行
 
问题处在了数据库服务器上。我试过,在使用SQL Server prof版的时候,实行多线程并发SQL操作比把所有SQL单线程顺序执行还慢,没有办法。DB2我也试过一次也是这样的。COM+本身就是多线程运行的。但是数据库服务器很多时候都是单线程的(主要是表锁或者行锁造成的)。即使大家都使用Select语句,也是顺序执行比线程执行快,郁闷。可能还是数据库服务器的版本和硬件环境太差造成的,如果数据库服务器拥有16个CPU、大型磁盘阵列和巨大内存的话,我想可能多线程就会比顺序执行快了。
毕竟大多数企业级应用确实是这么干的。
 
我想应该由办法解决的
我们想在用的是IBM小型机:4CPU,8G内存,应该能满足
 
可能需要调整数据库服务器的参数。
 
我觉得和服务器关系不大,因为我用别的中间件可以实现
 
帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com

╰=========================================╯
 
三層架構系統對速度影響有三個方面:
1、是數據引擎。目前最快是DBExpress
2、是網絡速度。目前最好用千M系統
3、是開發模式。視系統分布也定
 
数据库就是Oracle (9i)
 
MTS是不是用得多线程呢?改用ADO而不是BDE呢?
 
TComponentFactory.Create(ComServer,TMTS,Class_MTS,ciSingleInstance,tmBoth);

这样是不行的.
TComponentFactory最佳性能是用默认的:
TComponentFactory.Create(ComServer,TMTS,Class_MTS, ciMultiInstance, tmApartment);
原因可看VCLCom.pas的代码, 当thread mode为tmApartment时, 会为COM对象创建一个线程来执行的, 其它的模式就不这样处理了.
当然, 数据库和MTS不要在一台机器上, 一个无意义的循环也很浪费CPU时间的.
 
哪位大富翁能解释一下 ciMultiInstance, tmApartment 等模式以及
Call Synchronization、Transcation Model、Object pooling的含义
 
我们也是使用了MTS技术,用我们的中间件来测试一下看看,最好能给个建议[:)]
例程下载www.szmax.net/webpush-8.htm
 
多人接受答案了。
 
后退
顶部