ORACLE ITL, INITRANS研究

andzen 发表于 2008-04-16 11:44:06

今天有时间测试了一下ORACLE 并发事务的时候的块分配和ITL 管理,
略去大部分的测试过程,大概的结果小结如下:
1. INITRANS =1 时 并发多个INSERT 事务(本次测试最多5个)的时候并不会由于ITL的争用而等待组塞,ORACLE 采取的策略是每个INSERT事物分配不同的一些块来使用,这样各个会话之间就不会产生冲突,除非段没有多余的块(次种情况与本次的主题无关).

2.INITRANS =1 时 并发多个UPDATE事务(本次测试最多7个)的时候也不会由于ITL的争用而导致等待产生,此时ORACLE除了使用默认的ITL之外,另外动态扩展所需要的ITL,紧紧在非常极端的情况下才会出现等待,(当然应用层面的死锁或等待与本主题无关)。
  1) 该BLOCK没有FREE空间了,注意FREE参数的设置不能太小。
  2) 该块使用的ITL总数,超过该块允许的ITL的最大值min(round(block_size*0.5/24) - 2  ,255) 。
   要达到这样的极端情况实际的生产情况是很难的,应该比业务SQL的死锁出现的概率更小。


小结:创建表的时候除非已经清楚,大部分的情况下没有必要调整INITRANS参数,通常1-4以下足够用了,INITRANS 设置非常大的时候ORACLE 有出现坏块的BUG,另外FREE 参数倒是要注意不能随意改小,除非你已经很清楚更改的后果.


参考部分INSERT 测试代码
( 分3个SESSION insert的  ,x字段1开头的是SESSION  1 插入的,其他2个也类似  )

SQL*Plus: Release 10.1.0.4.0 - Production on Wed Apr 16 10:40:17 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters and Data Mining options
 
SQL> create table xx (x number) storage(initial 64k next 64k) initrans 2
Table created.
SQL>  truncate table xx;
Table truncated.
SQL> select dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;
no rows selected
SQL> INSERT INTO XX SELECT 11 FROM DUAL;
1 row created.
SQL>                                   
SQL>  set linesize 200
SQL>  column SEGMENT_NAME format a16
 select SEGMENT_NAME,EXTENT_ID,BLOCKS,BYTES from user_extents  where segment_name ='XX';SQL>

SEGMENT_NAME      EXTENT_ID     BLOCKS      BYTES
---------------- ---------- ---------- ----------
XX                        0        128    1048576

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11         51       4590

SQL> INSERT INTO XX SELECT 12 FROM DUAL;

1 row created.

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        12         51       4534
        11         51       4590

SQL>
SQL> INSERT INTO XX SELECT 13 from dual;

1 row created.

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        12         51       4534
        11         51       4590
        13         51       4658

SQL> INSERT INTO XX SELECT 14 from dual;

1 row created.

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        12         51       4534
        11         51       4590
        13         51       4658
        14         51       4658

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        12         51       4534
        11         51       4590
        13         51       4658
        14         51       4658

SQL> commit;

Commit complete.

SQL>  INSERT INTO XX SELECT 15 from dual;

1 row created.

SQL> insert into xx select 16 from dual;

1 row created.

SQL> commit;

Commit complete.

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx order by x;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11         51       4590
        12         51       4534
        13         51       4658
        14         51       4658
        15         51       4658
        16         51       4658
       
        21         51       4537
        22         51       4537
        23         51       4537
        24         51       4537
        25         51       4537
        26         51       4537
       
       
        31         51       4680
        32         51       4614
        33         51       4614
        34         51       4614
        35         51       4614
        36         51       4614

18 rows selected.



luohu   4.16  2008
关键词(Tag): oracle itl initrans


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定