oracle并行处理的问题???

FoxBryant 2011-08-31 12:56:30
oracle支持并行处理,提供了如表级锁、行级锁等。
1. 哪位能帮忙介绍下插入、查询及删除操作时,分别会用到哪些锁?
2. 三个线程同时对一个表分别执行插入、查询及删除操作时,oracle是否会并行处理,还是要等一个操作完成后再进行另一个操作?

非常感谢!
...全文
470 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
FoxBryant 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lnuwhy 的回复:]
你可以看下oracle concepts 第四章 事务管理 和第14章 并发和一致性,就一目了然了,这么听别人讲估计你还是迷糊
[/Quote]

说的很对,小弟这就去看哈,嘿嘿!
lnuwhy 2011-09-02
  • 打赏
  • 举报
回复
你可以看下oracle concepts 第四章 事务管理 和第14章 并发和一致性,就一目了然了,这么听别人讲估计你还是迷糊
yjytiantang 2011-09-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 foxbryant 的回复:]
引用 5 楼 justdoitman 的回复:
...
另外,oracle执行查询语句时是查询未提交的语句。


是在已提交的记录里查询吧?
[/Quote]
用户进程根本不会直接操作到数据库本身。
在select,update,delete ..等操作时,系统首先会去缓存区里找用到的信息,如果有直接作业,没有的话会把用到的信息从数据库里提取到缓存区。然后DBWn进程会不定时的把缓存区的信息提交到数据库。所以缓存区里既有已提交但还没来得及写入数据库的信息,也有已经回滚但数据库还没撤销的数据。总体来说,最终oracle会写入已提交的数据,回滚未提交的数据,保持数据一致性。
诺维斯基 2011-09-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yixilan 的回复:]
1.锁类型
TM: DML or table lock(所有的插入,删除,更新都被称为DML操作;查询时不会产生锁)
TX: transaction lock
2.查询就无所谓了,不会有锁。
除了查询,其他操作,ORACLE不会并行处理,只能等待其中一个操作完成后,再进行下一个操作。
例:线程1对表A做插入操作的时候,并且还没有提交的时候,会同时产生TM和TX两种锁,其它线程不能对表A做……
[/Quote]

+
Kobayashi 2011-09-02
  • 打赏
  • 举报
回复
一楼强....
FoxBryant 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 justdoitman 的回复:]
...
另外,oracle执行查询语句时是查询未提交的语句。
[/Quote]

是在已提交的记录里查询吧?
FoxBryant 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yixilan 的回复:]
引用 3 楼 yjytiantang 的回复:
引用楼主 foxbryant 的回复:
只要互相操作的不是同一个字段,oracle会并行处理,它具有多态性,不需等待~

对,只要互相操作的不是同一条记录吧。呵呵。
[/Quote]

是不是可以这么说:假如当前表有100条记录,一个线程在表后面直接追加,另一个线程在100条记录里面进行有条件删除。两个线程是可以并行处理的?
yjytiantang 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 foxbryant 的回复:]
oracle支持并行处理,提供了如表级锁、行级锁等。
1. 哪位能帮忙介绍下插入、查询及删除操作时,分别会用到哪些锁?
2. 三个线程同时对一个表分别执行插入、查询及删除操作时,oracle是否会并行处理,还是要等一个操作完成后再进行另一个操作?

非常感谢!
[/Quote]
查询时,好像也会产生锁,是共享锁。
删除,插入时,是排他锁。
只要互相操作的不是同一个字段,oracle会并行处理,它具有多态性,不需等待~
貌似是这样,你google一下~~
Alessandro_ 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yixilan 的回复:]

1.锁类型
TM: DML or table lock(所有的插入,删除,更新都被称为DML操作;查询时不会产生锁)
TX: transaction lock
2.查询就无所谓了,不会有锁。
除了查询,其他操作,ORACLE不会并行处理,只能等待其中一个操作完成后,再进行下一个操作。
例:线程1对表A做插入操作的时候,并且还没有提交的时候,会同时产生TM和TX两种锁,其它线程不能对表A……
[/Quote]+
yixilan 2011-08-31
  • 打赏
  • 举报
回复
1.锁类型
TM: DML or table lock(所有的插入,删除,更新都被称为DML操作;查询时不会产生锁)
TX: transaction lock
2.查询就无所谓了,不会有锁。
除了查询,其他操作,ORACLE不会并行处理,只能等待其中一个操作完成后,再进行下一个操作。
例:线程1对表A做插入操作的时候,并且还没有提交的时候,会同时产生TM和TX两种锁,其它线程不能对表A做DML操作;当线程A提交后,把表A的锁释放出来,其他的线程才可以依次对该表继续做DML操作。

在这期间,任何其他线程执行查询是可以的。不会有锁
justdoitman 2011-08-31
  • 打赏
  • 举报
回复
通常的数据库中是有排它锁和共享锁的,排他锁在对数据库进行更新、插入或者删除时添加的,共享锁在选择时添加的。但是oracle的实现机制不太一样,只有排他锁,没有共享锁,而且这个共享锁是基于元组的,也就是只要线程不是对同一行进行DML,就是可以并行的,否则就需要等一个线程完成后才可以执行。另外,oracle执行查询语句时是查询未提交的语句。所以不用加锁,只要能判断出哪些是已提交的,哪些是未提交的即可。
yixilan 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yjytiantang 的回复:]
引用楼主 foxbryant 的回复:
只要互相操作的不是同一个字段,oracle会并行处理,它具有多态性,不需等待~
[/Quote]
对,只要互相操作的不是同一条记录吧。呵呵。

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧