免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 896 | 回复: 0
打印 上一主题 下一主题

有趣的oracle实验 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-20 17:42 |只看该作者 |倒序浏览
转载 http://www.performance-insight.com/china/html/ora3/mailmagazine.html

<关于剩余数据块的检验 之3>;  
~~~~读者的疑问~~~~
有位读者问道:coalesce(结合)会自动执行吗?Oracle的版本不同coalesce的动作就会不同吗?只要看了这次的介绍,大家应该就能明白这两个问题的答案。

接着上次的内容,这次要继续介绍剩余数据块的检验。
进行“coalesce(结合)”有下面三种时间点:

1. 执行alter tablespace<表空间名>;coalesce 的时候
2. 每隔5分钟smon会自动执行一次(仅限于设定为表空间pctincrease 0以外的表空间)
3. 不论是否设定为pctincrease 0,假如不执行coalesce,就没有足够的空闲空间分配为extent

目前为止已经说明了1.和2.,这次我们要检验并说明3.的情况。为了检验第三种情况,要事先准备10个剩余数据块,每个剩余资料块包含20个相连数据块。这是因为我希望各位读者想像每20个数据块就有一个extent边界。

此外,coalesce是以表空间为单位,所以即使在某些TABLE中指定了一些pctincrease值,对表空间来说,还是由pctincrease是不是0决定是否进行coalesce。接下来,我们来看看smon执行coalesce的时候为了锁定对象表空间所执行的SQL语句。下面是在Oracle 8.1的环境得到的结果。

下面是检查剩余数据块状况的SQL语句及其执行的结果。检查剩余数据块的情况时,我们使用DBA_FREE_SPACE视图。 *************************************************************
SELECT TABLESPACE_NAME,BLOCK_ID,BYTES,BLOCKS
>;FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME='CRE20'
ORDER BY BLOCK_ID;

TABLESPACE_NAME  BLOCK_ID  BYTES  BLOCKS
----------------------------------------
CRE20            2         40960  20
CRE20            22        40960  20
CRE20            42        40960  20
CRE20            62        40960  20
CRE20            82        40960  20
CRE20            102       40960  20
CRE20            122       40960  20
CRE20            142       40960  20
CRE20            162       40960  20
CRE20            182       40960  20
*************************************************************



要判断数据块是否连续,只要看BLOCK_ID+BLOCKS是不是下一行的BLOCK_ID就行了。(例如:第1行的BLOCK_ID=2 + BLOCKS=20等于下一行的BLOCK_ID=22)在这种状态下执行create table建立30个initial数据块,剩余数据块的状态如下。 (如果db_block_size=2k就指定INITIAL 60k)

*************************************************************
TABLESPACE_NAME  BLOCK_ID  BYTES  BLOCKS
----------------------------------------
CRE20            2         40960  20
CRE20            52        20480  10 (确定BLOCK_ID 22~51是INITIAL)
CRE20            62        40960  20
CRE20            82        40960  20
CRE20            102       40960  20
CRE20            122       40960  20
CRE20            142       40960  20
CRE20            162       40960  20
CRE20            182       40960  20
*************************************************************



含有BLOCK_ID 22到51这30个数据块的表被建立,所以剩余数据块在物理上被切断了。不论再怎么结合,实际上不相邻的剩余数据块永远不会合并在一起。

通常每隔5分钟smon就会自动执行的结合动作一下子就结束了, 但是我曾经看过有的site会持续不断的执行结合动作。那是正在进行大型的表的truncate处理或drop table处理步骤很多的site。持续不断进行结合,每个instance中唯一的ST enqueue会不停重复等待状态。在这种site,就在表空间指定pctincrease为0,不要让smon执行结合,可以减轻系统的负荷。因为Oracle数据库内部有一项功能,不管有没有设定pctincrease为0,都会在必要的时候将内部相邻的extent互相结合。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP