创建表时参数PCTFREE和PCTUSED是什么意思?

[复制链接]
查看11 | 回复9 | 2008-4-17 15:56:40 | 显示全部楼层 |阅读模式
创建表时参数PCTFREE和PCTUSED是什么意思?
回复

使用道具 举报

千问 | 2008-4-17 15:56:40 | 显示全部楼层
用CREATE 命令的PCTUSED、PCTFREE、INITTRANS、MAXTRANS、FREELIST GROUPS 和FREELISTS参数来控制表、索引或簇的数据块中的空间使用。
可使用PCTFREE和PCTUSED参数控制数据块何时进入或离开表、索引或簇的可用清单。使用PCTFREE参数设置最大的阈值,以控制对将来的行的更新操作保留多少数据块空间。当某个数据块使PCTFREE装满时,ORACLE从相应段的可用清单中删除该块。如果你预计只有很少的更新操作会增加行的大小,则可将PCTFREE设置为较低的值(如5或者10),使得ORACLE填满每个块的更多的空间。但是,如果你预计更新操作将会经常增加行的大小,则将PCTFREE设置为较高的值(如20或30),使得ORACLE为已有行的更新操作保留更多的块空间;否则,将出现行链。
可使用PCTUSED参数设置最小块的阈值来控制一个数据块应在何时放回到相应段的可用清单中。例如,所有段的缺省PCTUSED设置为40%,因此,当事务处理删除数据块中的行时,如果它只有39%是装满的,ORACLE将该数据块放回到相应段的可用清单中。如果你预计很少有删除操作,则可设置PCTUSED为较高的值(如60),当偶然的删除操作发生时,使数据块弹出可用清单。但是,如果你预计将PCTUSED 设置为较低的值(如40),使ORACLE不常产生块在表的可用空间中移进或移出的开销。
可使用INITRANS和MAXTRANS参数优化ORACLE如何在表、数据簇或索引的数据块中分配事务处理项。INITRANS参数确定为事务处理项预分配多少数据块头部的空间。当您预计有许多并发事务处理要涉及某个块时,可为相关的事务处理项预分配更多的空间,以避免动态分配该空间的开销。MAXTRANS参数限制并行使用某个数据块的事务处理的数量。当您预计有许多事务处理将并行访问某个小表时,则当创建表时,应设置该表的事务处理项预分配更多的块空间,较高的MAXTRANS 参数值允许许多事务处理并行访问该表INITRANS和MAXTRANS 参数的设置可能相应低一些(如分别为2和5)。使用这样的设置,很少为事务处理项保留窨,使该表数据块的更多空间用于数据。
可使用STORAGE子句的FREELIST GROUPS 参数控制段的可用清单组的数据量。使用FREELISTS 参数设置每组中可用清单的数量。
回复

使用道具 举报

千问 | 2008-4-17 15:56:40 | 显示全部楼层
樓上說的好!
但是在用了segment space management auto子句后就是設了相關的參數也會被省略
回复

使用道具 举报

千问 | 2008-4-17 15:56:40 | 显示全部楼层
最初由 vongates 发布
[B]樓上說的好!
但是在用了segment space management auto子句后就是設了相關的參數也會被省略 [/B]

9i以后的表空間無論是
segment space management auto
還是
segment space management manual
都會忽略這些參數的


回复

使用道具 举报

千问 | 2008-4-17 15:56:40 | 显示全部楼层
最初由 xzh2000 发布
[B]用CREATE 命令的PCTUSED、PCTFREE、INITTRANS、MAXTRANS、FREELIST GROUPS 和FREELISTS参数来控制表、索引或簇的数据块中的空间使用。
.... [/B]

如果PCTFREE 是10% ,PCTUSED 是40% ,当一个数据块被用了50%,
那么这个数据块在不在可用列表中?还是当有更新操作时只考虑PCTFREE参数,当有删除操作时只考虑PCTUSED 参数?
回复

使用道具 举报

千问 | 2008-4-17 15:56:40 | 显示全部楼层
最初由 wwllzpz 发布
[B]
如果PCTFREE 是10% ,PCTUSED 是40% ,当一个数据块被用了50%,
那么这个数据块在不在可用列表中?还是当有更新操作时只考虑PCTFREE参数,当有删除操作时只考虑PCTUSED 参数? [/B]

1 當然在可用列表中
2 是的
回复

使用道具 举报

千问 | 2008-4-17 15:56:40 | 显示全部楼层
......如果你预计更新操作将会经常增加行的大小,则将PCTFREE设置为较高的值(如20或30),使得ORACLE为已有行的更新操作保留更多的块空间;否则,将出现行链。......
这种情况下出现的不是行链接Row Chaining,而应该是行迁移Row Migration吧?
行迁移:
如果PCTFREE 值设置得低,则在一个块中可能没有足够的空间来容纳更新后增长的行。出现这种情况时,Oracle 服务器会把整个行移动到一个新块并创建一个从原块指向新位置的指针。
行链接
当一个行因太大而任何一个块都容纳不下时,就会发生行链接。当行包含的列太长时就可能发生这种情况。在这种情况下Oracle 服务器将该行分成称为行片的更小的程序块,每个行片存储在一个块中带有检索和装配整行所需要的指针。
回复

使用道具 举报

千问 | 2008-4-17 15:56:40 | 显示全部楼层
学习了
回复

使用道具 举报

千问 | 2008-4-17 15:56:40 | 显示全部楼层
原帖由 xzh2000 于 2004-3-2 22:51 发表
用CREATE 命令的PCTUSED、PCTFREE、INITTRANS、MAXTRANS、FREELIST GROUPS 和FREELISTS参数来控制表、索引或簇的数据块中的空间使用。
可使用PCTFREE和PCTUSED参数控制数据块何时进入或离开表、索引或簇的可用清单。使用PCTFREE参数设置最大的阈值,以控制对将来的行的更新操作保留多少数据块空间。当某个数据块使PCTFREE装满时,ORACLE从相应段的可用清单中删除该块。如果你预计只有很少的更新操作会增加行的大小,则可将PCTFREE设置为较低的值(如5或者10),使得ORACLE填满每个块的更多的空间。但是,如果你预计更新操作将会经常增加行的大小,则将PCTFREE设置为较高的值(如20或30),使得ORACLE为已有行的更新操作保留更多的块空间;否则,将出现行链。
可使用PCTUSED参数设置最小块的阈值来控制一个数据块应在何时放回到相应段的可用清单中。例如,所有段的缺省PCTUSED设置为40%,因此,当事务处理删除数据块中的行时,如果它只有39%是装满的,ORACLE将该数据块放回到相应段的可用清单中。如果你预计很少有删除操作,则可设置PCTUSED为较高的值(如60),当偶然的删除操作发生时,使数据块弹出可用清单。但是,如果你预计将PCTUSED 设置为较低的值(如40),使ORACLE不常产生块在表的可用空间中移进或移出的开销。
可使用INITRANS和MAXTRANS参数优化ORACLE如何在表、数据簇或索引的数据块中分配事务处理项。INITRANS参数确定为事务处理项预分配多少数据块头部的空间。当您预计有许多并发事务处理要涉及某个块时,可为相关的事务处理项预分配更多的空间,以避免动态分配该空间的开销。MAXTRANS参数限制并行使用某个数据块的事务处理的数量。当您预计有许多事务处理将并行访问某个小表时,则当创建表时,应设置该表的事务处理项预分配更多的块空间,较高的MAXTRANS 参数值允许许多事务处理并行访问该表INITRANS和MAXTRANS 参数的设置可能相应低一些(如分别为2和5)。使用这样的设置,很少为事务处理项保留窨,使该表数据块的更多空间用于数据。
可使用STORAGE子句的FREELIST GROUPS 参数控制段的可用清单组的数据量。使用FREELISTS 参数设置每组中可用清单的数量。

如果是自动管理的话,就没用了吧?
回复

使用道具 举报

千问 | 2008-4-17 15:56:40 | 显示全部楼层
很经典的问题了,在dba面试的时候经常会被问到,还是借此帖子温故知新一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行