前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >相克军_Oracle体系_随堂笔记012-undo

相克军_Oracle体系_随堂笔记012-undo

作者头像
Alfred Zhao
发布2019-05-24 20:25:59
4140
发布2019-05-24 20:25:59
举报

undo表空间中undo段是自动生成的,oracle自动使用undo表空间的undo段。

作为高级DBA,需要了解Oracle是如何使用undo段的。这样出了性能问题才能够解决。

1.Undo表空间及管理方式

代码语言:javascript
复制
show parameter undo_tablespace
show parameter undo

Undo段

代码语言:javascript
复制
select * from v$rollname;
代码语言:javascript
复制
select SEGMENT_NAME,BLOCKS,EXTENTS from dba_segments where SEGMENT_NAME='_SYSSMU1$';
代码语言:javascript
复制
select SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_NAME='_SYSSMU1$';
代码语言:javascript
复制
select owner, segment_name, tablespace_name from dba_rollback_segs;
代码语言:javascript
复制
select name from v$parameter where name like '%undo%';

UNDO表空间占用空间情况以及数据文件存放位置

代码语言:javascript
复制
select file_name,bytes/1024/1024 from dba_data_files
where tablespace_name like '%UNDOTBS%';

undo的三个作用

①事物回滚(rollback) ②读一致性,构造CR块 ③实例恢复,回滚未提交事物 Undo段中区的四种状态 free expired inactive active 显示UNDO区信息

代码语言:javascript
复制
SELECT extent_id, bytes, status FROM dba_undo_extents
WHERE segment_name='_SYSSMU1$';

undo_retention (undo段中区状态为inactive状态的保留时间)

下面参数作用主要是对于undo段中区的状态为inactive状态的覆盖处理方式:guarantee为强制保留undo_retention时长的inactive状态的区

代码语言:javascript
复制
alter tablespace undotbs1 retention guarantee;
代码语言:javascript
复制
alter tablespace undotbs1 retention noguarantee;

2.图解一个事物的操作流程:

代码语言:javascript
复制
select xid, xidusn, xidslot, xidsqn, ubablk, ubafil 
from v$transaction;

----

小结:

ITL中UBA指向data block的最后一个undo block地址,undo block之间指向,都是为了回滚操作;

Data block header 与Undo block的直接指向,为了构造cr块更快速;

ITL中XID指向undo segment header是为了多种提交方式。

一个事物开始之后,至少要在两个位置写入事物信息:

1.回滚段的段头块的事物表

2.要修改的数据块的头部事物槽的位置,找一个事物槽,将事物信息写上。

3.IMU机制

传统的undo,oracle将undo表空间和普通表空间同等对待。

而现在,有了IMU技术,事物开始以后,需要回滚块的时候不再需要从磁盘调取,直接在shared pool中IMU buffer中读取。

IMU大幅提高了构造cr块的速度,从而也提高了cr读的速度。

RAC和Stream环境中,IMU是被禁止掉的。

而且,IMU技术目前没有被Oracle大肆宣扬。

代码语言:javascript
复制
select * from v$sysstat where name like '%IMU%';

--上面sql查询的结果可以判断IMU是否开启,关注查询结果中IMU commits和IMU Flushes 的value,如果一直在增加,说明数据库开启了IMU技术。

4.读一致性

举个例子:

9:00开始查询一个1w条返回记录的表。

9:01其他用户删除了第1w条记录,并提交。

9:02查询结束,返回结果应该是1w条还是9999条?

按照之前所学的知识,可能就是9999条了,但是实际上oracle返回的是1w条记录,这也是根据业务实际要求的。

引入新的知识点:查询的时候会先对当前状态进行快照,记录一个当前scn,就是说之后查询过程中如果发现有块的scn号大于当前scn,就说明这个块在查询过程中被修改了。

ORA-01555

1.sql 执行的时间太长;

2.undo 表空间的压力太大;

3.undo 表空间大小的设定,取决于最长执行sql的时间,以及需要闪回的时段。然后根据这些具体的需求在em中undo表空间的建议图中根据时间找到对应的undo表空间应该设置为多大的参考值。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-08-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档