关于SGA中的数据高速缓存?

时间:2022-01-18 20:56:24
数据高速缓存(Database Buffer Cache)用于存放最近访问的 数据块信息,它由许多小缓冲区( 缓冲区尺寸=数据块尺寸)组成。
问:数据块具体是什么东东?表?记录?还是其它什么?
    缓冲区尺寸=数据块尺寸这一关系该如何理解?
数据高速缓存分为脏缓冲区、空闲缓冲区和芒缓冲区。其中,脏缓冲区是指内容与相应数据块不一致的缓冲区。
问:缓冲区和数据块有什么联系,什么操作可以使缓冲区与数据块内容不一致?

6 个解决方案

#1


block是块,即是oracle存储的最少单位,一组block构成extent, extent是在segment下管理的。

oracle从数据文件读取数据块(block)到SGA,即db_cache.

#2


数据块在oracle中是最小空间分配单位,数据行,索引条目等等都存储在块中,块常见4种大小:2,4,8,16KB,在创建表的时候有默认会初始他块的大小,当然也可以自定义块大小,这样块就有6中大小了,脏数据指的是将缓存中的数据要写到磁盘上

#3


接着楼上的讲,表是一种segment(段).记录就是表中的一条数据。是存放在数据块中的(block)。每条记录都有一个rowid,它的数据记录了这条记录是放在哪个数据文件,的哪个数据块上,的哪一行。这个可以去网上找找资料看看。
数据高速缓存(Database Buffer Cache)是为了提高访问速度的,比如你发布了一个查询语句,数据库就会去查找符合条件的数据,先找到数据文件,然后找到数据块。这个时侯Database Buffer Cache就会把这些数据块存储起来。你下次再次发布同样的sql的时候就会直接从内存里面读取。速度就会快很多倍。
脏缓冲区 就是在内存里面的数据块里面的数据被修改了。而dbwn没有把改变写到数据块中。就如你update了一条记录却没有commit。这个时候的这条数据所在的数据块就存放在脏缓冲区中。

我乱说的。希望能给楼主一点帮助。

#4


有三楼引出的问题:数据块是在数据文件么?也就是一个数据文件可以划成N个数据块,是这样的么?
谢谢楼上各位的支持!

#5


数据块当然存在于数据文件中,数据块和比它更大的分配单位区块,都是不能跨数据文件的

#6


楼上的一语点醒梦中人!,谢!!

#1


block是块,即是oracle存储的最少单位,一组block构成extent, extent是在segment下管理的。

oracle从数据文件读取数据块(block)到SGA,即db_cache.

#2


数据块在oracle中是最小空间分配单位,数据行,索引条目等等都存储在块中,块常见4种大小:2,4,8,16KB,在创建表的时候有默认会初始他块的大小,当然也可以自定义块大小,这样块就有6中大小了,脏数据指的是将缓存中的数据要写到磁盘上

#3


接着楼上的讲,表是一种segment(段).记录就是表中的一条数据。是存放在数据块中的(block)。每条记录都有一个rowid,它的数据记录了这条记录是放在哪个数据文件,的哪个数据块上,的哪一行。这个可以去网上找找资料看看。
数据高速缓存(Database Buffer Cache)是为了提高访问速度的,比如你发布了一个查询语句,数据库就会去查找符合条件的数据,先找到数据文件,然后找到数据块。这个时侯Database Buffer Cache就会把这些数据块存储起来。你下次再次发布同样的sql的时候就会直接从内存里面读取。速度就会快很多倍。
脏缓冲区 就是在内存里面的数据块里面的数据被修改了。而dbwn没有把改变写到数据块中。就如你update了一条记录却没有commit。这个时候的这条数据所在的数据块就存放在脏缓冲区中。

我乱说的。希望能给楼主一点帮助。

#4


有三楼引出的问题:数据块是在数据文件么?也就是一个数据文件可以划成N个数据块,是这样的么?
谢谢楼上各位的支持!

#5


数据块当然存在于数据文件中,数据块和比它更大的分配单位区块,都是不能跨数据文件的

#6


楼上的一语点醒梦中人!,谢!!