第九章Storage Structure & Relationships
Oracle9i之后一个数据库可以有一个标准的block size和最多个四个非标准block size
block size大小是2的次方倍,且大小在2KB到32KB之间,即2KB、4KB、8KB、16KB、32KB
db_block_size参数是在创建数据库时设置的,后期无法更改
system表空间和temporary表空间的block大小一定是db_block_size
db_cache_size参数确定了默认buffer cache的block大小
最小size是一个granule(4M或16M),一个granule是SGA分配内存的最小单位
默认值48M
多个block size遵循规则
1、一个表空间中所有对象block size大小必须一致
2、所有临时表空间,包括永久的默认临时表空间,必须是标准的block size
3、索引表和LOB段的block size大小可以和基表的block size不同
block结构
header、free space、data
header和data之间是free space
block相关参数
①initrans
确定了索引或数据块中创建的transaction slots(事务槽)的初始值
该参数确定对block进行修改的并发数,对于数据的来说默认值1,索引段默认值2。如果initrans设置成3,意味着可以同时有3个事务同时对一个block进行修改。可以根据需要,在该block的空闲空间中再分配事务槽来增加更多的并发事务。
事务槽用来记录事务正在修改block的相关信息,即使事务对多行或多个索引目录进行修改也只会使用一个事务槽
②maxtrans
确定了索引或数据块中创建的transaction slots(事务槽)的最大值
默认值255,限定一个数据块或索引块可以同时被多少个事务同时修改。通过限制事务槽的空间使用,确保block中有足够的空间存储数据。
③pctfree
默认值10%,该参数是设置block中预留空间来满足block中已存在的数据后期更新所需
④pctused
当一个block的空间使用率小于pctused设置的值,Oracle server会将这个block放到free list中。每个段的free list是所有有足够空间来存储数据的block的列表,默认每个段只有一个free list。通过设置freelists参数来指定pctused。默认pctused为40%。