[转帖]Oracle中INITRANS和MAXTRANS参数

oracle,initrans,maxtrans,参数 · 浏览次数 : 0

小编点评

**块分配和ITL管理** **INITRANS参数** INITRANS 设置块首部的最大条目数量。默认值为2,表示每个块可以包含最多2个条目。 **事务表** 事务表用于记录每个块上的锁和锁定范围。初始大小由INITRANS设置,默认值为2。 **事务条目** 每个事务条目占用23-24字节的存储空间。 **MAXTRANS参数** MAXTRANS 设置块分配的最大条目数量。默认值为255,即所有段的MAXTRANS设置为255。 **并发性能** 当多个事务并发访问同一个块时,块分配和ITL管理可能会导致排队等待或死锁。 **初始化参数设置** * **INITRANS:**块首部最大条目数量。 * **MAXTRANS:**块分配的最大条目数量。 **建议** * 在创建表时,通常不必要调整INITRANS参数。 * 正常情况下,INITRANS 设置非常小(1-4)。 * 如果需要设置大INITRANS参数,请考虑因素,例如并发访问数量和块大小。 * 设置FREE参数时,注意将其大小设置合理。

正文

每个块都有一个块首部。这个块首部中有一个事务表。事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定。这个事务表的初始大小由对象的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参数相似的内容:

[转帖]Oracle中INITRANS和MAXTRANS参数

每个块都有一个块首部。这个块首部中有一个事务表。事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定。这个事务表的初始大小由对象的INITRANS 设置指定。对于表,这个值默认为2(索引的INITRANS 也默认为2)。事务表会根据需要动态扩展,最大达到MAXTRANS 个条目(假设块上有足

[转帖]create table INITRANS参数分析

https://www.modb.pro/db/44701 1. 内容介绍 Oracle数据库create table时使用INITRANS参数设置数据块ITL事务槽的数量,确保该数据块上 并发事务数量。参数内容总结如下, 1. Oracle 8K blocksize 数据块初始 2个itl,8K

[转帖]oracle中Rman增量备份下各级别level的区别

RMAN备份分为全备和增量备份两部分 增量备份:分为0 1 2级 ORACLE官方解释: A level 1 incremental backup can be either of the following types: Adifferential backup, which backs up a

[转帖]Oracle中有大量的sniped会话

https://www.cnblogs.com/abclife/p/15699959.html 1 2 3 4 5 6 7 SQL> select status ,count(*) from gv$session group by status; STATUS COUNT(*) KILLED 2 S

[转帖]oracle数据库中RMAN备份格式化format解释

格式化解释: 使用格式串 更改格式命令: RMAN> configure channel device type disk format ' E:\app\Administrator\db_bak\rmanbak\backup_%d_%T_%s_%p '; 新的 RMAN 配置参数: CONFIGU

[转帖]Oracle数据库中ITL详解

首先说明这篇文章是转载的,原文地址:http://blog.sina.com.cn/s/blog_616b428f0100lwvq.html 1、什么是ITL ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,用来记录该块所有发生的事务,一个it

[转帖]Oracle JDBC中的语句缓存

老熊 Oracle性能优化 2013-09-13 在Oracle数据库中,SQL解析有几种: 硬解析,过多的硬解析在系统中产生shared pool latch和library cache liatch争用,消耗过多的shared pool,使得系统不具有可伸缩性。 软解析,过多的软解析仍然可能会导

[转帖]Oracle 用户密码中包括了“@”字符串的错误提示解决方法

Oracle 用户密码设置了带有“@”符号,正常登陆总是无法登陆,提示无法解析的连接字符串错误 解决办法:1:修改密码:修改密码使密码中不包括@符号;2:增加转义即可,在密码前后增加 \"示例如下: CMD中输入:C:\Users\Administrator> exp system/\"ABC@X1

[转帖]oracle 11g 分区表创建(自动按年、月、日分区)

https://www.cnblogs.com/yuxiaole/p/9809294.html 前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G,而且只增不改,故考虑使用分区表来提高查询性能,提高维护性。 oracle 11g 支持自动分区,不过得

[转帖]Oracle创建用户和表空间

一、概述 1.数据库实际管理中,不同业务系统需要使用’不同的用户'进行管理维护和使用,这样做把业务数据和系统数据独立分开管理,利于数据库系统管理; 2.在数据库中创建业务系统用户时候,建议为用户创建指定的用户表空间,否则全部默认为user表空间存储,使得user表空间容易过大,不易管理、查询。 二、