网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.VMWare上Oracle 10g R2的最简安装.
.Red Hat日志文件系统-ext3.
.Oracle中Trigger例子2.
.本地分区索引如何确定表空间(1).
.学好Oracle的六条总结.
.MIS中的图像应用技术[DEVELOPER2.
.OracleForms在BS模式下其它图片格.
.oracle 10g 安装中一些问题解决.
.index full scan与index fast fu.
.Oracle9i在AIX上的安装.
.改变数据库实例名称.
.Oracle 10g 中关于 SQL*Plus 的改.
.FORM程序中Oracle与Access表的导.
.Oracle 9i应用COMPOSE和UNISTR创.
.ASP 中通过OLEDB访问Oracle的代码.
.深入讲解"alert log"过大时的处理.
.8i中回滚段使用和ORA-1555.
.关于数据库编码优化的一些看法的.
.Oracle数据库回滚段表空间文件丢.
.Java调用Oracle的过程和函数.

带你轻松掌握行分链与行迁移的相关概念

发表日期:2008-3-17


 

在实际的应用中,如果行分链与行迁移经常删除,那么可能不能重用块中的自由空间,所以对于这种情况,我们要利用空间的话,可以把pctused设置高点主要是在INSERT操作期间引发行分链操作。而行的迁移主要由UPDATE操作引起。

行链接

行链接: Insert or Update引起,一个Row存在不同的block中, 行不同部分通过不同块地址(ROWID)链成一个链,可以通过设置大的DB_BLOCK_SIZE来减少行链接的发生,但无法避免(LOB)

行迁移: Update引起,由于PCTFREE过小,ROWID未变, 可以通过增大PCTFREE的值减少行迁移的发生。

行分链是DB_BLOCK_SIZE设置不够大,以至于对于一些大的行(比如varchar2(32666),blob,clob的长度,大于块大小(比如4K))这样一个块肯定不能保存一行记录,就需要将行分开保存到不同的块中.特别是blob这样的类型,最好设置一个单独的表空间来保存实际的数据.

包含一个LONG/LONG RAW列时,在这种情况下,后者通常保存在最后Oracle维护一个LOB定位器允许对行外LOB快速访问。LOB定位器,大约有24个字节大小,DISABLE STORAGE IN ROW参数来实现保存在行外(分散开),不管数据大小行分链很难控制(除非通过选择DB_BLOCK_SIZE足够大,可以装下整个行,这通常是不可能的)。然而,行迁移可以通过CREATE / ALTER TABLE命令的PCTFREE和PCTUSED参数有效控制。

>>>>>另一种发生行链接是在行迁移不成功的情况下进行的,如UPDATE操作引起。当更新一行使其大小增加

而块中的当前自由空间不足以放下该行,那么就把整个行取出来放到一个有足够空间的块中(如果没有块

有所需的空间放整行,行要分成链;如果即使行分成链仍然没有足够的空间,那么产生一个错误消息

“ORA-1650-55:Unable to extend)

行迁移

我们如果要更新一行(更新总是允许的),并将其行加大,而加大的行所需要的空间大于块中的自由空间时.假使我们把一行中多出的空间放到另一个块中,而另一行放在原来块中(这就是行分链接),从而使原来块100%的填充.这样好象只会在单独的行时会发生,ORACLE会把这整行迁移到其他能容纳空间的块中(这就是行迁移).这样会在原来的块中留一个行头,行头中保留了放实际行的块的地址.对于行链接,但是应用程序从来不知道这些,使用SQL也没有什么不同,他只是性能上的原因.如果通过索引来读取这行,索引会指向最初的新块不仅是使用了两个左右的IO读取索引,加上一个IO读取这张表1通过使用PCTFREE保持每块中的自由空间,允许行仍位于原来的块中,不用管这种扩张。

如果PCTFREE为0,那么所有的自由空间将被INSERT使用,后续的UPDATE将使行迁移到另外一个块中,以适合扩展的需要。

在理想的情况下,设置PCTFREE为位于行大小的中间值与最大值之间。例如,如果行大小的中间值估计为大约900字节,最大的行大小为1255字节,那么设置PCTFREE值在10(缺省)和30之间是比较合理的。

上一篇:在存储过程中拥有"role"权限的特殊性 人气:1024
下一篇:教你快速掌握“外连接”的两种标准写法 人气:891
浏览全部Oracle的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐