oracle中在编写存储过程启动多线程的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中在编写存储过程启动多线程的问题?相关的知识,希望对你有一定的参考价值。

参考技术A

问题如下:

ORACLE的多线程体现在DML上 在操作时, 如果见到/* +*/ (平时写备注、评论块的/**/符号中有加号, 那么则表明了使用Oracle Hint.  /*+ parallel(表名,并发数)*/ (有时候写作Append  parallel,或者有时候直接写Append)  . 




从开发的角度看:


ORACLE多线程可以提高某些语句查询的速度(不是一定的,取决于你的核,和服务器, 我原本有一些材料可以图示进程数和速度的关系,可惜一时找不到, 如果需要可以再联系)。具体使用时, 做几个测试 看看速率提高多少。。



从数据库整体来看:


多线程并不是优化了你的查询速率, 而是使用了更多数据库的资源(其他用户或者进程的资源)换来你的语句速率的提高。 联系一下你的DBA, 因为很有可能你用了多进程后,从DBA的EM上会发现你资源在某时间段内用的很高,甚至会给出警告。

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

我用delphi写了一个多线程的程序。主要用来实时收集数据,并经过处理后放入数据库中(多线程的),并把结果发回去。我的主要处理过程(主要是查询,判断)和写数据库都放到了存储过程中,但是发现程式执行起来对DB的负担很重,经常这个程式要占70%的cup资源。
所以我想是否多线程调用存储过程时,如果同时有多条线程要调,是否都会放到缓冲中等待前一个线程调用完了,再执行?而不是并发的执行!
请告诉我如果两个程式同时调用oracle存储过程会怎样?
大家有知道的吗?谢谢

这个问题非常简单
所谓的oracle存储过程,无非就是把大量的SQL集中在一起加入了变量循环等。

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

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

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

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

是不可能的。

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

当然这都是oracle 内部机制,如果多线程调用并非完全相同的内容,锁的竞争不是那么明显当然能够提升处理速度的。
参考技术A 并发性
是指两个或多个在同一
时间间隔
内发生。在多道程序环境下,并发性是指宏观上在一段时间内有多道程序在同时执行。但在单处理机系统中,每一个时刻CPU仅能执行一道
程序
,故微观上,这些程序是在CPU上交互执行

以上是关于oracle中在编写存储过程启动多线程的问题?的主要内容,如果未能解决你的问题,请参考以下文章

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

oracle 存储过程中多线程执行另一个存储过程

在 Java 代码中启动 Oracle 存储过程

oracle 存储过程报错

SQL调用服务器核心数(oracle 多线程)

ORACLE 存储过程报错 PLS-00103 求查错