问题描述
你好,汤姆,
我对段、区段和数据块有一些疑问
1.段是否可以包含来自多个对象 (表,索引或MV) 的数据
i) 如果没有,则必须使用每个新对象创建新的段,并且在DDL操作 (如截断) 时,“高水标” 级别会发生什么。
ii) 如果是,则如何区分不同对象的段内数据,并且一个对象的数据是否可以驻留在多个段内。
2.像视图这样的对象,过程不存储数据,因此它们将或不会分配给它们的段。
3.区段是逻辑上连续的数据块,即它们是否是硬盘上连续的数据块,以及数据块的逻辑和物理连续性之间的区别是什么。
4.缓冲区缓存以db_block_size的大小从数据文件中读取数据,因此缓冲区缓存中的block_size应与db_block_size相同。真的吗?
i) 如果是,那么如果我的sp_file中指定的值不是db_block_size的倍数,那么缓冲区缓存大小将是多少
ii) 如果否,那么如何计算缓冲区缓存中的block_size。如果我的db_block_size是8K,那么缓冲区缓存中的block_size将是什么。
我对段、区段和数据块有一些疑问
1.段是否可以包含来自多个对象 (表,索引或MV) 的数据
i) 如果没有,则必须使用每个新对象创建新的段,并且在DDL操作 (如截断) 时,“高水标” 级别会发生什么。
ii) 如果是,则如何区分不同对象的段内数据,并且一个对象的数据是否可以驻留在多个段内。
2.像视图这样的对象,过程不存储数据,因此它们将或不会分配给它们的段。
3.区段是逻辑上连续的数据块,即它们是否是硬盘上连续的数据块,以及数据块的逻辑和物理连续性之间的区别是什么。
4.缓冲区缓存以db_block_size的大小从数据文件中读取数据,因此缓冲区缓存中的block_size应与db_block_size相同。真的吗?
i) 如果是,那么如果我的sp_file中指定的值不是db_block_size的倍数,那么缓冲区缓存大小将是多少
ii) 如果否,那么如何计算缓冲区缓存中的block_size。如果我的db_block_size是8K,那么缓冲区缓存中的block_size将是什么。
专家解答
1. Can a Segment contain data from more then one object (Table, Index or MV)
通常不是。特殊情况是群集,其中来自多个表的数据可以位于同一块中,因此也可以位于同一段中。但通常一个段 = 一个表/索引/mv。请注意,对于 * 分区的 * 对象,每个分区 * 有一个段。
i) if no then new segments must be created with each new objects and upon DDL operations (like truncate) what happens to "High Water Mark" level.
新对象获得新的段 (当您在其中创建数据时)。如果截断一个表,则其段由高水印保留,将其重置为 “零”,即,该表可以重用该空间。我们也可以选择完全释放空间 (即,段消失),但是当您添加新数据时,我们会为您创建一个新的段。
2. Objects like views, procedures don't store data so they would or wouldn't have segments assigned to them.
正确。
3. Extents are logical continuous data blocks i.e. they are continuous data blocks on Hard Disk or not, and what is the difference between logical and physical continuity of data blocks.
从 * 数据库 * 的角度来看,它们是连续的。底层操作系统或磁盘技术可能不尊重这一点,但数据库永远不会意识到这一点。它将询问操作系统 “从文件Y中的X开始给我8个块”,如果不是真的,则操作系统/磁盘层将管理映射。
4. The Buffer cache reads data from datafile in the size of db_block_size, so block_size within buffer cache should be same as that of db_block_size. TRUE?
正确。
i) If yes, then what will be buffer cache size if the value specified in my sp_file is not an multiple of db_block_size
我们四舍五入到一个合理的大小。你可能会说 “我想要100,000,000字节的缓存”,在启动时,我们会做这样的事情: “好的,我们想要128兆字节的倍数,所以我们会把它四舍五入到134,217,728
通常不是。特殊情况是群集,其中来自多个表的数据可以位于同一块中,因此也可以位于同一段中。但通常一个段 = 一个表/索引/mv。请注意,对于 * 分区的 * 对象,每个分区 * 有一个段。
i) if no then new segments must be created with each new objects and upon DDL operations (like truncate) what happens to "High Water Mark" level.
新对象获得新的段 (当您在其中创建数据时)。如果截断一个表,则其段由高水印保留,将其重置为 “零”,即,该表可以重用该空间。我们也可以选择完全释放空间 (即,段消失),但是当您添加新数据时,我们会为您创建一个新的段。
2. Objects like views, procedures don't store data so they would or wouldn't have segments assigned to them.
正确。
3. Extents are logical continuous data blocks i.e. they are continuous data blocks on Hard Disk or not, and what is the difference between logical and physical continuity of data blocks.
从 * 数据库 * 的角度来看,它们是连续的。底层操作系统或磁盘技术可能不尊重这一点,但数据库永远不会意识到这一点。它将询问操作系统 “从文件Y中的X开始给我8个块”,如果不是真的,则操作系统/磁盘层将管理映射。
4. The Buffer cache reads data from datafile in the size of db_block_size, so block_size within buffer cache should be same as that of db_block_size. TRUE?
正确。
i) If yes, then what will be buffer cache size if the value specified in my sp_file is not an multiple of db_block_size
我们四舍五入到一个合理的大小。你可能会说 “我想要100,000,000字节的缓存”,在启动时,我们会做这样的事情: “好的,我们想要128兆字节的倍数,所以我们会把它四舍五入到134,217,728
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




