对MINTRANS 和 MAXTRANS 参数的理解

在创建表的时候, 我们会注意到有两个参数 MINTRANS 和 MAXTRANS. 这两个参数决定了在分配给这个表的block上初始的并发操作数和最大的并发操作数.

建表时, 指定MINTRANS大小可以在block中预留相应的空间, MAXTRANS参数一般为255, 但在block上并发的trans不一定能达到255个, 原因之一就是因为block上可能会没有足够的空闲空间来分配给新的transition.

在Tom大师的书上有一个相关的实验, 如下:

-- 创建表并插入数据
create table t(x int) maxtrans 1;

insert into t values( 1 );

insert into t value( 2 );

commit;

-- 登录一个新的session连接到数据库
update t
set x=3
where x=1;

--登录到第二个新的session连接到数据库
update t
set x=4
where x=2;

[@more@]

第一和第二个transition并没有做提交或回滚, 它们现在是一个并行的操作. 我们能得到的结果就是第二个session会处在hang的状态, 要一直等到
第一个session完成它的transition, 比如commit或rollback操作. 这就是因为MAXTRANS = 1 的影响, 同一时间点,在这个block上最大的并行transition只能
有一个.

默认情况下 MINTRANS = 1, MANXTRANS=255. 在oracle 10g不好实现个测试. 在建表时会ignore 你指定的MANXTRANS值, 会默认设置为255. 做了如下实验:

harry@HARRY> create table t(x int) MAXTRANS 1;

表已创建。

harry@HARRY> set long 1000;

harry@HARRY> select dbms_metadata.get_ddl('TABLE','T') UDDL from dual;

UDDL
------------------------------------------------------------------------

CREATE TABLE "HARRY"."T"
( "X" NUMBER(*,0)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "TEST"

我虽然指定了MAXTRANS为1, 但实际Oracle还是设置MAXTRANS为255. 查了下oracle的文档, 找到如下信息:

In earlier releases of Oracle Database, the MAXTRANS
parameter limited the number of transaction entries that could
concurrently use data in a data block. This parameter has been
deprecated. Oracle Database now automatically allows up to 255
concurrent update transactions for any data block, depending on
the available space in the block.
The database ignores MAXTRANS when specified by users only for
new objects created when the COMPATIBLE initialization parameter
is set to 10.0 or greater.


PS: 可以用dbms_rowid这个包通过rowid等到行对应block的信息, 例如:
SQL> select dbms_rowid.rowid_block_number(rowid), x from t;

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) X
------------------------------------ ----------
150 1
150 2

所有我们刚才的测试的行都是在同一个block上的.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7319061/viewspace-1026726/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7319061/viewspace-1026726/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值