oracle中逻辑读的单位是什么?
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/06 00:48:08
oracle中逻辑读的单位是什么?
有两种读:逻辑读和物理读
数据库读写的单位是数据块.当用户最终得到的结果可能只是某个数据块中的几行或几列.当一个查询语句被执行时,服务器进程会将相关的数据块从数据文件中写入内存(buffer cache).这就叫做物理读.每读取一个数据块,即是一次物理读.
而用户需要的并不是整个数据块,而是其中的几行或几列.从buffer cache中提取行的过程,便是逻辑读.
而其中逻辑读又分成两种:即时读(current read)和一致性读(consistent read).
(1)即时读::即时读就是读取数据块当前的最新数据.任何时候在buffer cache中都只有一份当前数据块.即时读通常发生在对数据进行修改,删除操作时.这时,进程会给数据加上行级锁,并且标识数据为“脏数据”.
(2)一致性读:
一致性读就是为了保证数据的一致性.在Buffer Cache中的数据块上都会有最后一次修改数据块时的SCN.
如果一个事务需要修改数据块中数据,会先在回滚段中保存一份修改前数据和SCN的数据块,然后再更新Buffer Cache中的数据块的数据及其SCN,并标识其为“脏”数据.
当其他进程读取数据块时,会先比较数据块上的SCN和自己的SCN.如果数据块上的SCN小于等于进程本身的SCN,则直接读取数据块上的数据;
如果数据块上的SCN大于进程本身的SCN,则会从回滚段中找出修改前的数据块读取数据.通常,普通查询都是一致性读.
综上所述,逻辑读的原理和过程比较复杂.逻辑读的单位并不能简单的认为是个块.
数据库读写的单位是数据块.当用户最终得到的结果可能只是某个数据块中的几行或几列.当一个查询语句被执行时,服务器进程会将相关的数据块从数据文件中写入内存(buffer cache).这就叫做物理读.每读取一个数据块,即是一次物理读.
而用户需要的并不是整个数据块,而是其中的几行或几列.从buffer cache中提取行的过程,便是逻辑读.
而其中逻辑读又分成两种:即时读(current read)和一致性读(consistent read).
(1)即时读::即时读就是读取数据块当前的最新数据.任何时候在buffer cache中都只有一份当前数据块.即时读通常发生在对数据进行修改,删除操作时.这时,进程会给数据加上行级锁,并且标识数据为“脏数据”.
(2)一致性读:
一致性读就是为了保证数据的一致性.在Buffer Cache中的数据块上都会有最后一次修改数据块时的SCN.
如果一个事务需要修改数据块中数据,会先在回滚段中保存一份修改前数据和SCN的数据块,然后再更新Buffer Cache中的数据块的数据及其SCN,并标识其为“脏”数据.
当其他进程读取数据块时,会先比较数据块上的SCN和自己的SCN.如果数据块上的SCN小于等于进程本身的SCN,则直接读取数据块上的数据;
如果数据块上的SCN大于进程本身的SCN,则会从回滚段中找出修改前的数据块读取数据.通常,普通查询都是一致性读.
综上所述,逻辑读的原理和过程比较复杂.逻辑读的单位并不能简单的认为是个块.