永发信息网

多线程调用oracle存储过程是否并发执行?

答案:2  悬赏:0  手机版
解决时间 2021-03-20 22:40
  • 提问者网友:書生途
  • 2021-03-20 17:30
我用delphi写了一个多线程的程序。主要用来实时收集数据,并经过处理后放入数据库中(多线程的),并把结果发回去。我的主要处理过程(主要是查询,判断)和写数据库都放到了存储过程中,但是发现程式执行起来对DB的负担很重,经常这个程式要占70%的cup资源。
所以我想是否多线程调用存储过程时,如果同时有多条线程要调,是否都会放到缓冲中等待前一个线程调用完了,再执行?而不是并发的执行!
请告诉我如果两个程式同时调用oracle存储过程会怎样?

大家有知道的吗?谢谢
最佳答案
  • 五星知识达人网友:持酒劝斜阳
  • 2021-03-20 17:49
这个问题非常简单
所谓的oracle存储过程,无非就是把大量的SQL集中在一起加入了变量循环等。

简单地看它就也就是对几个数据库对象的访问。

我们知道oracle数据库对象的访问是有锁机制的,同一时间内

只有一个用户能访问这样的对象,(最底的行级锁)

可以想象如个2个人同时对一个对象的同一个内容进行处理那

是不可能的。

锁只能被一个用户保持,这是规矩

当然这都是oracle 内部机制,如果多线程调用并非完全相同的内容,锁的竞争不是那么明显当然能够提升处理速度的。
全部回答
  • 1楼网友:举杯邀酒敬孤独
  • 2021-03-20 18:59
对于多线程调用存储过程是没有问题的,但可能存在存储过程所处理的表产生并发冲突,cpu资源占用多通常是磁盘读写多,建议在db负担重时查一下哪些表被锁,然后对存储过程进行优化。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯