楼主: grace_inr

求解有关行迁移和行链接的问题

[复制链接]
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
31#
发表于 2005-2-25 17:15 | 只看该作者
但是row1是通过UPDATE才变得需要两个块来存放的,UPDATE前是全部包含在这个块中的,这正和chenmolin提到的行迁移的定义相符。

你理解的行迁移是如何产生的呢?

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
32#
发表于 2005-2-25 17:27 | 只看该作者
你没有真正理解行迁移和行链接的含义
一条记录数据存放在多个block中是行链接。
Oracle会利用行迁移尽量避免行链接,Oracle会尝试将这条记录存放其他的block中,如果可以放到一个block中,那么就是行迁移。行迁移的记录处于一个block中。
如果更新后导致的数据的长度超过了block本身的大小,则Oracle即使使用行迁移也无法避免行链接,因此Oracle就会使用行链接。

你的row1本来在一个block中就无法放下,因此,这是行链接而不是行迁移。

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
33#
发表于 2005-2-25 17:58 | 只看该作者
谢谢版主,是我理解错了。
按你的意思我在一个块中模拟出了行迁移和行链接,整个块的数据DUMP如下:

*** 2005-02-25 17:41:48.645
Start dump data blocks tsn: 2 file#: 3 minblk 30579 maxblk 30579
buffer tsn: 2 rdba: 0x00c07773 (3/30579)
scn: 0x0000.01c2f68f seq: 0x01 flg: 0x02 tail: 0xf68f0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data

Block header dump:  0x00c07773
Object id on Block? Y
seg/obj: 0x160a  csc: 0x00.1c2f68e  itc: 1  flg: -  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   xid:  0x0006.023.00000046    uba: 0x00809614.00a4.01  --U-    1  fsc 0x175a.01c2f68f

data_block_dump
===============
tsiz: 0x1fb8
hsiz: 0x16
pbl: 0x0f1f4e44
bdba: 0x00c07773
flag=-----------
ntab=1
nrow=2
frre=-1
fsbo=0x16
fseo=0x66
avsp=0x81d
tosp=0x1f77
0xeti[0]        nrow=2        offs=0
0x12ri[0]        offs=0x17e2
0x14ri[1]        offs=0x66
block_row_dump:
tab 0, row 0, @0x17e2
tl: 9 fb: --H----- lb: 0x0 cc: 0
nrid:  0x00c07774.0
tab 0, row 1, @0x66
tl: 34 fb: --H-F--N lb: 0x1 cc: 1
nrid:  0x00c07775.0
col  0: [24]
42 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
end_of_block_dump
End dump data blocks tsn: 2 file#: 3 minblk 30579 maxblk 30579

row0是行迁移,row1是行链接;
它们的row flag不同:行迁移是--H-----,行链接是--H-F--N。

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
34#
发表于 2005-2-25 18:07 | 只看该作者

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
35#
发表于 2005-2-25 18:14 | 只看该作者
最初由 yangtingkun 发布
[B]

你没有理解我的意思,我是在回答楼主提出的这个问题。
你无法通过analyze table的方式找到行迁移和行链接各有多少吧?

[/B]


是无法获取行迁移和行链接的个数。
我的意思是:你第1个方法不切实际。
一个一个BLOCK看,几十M一个表就把人看晕了。
第2个方法很辛苦。

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
36#
发表于 2005-2-25 18:21 | 只看该作者
这我同意,除非写个小程序进行统计,否则第一个方法根本不可行。

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
37#
发表于 2005-2-25 18:21 | 只看该作者
其实第二个方法可以变通为移动表到新的表空间或者根椐当前表来另建一个表,然后再分析表,查询字典(USER_TABLES.CHAIN_CNT)得到链接的行数。

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表