免费注册 查看新帖 |

Chinaunix

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

【转载Oracle电子杂志】<关于剩余数据块的检验 之1> [复制链接]

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

<关于剩余数据块的检验 之1>;  
我们曾经收到这样的问题:
「想知道coalesce(结合)的作用」、「如何确保剩余数据块、作为表的空间使用?」此外,在实际的支持工作中,也经常有客户问到相同的问题。因此,我们将一边检验这些有密切关系的项目,一边向大家说明。

首先向大家说明「coalesce(结合)」。简单的说,就是将空闲空间碎片合并的功能,通常SMON每隔5分钟就会自动执行一次(以前是每隔2小时一次)。要具体说明空闲空间碎片, 例如DROP物理上相邻的10M的表A和20M的表B之后,让空间开放,变成空闲空间。原本相邻的空间中会残存extent边界。

举例来说,在这种情况下,即使想创建25M的表,也会因为空间不足而无法创建。这时候,「coalesce(结合)」的功能就非常重要。简单的说,这项功能的作用就是消除extent边界。这样一来就能确保有30M的空闲空间,可以创建 25M的表C。 (如果空闲空间实际上幷不相邻,那么就算执行「coalesce(结合)」,结果当然也不会改变。要是动态整理空闲空间的配置,处理过程会变得非常沉重。)那么,在什么时间点会进行「coalesce(结合)」呢?

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

现在就让我们来检验各种情况吧。
在1. 的情况下会执行「coalesce(结合)」是很理所当然的,但是我们要看看在Oracle内部究竟发生了什么动作。首先,查查看V$LOCK这个dictionary (在DBA_OBJECTS里V_$LOCK是视图, V$LOCK是其中的SYNONYM)。 *************************************************************
SID  SEQ#  EVENT  P1TEXT  P1
----------------------------------------
5    1457  smon   timer   sleep time 300
*************************************************************



回到原来的主题,运行coalesce的时候为了锁定对象表空间所运行的SQL语句的where语句的t.dflextpct!=0部分,代表pctincrease限定在0以外。另外,where语句的t.bitmapped=0部分是ts# 表的项目,不过其实这和8.1的新功能有关。运行create database的时候,会运行sql.bsq(oracle_home/rdbms/admin)。其中包括了创建这个ts# 表的script。其中, bitmapped带有下面的说明。/* If not bitmapped, 0 else unit size */

通常update的时候, TM和TX是一组,LMODE分别是以3(row exclusive)和6(exclusive)取得。更具体的说,TM的LMODE 3在FET$加上表锁,所以无法从其它程序对FET$进行alter table或drop table。TX的LMODE 6是让rollback segment中正在使用的部分,无法从其它程序使用。

看起来好象是使用bitmap来管理表空间。在USER_TABLESPACES画面,EXTENT_MANAGEMENT项目会根据这个bitmapped以decode函数改换成下面这样。

decode(ts.bitmapped, 0, 'DICTIONARY', 'LOCAL')

如果是0就'DICTIONARY'如果不是就'LOCAL'。

这里表示了表空间的种类不是'DICTIONARY'就是'LOCAL'。'DICTIONARY'是原来的表空间, 'LOCAL'是Local extent management的表空间。换句话说,如果是原来的表空间就还是会coalesce,但是8.1之后的新功能Local extent management的表空间就不会coalesce。

如果是0就'DICTIONARY'如果不是就'LOCAL'。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP