楼主: biti_rainy

[精华] oracle的事务与锁与回滚段 的block 的一点摸索

[复制链接]
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
31#
 楼主| 发表于 2003-4-7 16:02 | 只看该作者

我们再来看 scn: 0x0000.000982e6 seq: 0x05 中的 seq

sequence 1 byte
A sequence number incremented for each change to a block at the same SCN. A new SCN is allocated if the sequence number wraps.

1 byte 的seq 最多可以记录 256次改变,也就是当同一个事务对同一个块改变超过256次的时候会产生一个SCN,如下测试




SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;

MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
                            25699384

SQL>  begin
  2   for i in 1..10 loop
  3   update rainy.itl set a = 0 where rownum = 1;
  4   update rainy.itl set a = 1 where rownum = 1;
  5   end loop;
  6   commit;
  7  end;
  8  /

PL/SQL 过程已成功完成。

SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;

MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
                            25699386

SQL>  begin
  2   for i in 1..1000 loop
  3   update rainy.itl set a = 0 where rownum = 1;
  4   update rainy.itl set a = 1 where rownum = 1;
  5   end loop;
  6   commit;
  7  end;
  8  /

PL/SQL 过程已成功完成。

SQL>  select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;

MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
                            25699403

SQL>

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
32#
发表于 2003-9-1 16:15 | 只看该作者
牛,佩服佩服

使用道具 举报

回复
论坛徽章:
0
33#
发表于 2003-9-1 19:13 | 只看该作者
upupup

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41
34#
发表于 2003-9-2 09:55 | 只看该作者
没看明白

使用道具 举报

回复
论坛徽章:
0
35#
发表于 2003-9-2 10:26 | 只看该作者

前几天在asktom看到这个问题

最初由 lucy_wang 发布
[B]我觉得这个好象是oracle最难理解的地方了,这几天学习正被卡到这个地方了。

就上面讨论的多个image的问题。

假如存在顺序未提交事务 a,b,c
分别存在before image a1,b1,c1
a1 是原始数据
b1 包含了a 的改变
c1 包含了a和b的改变

如果现在a 事务被提交了,那么 image a1 通过何种机制从data buffer中flush的。 a1  被提交后,执行了事务d, 那么d 事务用的image 是b1吗? [/B]


TOM的解释是当A提交了之后,B发现它正在处理的数据集发生变化,它会产生一个rollback,然后重新来过。
应该尽量避免这种情况,不然会对系统performance产生很大的影响。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
36#
 楼主| 发表于 2003-9-2 10:31 | 只看该作者

Re: 前几天在asktom看到这个问题

最初由 Ian 发布
[B]

TOM的解释是当A提交了之后,B发现它正在处理的数据集发生变化,它会产生一个rollback,然后重新来过。
应该尽量避免这种情况,不然会对系统performance产生很大的影响。 [/B]


这不过就是  consistent reads 的问题
产生  CR blocks

在 v$waitstat 中若  undo block 类型等待过多,基本和这个原因比较密切

以前写这个帖子的时候没有深刻理解这些问题

使用道具 举报

回复
论坛徽章:
0
37#
发表于 2003-9-2 10:37 | 只看该作者

是呀,知识积累的过程很快乐

另外,biti你上面的例子很不错,但有些东西也没有反映完全,比如说当你同时提交的事物大于initran后,新分配的slot应该实际放在哪里?应该是放在数据部分当中的,但这个例子并不能表示出来。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
38#
 楼主| 发表于 2003-9-2 11:16 | 只看该作者

Re: 是呀,知识积累的过程很快乐

最初由 Ian 发布
[B]另外,biti你上面的例子很不错,但有些东西也没有反映完全,比如说当你同时提交的事物大于initran后,新分配的slot应该实际放在哪里?应该是放在数据部分当中的,但这个例子并不能表示出来。 [/B]


ITL 怎么可能跟数据混合在一起

虽然可使用 pctfree 定义的空间,往下扩展,但是 ITL 永远位于所有数据的上方!

使用道具 举报

回复
论坛徽章:
7
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-10-06 09:52:15ERP板块每日发贴之星
日期:2007-02-09 01:06:11会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
39#
发表于 2004-6-9 09:57 | 只看该作者
設置較大的inittrans,是不是就意味著oracle會分配更多的資源來管理事務.我一直不楚應該設置大inittrans還是maxtrans.請指教

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
40#
发表于 2005-4-4 14:54 | 只看该作者
最初由 ITjane 发布
[B]設置較大的inittrans,是不是就意味著oracle會分配更多的資源來管理事務.我一直不楚應該設置大inittrans還是maxtrans.請指教 [/B]


这个,帮你顶上去看看

使用道具 举报

回复

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

本版积分规则 发表回复

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