大家都知道select获得的是共享锁,许多用户可以同时查询相同的数据。
但是我有一个疑问!?1.如果数据是从内存中获得那么共享锁可以说的通。2.如果数据不在内存中,而要从磁盘读取??一个磁盘有多少个磁头?应该只有一个吧。如果几个用户访问相同的数据,而这数据不在内存中。
问他们可以同时读取数据?这个时候共享锁该怎么解释呢?

解决方案 »

  1.   


    select的时候不是会加共享锁的吗? 具体我如何查看我也不知道,听书上说的。
      

  2.   

    Oracle的select是没有锁的
    你可以测试一下
    打开一个cursor,然后查询v$lock.
      

  3.   

    1,查询的话,不需要排队,或则谈何并发呢。 可以看一下oracle的多版本特性。
    2,取数据-->共享内存中寻找-->如果内存中不存在-->从磁盘区,然后放入内存--返回。
      

  4.   

    Oracle 没有阻塞读的锁。
    select 共享锁不存在的。
    相同的select 会把结果集保存在高速缓存中
      

  5.   


    select确实没有锁。
    我想问下,什么时候 要加/会加 共享锁呢?
    e.g lock table name in share mode
      

  6.   


    这个得按需求来,比如,你的需求是"只允许其他的用户查询表中的行,但是不允许插入、更新或删除行",那么这个时候你就可以使用S锁
    这个的粒度是表级别,以下几种情况为加上S锁:
    ① 在创建索引时,会缺省地加上S锁。7*24业务这条语句(等价于建索引)会使得所有DML都被阻塞
    ② SELECT ... FOR UPDATE 
    ③ 还有你举的那个例子,是手工加上S锁