emp sql analysis

本文详细解析了Oracle数据库中的存储参数,包括PCTFREE(预留更新空间)、INITRANS和MAXTRANS(事务管理)、INITIAL和NEXT(数据段扩展)、MINEXTENTS和MAXEXTENTS(Extent数量限制)、PCTINCREASE(Extent增长比例)、FREELISTS和FREELIST GROUPS(自由列表和组)等,以及它们在数据块管理和性能优化中的作用。

1. using index pctfree 10 initrans 2 maxtrans 255 compute statistics

1.1. 这句总的是“数据块结构&其使用参数以及表参数”
1.2. Oracle中,数据库逻辑结构被划分为:
1.2.1.	表空间  tablespace
1.2.2.	段          segment
1.2.3.	分区      extent
1.2.4.	  块         block----最小
1.3. PCTFREE:为数据更新准备的留白—也就是一种空间的闲置。【如果需要进行某种数据表压缩,设置PCTFREE为0也是一种思路。】
1.3.1. 数据会填写到block中,会一次填满block的行数据;而Oracle填写数据表的顺序是先找到一个空闲快,然后再填数据。
1.3.2. Oracle如何判断这个数据块是否非空闲呢?
1.3.2.1. 通过使用PCTFREE参数:该参数是一个百分比值,默认为10%。如果一个数据块空闲的空间低于PCTFREE设定值,就认为这个数据块已经写满。会将这个块从空闲块的列表(FREELIST)上取下来。
1.3.2.2. 为什么要有这个参数?为什么要保留这10%呢?
 1.3.2.2.1.	为了update使用。
1.3.2.2.2.	数据保存在数据行里,随着不断的更新,每行所占有的空间是一个不定的范围。在数据插入之后,如果发生存储空间增加(比如:varchar2类型字符长度变化),余下的10%就留作数据行空间延展使用。
1.3.2.3. 如果超过这个10%,还是不能装下数据怎么办?
1.3.2.3.1.	Oracle定位数据使用的物理rowid机制,---就是定位特定的数据行在某个数据块的第几个slot(槽)上。
1.3.2.3.2.	如果一个数据块再也装不下一些数据行,那么这些数据行就需要另找一个新的数据块进行保存。也就意味着这些行有一个新的new-rowid位置。
1.3.2.3.3.	但是,Oracle还会按照原来的old-rowid定位数据行。原来的数据块上,记录着该数据行的新位置new-rowid,再次找到新的数据行位置。这个技术过程就称为行迁移(row migrate)
1.3.2.3.4.	行迁移是我们通常不希望看到的。解决的方法,就是保留一个适当的PCTFREE值。因为如果发生行迁移,我们就不得不访问多个数据块才能得到数据。
	1.3.2.3.4.1.	如何选择一个适当的PCTFREE的值?
	1.3.2.3.4.1.1.	要根据系统的性质而定。
	1.3.2.3.4.1.2.	如果是一个典型的OLTP系统,数据更新操作多,变化大。这时候就需要设置一个略大些的PCTFREE。
	1.3.2.3.4.1.3.	相反,如果更新很少,大部分都是读操作,PCTFREE略小些也无碍。
1.4. PCTUSED:数据块的判定容量底线
1.4.1. 如果一个过去写满的数据块,经过若干次删除后,会逐渐变空,那么什么时间点才能认为这个块是一个空闲块,能接受新的数据插入呢?
1.4.1.1. 如果一个数据块的使用容量低于PCTUSED设置的限制,那么就认为这个数据块已经空闲,可以放置回FREELIST列表中,作为空闲数据块接受新数据行的插入。
1.4.2. 如何设置PCTUSED的值才合适?
1.4.2.1. 一般是不需要调节这个参数的,
1.4.2.2. 频繁的数据块空闲或者写满切换,有损于数据库性能的。
1.4.2.3. 一般设置为默认的40%。对一些数据变化巨大,删除频繁的系统,这个参数可以配合PCTFREE统一筹划。
1.5. INITRANS和MAXTRANS:初始事务和最大事务—是在数据块级别的参数
1.5.1. 数据库事务的本质还是对数据块的修改,而事务的信息是记录在数据块首部的事务表中。
1.5.2. INITRANS表示数据块上可以标记的初始事务数目。如果同时进行的事务数据量超过这个数量,事务数目可以增加,直到达到MAXTRANS的限制。
1.5.3. 表和索引的INITRANS的默认值均为2,每个事务占据23-24个字节。
1.5.4. 对于Oracle 10g, MAXTRANS都是255
1.6. Compute statistics 用于统计

2. STORRAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

2.1. Storage 里面存放的是一些存储参数
2.2. INITIAL
2.2.1. 默认值是5个blocks,最小值是2个数据块,最大值由操作系统限定。
2.2.2. 用于指定分配给Segment的第一个Extent分区的大小,以字节为单位,这个参数不能在alter语句中改变,如果指定的值小于最小值,则按最小值创建。
2.3. NEXT
2.3.1. 默认值是5个blocks,最小值是1个数据块,最大值由操作系统限定。
2.3.2. 第二个Extent的大小等于NEXT的初值,以后的NEXT值=前一NEXT大小乘以(1+PCTINCREASE/100),如果指定的值小于最小值,则按最小值创建。
2.3.3. 如果在alter语句中改变NEXT的值,则下一个分配的Extent将具有指定的大小,而不管上一次分配的Extent大小和PCTINCREASE参数值。
2.4. MINEXTENTS
2.4.1. 默认值是1个extents【回滚段为2个extents】,最小值是1个分区【回滚段为2个extents】,最大值无限定。
2.4.2. 是随着Segment中数据量的增长,最多可分配的Extent数量
2.5. MAXEXTENTS
2.5.1. 默认值得根据数据段的大小u而定,最小值是1个分区【回滚段为2个extents】,最大值由操作系统限定。
2.6. PCTINCREASE
2.6.1. 默认值是50%【Oracle618中是0%】,最小值是0%,最大值由操作系统限定。
2.6.2. 指定第三个及其后的Extent相对于上一个Extent所增加的百分比,
2.6.3. 如果PCTINCREASE为0,则Segment中所有新增加的Extent的大小都相同,等于NEXT的值,
2.6.4. 如果PCTINCREASE大于0,则每次计算NEXT的值(用上面的公式),
2.6.5. PCTINCREASE不能为负数。
2.6.6. 创建回滚段时,不可指定此参数,回滚段中此参数固定为0。
2.7. FREELISTS
2.7.1. 默认值为1,最小值也是1,最大值受数据块大小限制。
2.7.2. 只能在CREATE TABLE、CLUSTER、INDEX中指定FREELISTS和FREELIST GROUPS参数。

2.7.3. 指的是模式对象中每一个自由列表组中自由列表的数量

2.8. FREELIST GROUPS
2.8.1. 默认值为1,最小值也是1,最大值取决于Oracle并行实例的数量。
2.8.2. 用户创建的数据库对象的自由列表组的数量,只有用OPS并行服务器选项时才使用这一参数,一个实例对应一个组。
2.9. BUFFER_POOL DEFAULT
2.9.1. 无默认值,无最大值,无最小值
2.9.2. 给模式对象定义缺省缓冲池(高速缓存),该对象的所有块都存储在指定的高速缓存中,对于表空间或回滚段无效。
2.10. FLASH_CACHE DEFAULT
2.10.1. 在11.2中,Oracle提供了设置FLASH CACHE的功能,使得数据库可以自动使用配置好的FLASH CACHE作为二级缓存。
2.11. CELL_FLASH_CACHE DEFAULT
2.12. OPTIMAL
2.12.1. 无默认值,最大值不能小于回滚段初始分配空间,最大值由操作系统限定。
2.12.2. 仅与回滚段有关,当回滚段因为增长、扩展而超过此参数的设定范围时,Oracle系统会根据情况动态地重新分配Extents,试图收回多分配的Extent。

3. TABLESPACE “USERS” ENABLE

4. REFERENCES “SCOTT”.“DEPT” (“DEPTNO”) ENABLE

5. SEGMENT CREATION IMMEDIATE

6. NOCOMPRESS LOGGING

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值