TX:ITL LOCK(INITRANS,MAXINTRANS)

简介: 今天和老周老肖吃饭之于谈论了一个问题,就是INITRANS,MAXINTRANS对高并发量的数据块的影响。大家都知道在进行大量DML对同一个块的时候(不同行),不会出现TX:ROW LOCK,但是由于ITL的限制这样的操作可能出现TX:ITL LOCK(MODE=4),以前我遇到过各种TX TM,但是ITL确实没有遇到过,我记得10G的不管ASSM还是MSSM都是默认的最打MAXTRANS为255,所以没怎么关注,因为如果要达到这个值需要255个TRANSACTION对同一个块进行修改,基本不可能。

今天和老周老肖吃饭之于谈论了一个问题,就是INITRANS,MAXINTRANS对高并发量的数据块的影响。
大家都知道在进行大量DML对同一个块的时候(不同行),不会出现TX:ROW LOCK,但是由于ITL的限制
这样的操作可能出现TX:ITL LOCK(MODE=4),以前我遇到过各种TX TM,但是ITL确实没有遇到过,我记得
10G的不管ASSM还是MSSM都是默认的最打MAXTRANS为255,所以没怎么关注,因为如果要达到这个值需要
255个TRANSACTION对同一个块进行修改,基本不可能。
但是我却忽略了一点:
DIS402 3-19
Before the block reaches  PCTFREE, the free space is
used both for insertion of new rows and by the growth of the data block header.
可以发现PCTFREE除了存储可能的UPDATE数据还存储扩张的BLOCK header。

测试:
SQL>  create tablespace testo1
  2   datafile '/oradata/xuexi/XUEXI/datafile/testo1.dbf' size 50m segment space management AUTO;
SQL>  create tablespace testo2
  2   datafile '/oradata/xuexi/XUEXI/datafile/testo2.dbf' size 50m segment space management manual;
SQL>   create table test2
  2    initrans 100 maxtrans 200
  3    tablespace testo1
  4    as
  5    select * from dba_users;
 
Table created
 
SQL>
SQL>  create table test3
  2    initrans 100 maxtrans 200
  3    tablespace testo2
  4    as
  5    select * from dba_users;
  SQL> select TABLE_NAME,FREELISTS,PCT_FREE,PCT_USED,INI_TRANS,MAX_TRANS from user_tables where table_name in('TEST2','TEST3');
 
TABLE_NAME                      FREELISTS   PCT_FREE   PCT_USED  INI_TRANS  MAX_TRANS
------------------------------ ---------- ---------- ---------- ---------- ----------
TEST2                                             10                   100        255
TEST3                                   1         10         40        100        255
可以看到我们只能指定INI_TRANS,MAX_TRANS默认就是255,同时可以看到MSSM的PCT_FREE和PCT_USED都生效了因为他是FREELIST管理的(freelists=1),
而ASSM却只有PCT_FREE,而PCT_USED,freelists均为空,所以他是位图进行管理空块的,而PCT_FREE是必须因为剩余多少空间给UPDATE和扩张的ITL还是
它来指定,而为了避免FREELIST的争用,大家要尽量使用ASSM,默认的10G就是。
默认的INDEX的INI_TRANS=2,表的INI_TRANS=1,MAX_TRANS都是255,这样就出现一个问题,如果没有足够的PCTFREE来进行扩张ITL,即便MAX_TRANS为65555也没用,
所以如果出现ITL LOCK(MODE=4),大家应该考虑是:
1、增加PCTFREE
2、增加初始的块的ITL及提高INI_TRANS。
其实这样的情况很少,但是遇到还是要注意。

SQL> alter table test2 pctfree 40 initrans 150;
 
Table altered
 
SQL> select TABLE_NAME,FREELISTS,PCT_FREE,PCT_USED,INI_TRANS,MAX_TRANS from user_tables where table_name in('TEST2');
 
TABLE_NAME                      FREELISTS   PCT_FREE   PCT_USED  INI_TRANS  MAX_TRANS
------------------------------ ---------- ---------- ---------- ---------- ----------
TEST2                                             40                   150        255

但是这个操作只对后来分配的BLOCK生效,如果对现有的表,只有MOVE了,根据需求看看是否NOLOGGING
SQL> alter table test2 move pctfree 30 initrans 170;
 
Table altered
当然索引也可以一样处理

SQL> select TABLE_NAME,index_name,FREELISTS,PCT_FREE,INI_TRANS,MAX_TRANS from user_indexes ;
 
TABLE_NAME                     INDEX_NAME                      FREELISTS   PCT_FREE  INI_TRANS  MAX_TRANS
------------------------------ ------------------------------ ---------- ---------- ---------- ----------
TEST3                          TEST_IN                                           10          2        255

注意索引没有PCT_USED,是否进行插入数据不是PCT_USED控制的,是根据ROWID确定的。同时对于索引来说,其pctfree仅仅是在create或rebuild时生效,对与后续的插入、修改之类的操作来说是无效的,pctfree的设置也仅仅是为了延缓由于insert等操作而导致的的索引块分裂。

SQL> alter index test_in  pctfree 30;
 
alter index test_in  pctfree 30
 
ORA-02243: invalid ALTER INDEX or ALTER MATERIALIZED VIEW option
所以索引只能修改INITRANS
 
SQL>
SQL>
SQL> alter index test_in  initrans 170;
 
Index altered

 

相关文章
|
数据采集 存储 人工智能
2022云栖精选—云上电力信息数据采集与处理
摘要:本文整理自阿里云电力行业高级解决方案架构师姜洺,在云栖大会的分享。本篇内容主要分为三个部分: 1. 新型电力系统下数据处理上云需求 2. 云上电力信息数据处理核心技术和实践 3. 电力信息数据处理上云核心优势
2022云栖精选—云上电力信息数据采集与处理
|
4月前
|
缓存 Ubuntu Linux
Docker安装
本文介绍Docker在CentOS和Ubuntu系统中的安装与配置方法,涵盖卸载旧版本、配置yum源、在线/离线安装、启动服务、设置开机自启、运行HelloWorld测试及daemon.json配置详解,并提供阿里云镜像加速、日志管理、命令补全等实用操作步骤。
|
消息中间件 监控 中间件
阿里云中间件有哪些?这里最全面
这其实是一个比较虚的概念。广义的中间件范围很广。起沟通作用的都可以认为是中间件。甚至ODBC这样的东西你也可以认为是中间件。 而阿里云的中间件就比较多了
9918 113
|
存储 监控 安全
基于SaaS的教务系统平台设计构想
本篇是一篇自然科学论文,仅供参考。 大学挑战杯复赛没过,放博客纪念。
710 0
基于SaaS的教务系统平台设计构想
|
运维 负载均衡 Cloud Native
「读写分离」RDS PostgreSQL数据库代理发布,助力降本增效
基于MaxScale的RDS数据库代理服务能够帮助客户实现数据库的读写分离架构,以低成本实现应用横向扩展能力。
1396 0
「读写分离」RDS PostgreSQL数据库代理发布,助力降本增效
|
存储 关系型数据库 分布式数据库
配置 pgcat for PolarDB 读写分离连接池
背景PolarDB 开源数据库支持云原生存算分离分布式架构, 一份存储支持多个计算节点, 目前是一写多读的架构. 内核已经很强大了, 怎么实现业务透明的读写分离, 还缺一个连接池, pgcat是不错的选择.pgcat支持连接池、sharding、读写负载均衡等, 更多功能请参考其官网https://...
708 0
|
Web App开发 JavaScript 前端开发
【测试开发】知识点-前端 vue-element-admin 框架,项目组件分析
【测试开发】知识点-前端 vue-element-admin 框架,项目组件分析
【测试开发】知识点-前端 vue-element-admin 框架,项目组件分析
|
图形学 计算机视觉
3D建模入门学习方法,制作过程的六个主要阶段讲解
从来没有接触过建模的小白们是否都很好奇 自己最喜欢的3D电影或者是游戏角色 比如说《哪吒之魔童降世》里面的哪吒 《王者荣耀》里面的人物等等 都是怎样制作出来的呢?
813 0
3D建模入门学习方法,制作过程的六个主要阶段讲解
|
数据采集 人工智能 分布式计算
可闭环、可沉淀、可持续的企业级数据赋能体系
对于所有企业来说,数据决定了基于算力、算法等能做出哪些场景和应用。在本次首席技术官大数据专享会上,友盟+首席产品官林鸣晖围绕业务数据化,数据资产化、资产应用化、应用价值化构建属于企业的可闭环、可沉淀、可持续的数据赋能体系进行分享,基于智能数据采集(U-SDC),用户数据平台(U-CDP),数据开放平台(U-DOP)探讨如何建立企业的数据银行。
6106 0
可闭环、可沉淀、可持续的企业级数据赋能体系