ITL

本文深入探讨了数据库事务槽分配、ITL争用的原理及解决策略,包括事务槽的数量、ITL的分配与清理机制,以及如何避免ITL争用导致的数据块拥堵,通过实例阐述了快速提交与延迟提交的区别与应用。



查看T2的事务槽

Select aa.ini_trans,aa.max_trans From dba_tables aa Where table_name='T2'




Create Table t10(Id Int);

Insert Into t10 values(1);

Insert Into t10 values(2);

Insert Into t10 values(3);



查看数据在快上分布的位置

Select Id,dbms_rowid.rowid_relative_fno(Rowid) file#,

dbms_rowid.rowid_block_number(Rowid) block# From t10


一个事务开始以后,在一个数据块上得到一个事务槽,那么在这个事务提交以前,这个事务槽会一直占用,直到这个事务提交释放这个事务槽

只有在已经提交以后,这个itl事务槽中的scn才会有数值。

一个事务在一个数据块上占用一个事务槽



如果是insert,默认每个表的ini_trans  itl是2,尽量保持这个数据块的事务数不超过2,

采用在多个数据块中插入的情况。这样将insert分布到多个数据块中,防止了itl的争用。



三个会话同时修改一个数据块。

事务槽自己增加到了3个。

因为max_trans是255,因此发生ITL争用的几率也很小。

因此基于上面的两种情况来说,ITL发生争用的几率很小。



Cleanout有2种:

1:fast commit cleanout  (提交清除)

2:delayed block cleanout(延迟清除).

提交清除是如何工作的?

Oracle会记录已修改的块列表,这些列表可以有20个块,Oracle根据需要分配多个这样的列表,

但是如果这些修改的块加起来超过buffer_cache的10%,oracle就停止分配这样的列表,因此

当提交时就只会清理最多10%buffer_cache的数据块,其余的部分就延迟清除,这样也是为了

提高commit的效率。U


还有一种情况,就是当事务还未commit时,修改的数据块已经写入硬盘,当发生commit时

oracle并不会把block重新读入做cleanout,而是把cleanout留到下一次对此块的访问是完成。 


注意:对于Oracle来说,对于一个事务,可以是快速提交、也可以是延迟提交。目的都是为了提高提交的速度。

提交以后,oracle需要对ITL事务槽、每一行的锁定标记进行清除。

如果是快速提交,那么在提交的时候,会将事务表和每一个数据块的ITL槽进行清除。但是锁定标记可能没有清除,等下次用到的时候再进行清除。

如果是延迟提交,那么在提交的时候,只是将事务表进行清除,并没有对ITL事务槽进行清除,每一行的锁定标记也没有清除。

块清除的过程并不包括每个行的锁定标记的清除,主要指的是ITL的清除。

 

1、事务是否已经提交、事务对应的SCN,这些信息都是以回滚段事务表中的为主,事务槽中的不准确

2、事务槽中的事务id和uba地址是准确的

3、事务槽1中的事务id和回滚段中的事务id肯定不是一样的,不同回滚段中的事务id也一定不一样。

4、每一个回滚段块中都有一个事务id,记录哪个事务正在使用这个块。

5、回滚事务表可能被覆盖,回滚段也可能被覆盖

对于前者,我们需要增加回滚段

对于后者,我们需要增大回滚段

回滚段也是循环使用的,只有活动的回滚段不会被覆盖


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

转载于:http://blog.itpub.net/10678398/viewspace-720935/

欧姆龙FINS(工厂集成网络系统)协议是专为该公司自动化设备间数据交互而设计的网络通信标准。该协议构建于TCP/IP基础之上,允许用户借助常规网络接口执行远程监控、程序编写及信息传输任务。本文档所附的“欧ronFins.zip”压缩包提供了基于C与C++语言开发的FINS协议实现代码库,旨在协助开发人员便捷地建立与欧姆龙可编程逻辑控制器的通信连接。 FINS协议的消息框架由指令头部、地址字段、操作代码及数据区段构成。指令头部用于声明消息类别与长度信息;地址字段明确目标设备所处的网络位置与节点标识;操作代码定义了具体的通信行为,例如数据读取、写入或控制器指令执行;数据区段则承载实际交互的信息内容。 在采用C或C++语言实施FINS协议时,需重点关注以下技术环节: 1. **网络参数设置**:建立与欧姆龙可编程逻辑控制器的通信前,必须获取控制器的网络地址、子网划分参数及路由网关地址,这些配置信息通常记载于设备技术手册或系统设置界面。 2. **通信链路建立**:通过套接字编程技术创建TCP连接至控制器。该过程涉及初始化套接字实例、绑定本地通信端口,并向控制器网络地址发起连接请求。 3. **协议报文构建**:依据操作代码与目标功能构造符合规范的FINS协议数据单元。例如执行输入寄存器读取操作时,需准确配置对应的操作代码与存储器地址参数。 4. **数据格式转换**:协议通信过程中需进行二进制数据的编码与解码处理,包括将控制器的位状态信息或数值参数转换为字节序列进行传输,并在接收端执行逆向解析。 5. **异常状况处理**:完善应对通信过程中可能出现的各类异常情况,包括连接建立失败、响应超时及错误状态码返回等问题的处理机制。 6. **数据传输管理**:运用数据发送与接收函数完成信息交换。需注意FINS协议可能涉及数据包的分割传输与重组机制,因单个协议报文可能被拆分为多个TCP数据段进行传送。 7. **响应信息解析**:接收到控制器返回的数据后,需对FINS响应报文进行结构化解析,以确认操作执行状态并提取有效返回数据。 在代码资源包中,通常包含以下组成部分:展示连接建立与数据读写操作的示范程序;实现协议报文构建、传输接收及解析功能的源代码文件;说明库函数调用方式与接口规范的指导文档;用于验证功能完整性的测试案例。开发人员可通过研究这些材料掌握如何将FINS协议集成至实际项目中,从而实现与欧姆龙可编程逻辑控制器的高效可靠通信。在工程实践中,还需综合考虑网络环境稳定性、通信速率优化及故障恢复机制等要素,以确保整个控制系统的持续可靠运行。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值