数据块
数据块是数据库中的最小存储单位。理想情况下,Oracle块是操作系统块的倍数,从而可 以确保高效率的I/O操作。使用DB_BLOCK_SIZE初始参数指定数据库的默认块大小.在创建数据库时,这个块大小用于SYSTEM, TEMP和SYSAUX表空间。不重新创建数据库,就不能改动这一大小。
每个数据块都包含一个头,用于指定块中是何种数据:表行或索引条目。
表目录部分显示了具有块中行的表的相关信息。
块具有只来自于一个表的行,或者只来自于一个索引的条目,
除非表是集群表,在这种情况下,表目录标识具有块中行的所有表。
行目录提供块中表特定行或索引条目的细节。
头、表目录和行目录的空间只占用分配给块的空间的很少一部分,而需要关注的重点是块中的空闲空间和行数据。
在最近分配的块中,空闲空间可用于新行或已有行的更新。如果行中有变长列或者将非 NULL值改为NULL值或将NULL值改为非NULL值,则更新可能会增加或减少分配给行的空间。
块中的可用空间可用于新的插入,直到块中可用空间的百分比小于PCTFREE参数定义 的值(在创建段时指定该参数)。一旦块中空间少于PCTFREE指定的值,则不允许进行任何插 入.如果使用空闲列表管理段块中的空间,则在块中的空闲空间低于PCTUSED时允许在表上进行新的插入。
如果行的大小大于块的大小,或者更新过的行不再适合于原始的块,则行可以扩展到多个 块。在第一种情况下,相对于存储在块链中的块,行的大小过大。如果行包含超出允许的最大块大小(在Oracle 11g中是32KB)的列,则这种情况就无法避免。
在第二种情况下,对块中行的更新可能使该行不再适合于原始的块,从而使Oracle将整个 行的数据迁移到新的块,并且在第一个块中留下一个指针,指向第二个块中存储更新行的位置。 可以据此推断出,具有许多迁移行的段可能会造成I/O性能问题,因为需要査询的块数量可能 会加倍。在某些情况下,调整PCTFREE的值或重新构建表可能会获得较好的空间利用率和I/O性能。
从 Oracle 9i版本2开始,可以使用自动段空间管理(Automatic Segment Space Management , ASSM)来管理块中的空闲空间。在本地管理的表空间中,在create tablespace命令中使用segment space management auto关键字(虽然这在本地管理的表空间中是默认设置)可以启用ASSM.
使用ASSM可以减少段头争用和改进插入操作的并发性,这是因为段中的空闲空间图分布于段的每个盘区的位图块中,从而大大减少了等待时间,因为执行insert、update或delete操 作的每个进程很可能访问不同的块,而不是一个空闲列表或几个空闲列表组之一。另外,每个 盘区的位图块列出了盘区中的每个块以及4比特的“填满程度”指示符,这一指示符定义如下
(可以进一步扩展为值6~15):
★ 0000 未格式化的块
★ 0001 块满
★ 0010 可用空闲空间小于25%
★ 0011 空闲空间25%~50%
★ 0100 空闲空间50%~75%
★ 0101 空闲空间大于75%
在实时应用集群(RAC)数据库环境中,使用ASSM段意味着不需要再创建多个空闲列表组。 此外,创建表时也不需要再指定PCTUSED、FREELISTS或FREELIST GROUPS参数,即使指定其中任何一个参数,也会被忽略。
https://www.linuxidc.com/Linux/2011-07/38000.htm
https://docs.oracle.com/cd/E11882_01/server.112/e40540/logical.htm#CNCPT1061
https://www.modb.pro/db/25199
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




