《数据厍设计与开发》讲义 4.3.1.2 ORACLE数据库碎片 行转移:行转移在对行的修改引起行的长度比块中可 利用空间大时发生。当发生行转移时,行的一部分转 移到一个新的数据块中,这个新数据块的地址存储在 原始行单元中。当 Oracle需要读这个行时,它首先读 原始单元并找到一些数据和指向另一个块的指针,再 在这个块中找到剩下的行数据。 为什么 Oracle执行行转移而不是把整个行移到一个 新块中?因为移动一个行的单元会引发 ROWID的变化, 而 ROWID的变化引发一系列的变动,代价太大。 行转移存在两个问题: 1) Oracle必须读每一个包括行数据的一部分或者 是指向另一个包含着行数据的块的指针的块,无疑这 会导致相当大地全系统的额外开销 2)0 racle必须和行数据一起存储额外的指针来供 给行转移机制,浪费了一些磁盘空间 家邮电大学物你学院 部明80080
北京邮电大学软件学院 郭文明 2003.06 《数据库设计与开发》讲义 4.3.1.2 ORACLE数据库碎片 –行转移:行转移在对行的修改引起行的长度比块中可 利用空间大时发生。当发生行转移时,行的一部分转 移到一个新的数据块中,这个新数据块的地址存储在 原始行单元中。当Oracle需要读这个行时,它首先读 原始单元并找到一些数据和指向另一个块的指针,再 在这个块中找到剩下的行数据。 为什么Oracle执行行转移而不是把整个行移到一个 新块中?因为移动一个行的单元会引发ROWID的变化, 而ROWID的变化引发一系列的变动,代价太大。 行转移存在两个问题: 1)Oracle必须读每一个包括行数据的一部分或者 是指向另一个包含着行数据的块的指针的块,无疑这 会导致相当大地全系统的额外开销。 2)Oracle必须和行数据一起存储额外的指针来供 给行转移机制,浪费了一些磁盘空间
《数据厍设计与开发》讲义 4.3.1.2 ORACLE数据库碎片 行链接:行链接在行太长以致于不能放入任何一个数 据块时发生。这导致该行被存储在一个或多个数据块 的链中。行链接伴随着包含LONG、 LONG RAW或者LOB 数据类型的大行时发生 消除链接和转移的行 链接和转移的行会对数据库的整体性能造成一系列 的问题。可以通过下面的SQL语句检查链接和转移的 analyze table customer list chained rows into cha, 这个命令把 ROWID和数据库中所有链接和转移行的 表存储到cha表中。直接查询cha表,即可找出行和表 的特定信息。 家邮电大学物你学院 部明80080
北京邮电大学软件学院 郭文明 2003.06 《数据库设计与开发》讲义 4.3.1.2 ORACLE数据库碎片 –行链接:行链接在行太长以致于不能放入任何一个数 据块时发生。这导致该行被存储在一个或多个数据块 的链中。行链接伴随着包含LONG、LONG RAW或者LOB 数据类型的大行时发生。 –消除链接和转移的行 链接和转移的行会对数据库的整体性能造成一系列 的问题。可以通过下面的SQL语句检查链接和转移的 行: analyze table customer list chained rows into cha; 这个命令把ROWID和数据库中所有链接和转移行的 表存储到cha表中。直接查询cha表,即可找出行和表 的特定信息