每个块都有一个块首部。这个块首部中有一个事务表。事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定。这个事务表的初始大小由对象的INITRANS 设置指定。对于表,这个值默认为2(索引的INITRANS 也默认为2)。事务表会根据需要动态扩展,最大达到MAXTRANS 个条目(假设块上有足够的自由空间)。所分配的每个事务条目需要占用块首部中的23~24 字节的存储空间。注意,对于Oracle 10g,MAXTRANS 则会忽略,所有段的MAXTRANS 都是255。


也就是说,如果某个事物锁定了这个块的数据,则会在这个地方记录事务的标识,当然那个事务要先看一下这个地方是不是已经有人占用了,如果有,则去看看那个事务是否为活动状态。如果不活动,比如已经提交或者回滚,则可以覆盖这个地方。如果活动,则需要等待(闩的作用)

所以,如果有大量的并发访问使用的这个块,则参数不能太小,否则资源竞争将导致系统并发性能下降。

测试了一下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 参数倒是要注意不能随意改小,除非你已经很清楚更改的后果.

[转帖]Oracle中INITRANS和MAXTRANS参数的更多相关文章

  1. [转]Oracle中INITRANS和MAXTRANS参数

    每个块都有一个块首部.这个块首部中有一个事务表.事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定.这个事务表的初始大小由对象的INITRANS 设置指定.对于表,这个值默认为2(索引的IN ...

  2. Oracle中alter system命令参数之scope

    SCOPE The SCOPE clause lets you specify when the change takes effect. Scope depends on whether you s ...

  3. oracle中的初始化参数文件

    oracle初始化参数文件管理 oracle实例是指运行状态下的oracle软件,是由内存结构跟一些进程结构组成的,主要实现数据库的访问跟控制功能,是oracle的核心. 初始化参数文件是oracle ...

  4. oracle中有关初始化参数文件的几个视图对比

    涉及oracle中有关初始化参数文件的几个视图主要有:v$paraemter,v$parameter2,v$system_parameter,v$system_parameter2,v$spparam ...

  5. Oracle中的in参数的个数限制

    遇到了这个问题 “oracle中in参数个数限制”,这里记录下, in后括号中的参数个数有限制,Oracle 9i 中个数不能超过256,Oracle 10g个数不能超过1000. 当in的个数大于1 ...

  6. [转帖]【Oracle】详解Oracle中NLS_LANG变量的使用

    [Oracle]详解Oracle中NLS_LANG变量的使用 https://www.cnblogs.com/HDK2016/p/6880560.html NLS_LANG=LANGUAGE_TERR ...

  7. oracle中的in参数超过1000的解决方案

    在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出"java.sql.SQLException: ORA-01795: 列表中 ...

  8. Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?

    Oracle中如何导出存储过程.函数.包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? QQ群里有人问:如何导出一个用户下的存储过程?   麦苗答:方法有多种,可以使用DBMS_MET ...

  9. oracle中如何设置主键并且让其自动增长

    由于oracle中是没有自动增长的的,需要自己去进行写触发器等方式去进行设置: 找了一下他人写的,有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列. 一.自增长主键 我创建一个用户的信 ...

  10. Oracle中分区表的使用

       查询分区:Select *From user_extents WHERE partition_name='分区名'; 1)创建表空间 create tablespace HRPM0 datafi ...

随机推荐

  1. 在ASP.NET Core微服务架构下使用RabbitMQ如何实现CQRS模式

    前言 在现代软件开发中,微服务架构和CQRS模式都是备受关注的技术趋势.微服务架构通过将应用程序拆分为一系列小型.自治的服务,提供了更好的可伸缩性和灵活性.而CQRS模式则通过将读操作和写操作分离,优 ...

  2. C# 成为2023年度编程语言之王

    原文发表在公众号 腾讯云开发者:https://mp.weixin.qq.com/s/5owE5hmJVkwOLJrKMXfR6Q 导读 2023 TIOBE 年度编程语言正式揭晓,C# 在陪跑多年后 ...

  3. Azure Data Factory(十一)Data Flow 的使用解析

    一,引言 上一篇文字,我们初步对 Data Flow 有个简单的了解,也就是说可以使用 Data Flow 完成一些复杂的逻辑,如,数据计算,数据筛选,数据清洗,数据整合等操作,那我们今天就结合 Da ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (54)-- 算法导论6.2 6题

    文心一言 VS 讯飞星火 VS chatgpt (53)-- 算法导论6.2 5题 六.证明:对一个大小为 n的堆,MAX-HEAPIFY 的最坏情况运行时间为 Ω(Ign).(提示对于n个结点的堆, ...

  5. Kubernetes的拐点助推器:左手开源,右手边缘计算

    摘要:KubeEdge 是首个基于 Kubernetes 扩展的,提供云边协同能力的开放式智能边缘计算平台,也是 CNCF 在智能边缘领域的首个正式项目.依托 Kubernetes 强大的容器编排和调 ...

  6. GaussDB(DWS):非侵入式备份及其在NBU上的应用

    摘要:Netbackup软件必须要有该集群所支持的OS的安装包,一种新的非侵入式备份架构呼之欲出. 1. 通用的备份方案介绍 除Netbackup深度定制的厂商外,通常数据库厂商都按XBSA接口来实现 ...

  7. Java程序员都要懂得知识点:原始数据类型

    摘要:Java原始数据类型有short.byte.int.long.boolean.char.float.double.原始数据是未处理的或简化的数据,它构成了物理存在的数据,原始数据具有多种存在形式 ...

  8. HDC.Cloud2021|开发者们都在谈的云原生到底长什么样?

    摘要:云原生数据库基于存储与计算分离架构,与传统数据库相比,具备高性能.高扩展.一致性.易管理和多云支持等特性,在海量数据处理.智能存储.业务应用等方面表现出了强大的生命力. 近几年,云原生的风越刮越 ...

  9. SecSolar:为代码“捉虫”,让你能更专心写代码

    摘要:在"更健壮.更安全"的路上,CloudIDE又迈出了关键的一步:推出了代码安全检测服务SecSolar,以轻量插件的形式,为代码"捉虫",帮助企业和开发者 ...

  10. java算法易筋经:常见java-API使用技巧

    摘要:算法练习的本质也在于锻炼编程思维,强化程序员的内力.因此给自己后面会持续更新的算法技巧内容简称算法易筋经. 本文分享自华为云社区<<java算法易筋经>之常见java-API使 ...