[20180327]行迁移与ITL浪费.txt
[20180327]行迁移与ITL浪费.txt
--//生产系统遇到的一个问题,增加一个字段到表结构,修改数据字典,导致出现行迁移,而更加严重的是没有修改pctfree值,
--//以后的业务操作,依旧会导致大量的行迁移,不仅仅是操作时IO增加,而且还导致的问题ITL槽浪费,特别在密集的dml操作的
--//情况下:
1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SCOTT@book> create table t as select rownum id from dual connect by level<=2000;
Table created.
--//分析表略.
SCOTT@book> alter table t add (vc varchar2(10) default lpad('a',10,'a'));
Table altered.
--//建立chained_rows表.
SCOTT@book> @ /u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/admin/utlchain.sql
Table created.
--//我个人喜欢修改脚本建立临时表:
CREATE GLOBAL TEMPORARY TABLE CHAINED_ROWS
(
owner_name VARCHAR2 (30)
,table_name VARCHAR2 (30)
,cluster_name VARCHAR2 (30)
,partition_name VARCHAR2 (30)
,subpartition_name VARCHAR2 (30)
,head_rowid ROWID
,analyze_timestamp DATE
) ON COMMIT PRESERVE ROWS;
SCOTT@book> Analyze Table t Compute Statistics;
Table analyzed.
SCOTT@book> select NUM_ROWS,BLOCKS,CHAIN_CNT from dba_tables where owner=user and table_name='T';
NUM_ROWS BLOCKS CHAIN_CNT
---------- ---------- ----------
2000 23 1690
--//1690条记录出现行迁移.
SCOTT@book> analyze table t list chained rows into chained_rows;
Table analyzed.
SCOTT@book> select TABLE_NAME,HEAD_ROWID from chained_rows where rownum<=10;
TABLE_NAME HEAD_ROWID
---------- ------------------
T AAAWHJAAEAAAAIjABl
T AAAWHJAAEAAAAIjABm
T AAAWHJAAEAAAAIjABn
T AAAWHJAAEAAAAIjABo
T AAAWHJAAEAAAAIjABp
T AAAWHJAAEAAAAIjABq
T AAAWHJAAEAAAAIjABr
T AAAWHJAAEAAAAIjABs
T AAAWHJAAEAAAAIjABt
T AAAWHJAAEAAAAIjABu
10 rows selected.
SCOTT@book> @ &r/rowid AAAWHJAAEAAAAIjABl
OBJECT FILE BLOCK ROW ROWID_DBA DBA TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
90569 4 547 101 0x1000223 4,547 alter system dump datafile 4 block 547 ;
SCOTT@book> @ &r/rowid AAAWHJAAEAAAAIjABm
OBJECT FILE BLOCK ROW ROWID_DBA DBA TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
90569 4 547 102 0x1000223 4,547 alter system dump datafile 4 block 547 ;
--//这些记录出现行迁移.
2.bbed观察:
SCOTT@book> select * from t where rowid in ('AAAWHJAAEAAAAIjABl','AAAWHJAAEAAAAIjABm');
ID VC
---------- ----------
102 aaaaaaaaaa
103 aaaaaaaaaa
BBED> x /rnc *kdbr[101]
rowdata[5002] @6461
-------------
flag@6461: 0x20 (KDRHFH)
lock@6462: 0x02
cols@6463: 0
nrid@6464:0x01000227.0
BBED> x /rnc *kdbr[102]
rowdata[4993] @6452
-------------
flag@6452: 0x20 (KDRHFH)
lock@6453: 0x02
cols@6454: 0
nrid@6455:0x01000227.1
--//数据依旧保持在原来位置,但是数据信息迁移到dba=0x01000227.
BBED> set dba 0x01000227
DBA 0x01000227 (16777767 4,551)
BBED> x /rnc *kdbr[0]
rowdata[3455] @8164
-------------
flag@8164: 0x0c (KDRHFL, KDRHFF)
lock@8165: 0x01
cols@8166: 2
hrid@8167:0x01000223.65
col 0[3] @8173: 102
col 1[10] @8177: aaaaaaaaaa
BBED> x /rnc *kdbr[1]
rowdata[3431] @8140
-------------
flag@8140: 0x0c (KDRHFL, KDRHFF)
lock@8141: 0x01
cols@8142: 2
hrid@8143:0x01000223.66
col 0[3] @8149: 103
col 1[10] @8153: aaaaaaaaaa
--//在dba=4,551中记录数据信息.也就是发生了行迁移情况.
3.看看dba=4,551的情况:
BBED> map /v dba 4,551
File: /mnt/ramdisk/book/users01.dbf (4)
Block: 551 Dba:0x01000227
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
ub1 type_kcbh @0
ub1 frmt_kcbh @1
ub1 spare1_kcbh @2
ub1 spare2_kcbh @3
ub4 rdba_kcbh @4
ub4 bas_kcbh @8
ub2 wrp_kcbh @12
ub1 seq_kcbh @14
ub1 flg_kcbh @15
ub2 chkval_kcbh @16
ub2 spare3_kcbh @18
struct ktbbh, 3552 bytes @20
ub1 ktbbhtyp @20
union ktbbhsid, 4 bytes @24
struct ktbbhcsc, 8 bytes @28
sb2 ktbbhict @36
ub1 ktbbhflg @38
ub1 ktbbhfsl @39
ub4 ktbbhfnx @40
struct ktbbhitl[147], 3528 bytes @44
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
struct kdbh, 14 bytes @3580
ub1 kdbhflag @3580
sb1 kdbhntab @3581
sb2 kdbhnrow @3582
sb2 kdbhfrre @3584
sb2 kdbhfsbo @3586
sb2 kdbhfseo @3588
sb2 kdbhavsp @3590
sb2 kdbhtosp @3592
struct kdbt[1], 4 bytes @3594
sb2 kdbtoffs @3594
sb2 kdbtnrow @3596
sb2 kdbr[145] @3598
ub1 freespace[821] @3888
ub1 rowdata[3479] @4709
ub4 tailchk @8188
--//可以发现ktbbhitl=147,也就是占用147槽.而仅仅145条记录.
SCOTT@book> alter system dump datafile 4 block 551;
System altered.
Block header dump: 0x01000227
Object id on Block? Y
seg/obj: 0x161c9 csc: 0x03.1766e4bf itc: 147 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1000220 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.00b.00005161 0x00c00586.0ff3.3c --U- 145 fsc 0x0000.1766e4d4
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
0x03 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x04 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x05 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x06 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x07 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x08 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x09 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0a 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0b 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0c 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0d 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0e 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0f 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x10 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
....
0x86 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x87 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x88 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x89 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x8a 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x8b 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x8c 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x8d 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x8e 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x8f 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x90 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x91 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x92 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x93 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
bdba: 0x01000227
--//可以发现dba=4,551存在大量的ITL槽.你可以发现我执行的是alter table t add (vc varchar2(10) default lpad('a',10,'a'));
--//理论讲就是1个事务,而oracle没发生1次行迁移就产生1个ITL槽.
--//突然想起来我以前的测试:
[20160726]行链接行迁移与ITL槽.txt
[20160727]行链接行迁移与ITL槽2.txt
[20160728]行链接行迁移与ITL槽3.txt
[20160728]行链接行迁移与ITL槽4.txt
[20160729]行链接行迁移与ITL槽4.txt
http://blog.itpub.net/267265/viewspace-2122700/
http://blog.itpub.net/267265/viewspace-2122663/
http://blog.itpub.net/267265/viewspace-2122599/
http://blog.itpub.net/267265/viewspace-2122712/
--//测试再次说明,大量的行迁移行链接会导致ITL槽数量的异常增加.
--//哎,才想起来以前也遇到过类似问题.
--//看来无论是开发还是dba应该一定程度要重视行链接与行迁移问题.看看我们的团队实在太无语...
--//再重复看了我以前的测试:
http://blog.itpub.net/267265/viewspace-2122712/
--//还是有点不明白,我的dml是顺序执行的,oracle为什么不重用ITL槽,而是不断增加ITL槽使用呢....
--//那位解析看看,为了回滚操作吗?
[20180327]行迁移与ITL浪费.txt的更多相关文章
- 【oracle11g,17】存储结构: 段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线
一.段的类型: 1.什么是段:段是存储单元. 1.段的类型有: 表 分区表 簇表 索引 索引组织表(IOT表) 分区索引 暂时段 undo段 lob段(blob ,clob) 内嵌表(record类型 ...
- Oracle 行迁移和行链接
一.行迁移 1.1.行迁移概念 当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能在容纳在当前块,我们需要进行行迁移.一个行迁移意味着整行数据将会移动,仅仅保留的是一个转移地址.因此整 ...
- 模拟Oracle行迁移和行链接
行链接消除方法创建大的block块------------------ 参考tom kyte的例子----------------------------------------------创建4k ...
- oracle 11g sql优化之行迁移处理(加大BLOCK块)
行链接 产生原因:当一行数据大于一个数据块,ORACLE会同时分配两个数据块,并在第一个块上登记第二个块的地址,从而形成行链接. 预防方法:针对表空间扩大数据块大小.检查:analyze table ...
- mysql命令行的导入导出sql,txt,excel(都在linux或windows命令行操作)(转自筑梦悠然)
原文链接https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/73805962 Mysql导入导出sql,txt,excel 首先我们通过命令行 ...
- python笔记40-环境迁移freeze生成requirements.txt
前言 我们用python在本地电脑上开发完成一个python自动化项目用例,或者开发完成一个django项目. 需要部署到另外一台电脑或者服务器上的时候,需要导入python相关的依赖包,可以用fre ...
- [20180730]exadata与行链接.txt
[20180730]exadata与行链接.txt --//最近一段时间在看<expert oracle exadata>,智能扫描的三大优化方法是:字段投影,谓词过滤,存储索引.大多数智 ...
- 将txt文档按行分割
昨天遇到了一个需求,需要将txt文档按行分割,并指定了行数, 最近在用python,就在网上搜了一下,在参考了http://blog.csdn.net/zhang_red/article/detail ...
- Windows Server 2016-命令行Ntdsutil迁移FSMO角色
上章节我们介绍了有关图形化界面迁移FSMO角色,进行本章节之前我们首先回顾一下FSMO的五种操作主机角色:架构主机角色(Schema Master).域命名主机角色(Domain Naming Mas ...
随机推荐
- Android应用内展示office文件--腾讯浏览服务(TBS)
什么是TBS 依托 X5 内核强大的能力,致力于提供优化移动端浏览体验的整套解决方案(官网介绍).我们可利用其做文件浏览功能,支持多种文件格式,完全可以满足需求.更多介绍请看官网:http://x5 ...
- Hadoop项目实战-用户行为分析之应用概述(二)
1.概述 本课程的视频教程地址:<项目整体概述> 本节给大家分享的主题如下图所示: 下面我开始为大家分享第二节的内容——<项目整体概述>,下面开始今天的分享内容. 2.内容 从 ...
- SQL 必知必会·笔记<7>汇总数据——使用聚合函数
有时候我们需要对表中的数据进行汇总,而不需要数据本身,为了方便这些类型的检索,SQL给出了5个聚合函数,SQL聚合函数在各主要的SQL实现中得到了相当一致的支持.如下: 1.1 AVG()函数 AVG ...
- ASP.NET Core 中的 ORM 之 Dapper
目录 Dapper 简介 使用 Dapper 使用 Dapper Contrib 或其他扩展 引入工作单元 Unit of Work 源代码 参考 Dapper 简介 Dapper是.NET的一款轻量 ...
- Linux(CentOS6)系统安装Windows字体
这里说个插曲,最近在linux(CentOS6)服务器上面发布了个Web项目,结果发现,有一处的汉字字体渲染不出来,显示的是“□□□□”.因为我的tomcat编码已经修改了URIEncoding为UT ...
- 解决springmvc中使用redirect跳转后https变为http
方法一:配置文件修改ViewResolver的 redirectHttp10Compatible 属性,这个属性是为了兼容 http1.0协议. <bean id="viewResol ...
- 团队作业4——beta阶段冲刺
Deadline: 2018-12-16 22:00PM,以博客提交至班级博客时间为准 提交: (a) 项目课堂演示: (b) 1篇冲刺准备+5篇冲刺随笔,: (c) 1篇用户使用用报告: (d) 1 ...
- 单机多实例mysq 8.0l部署安装
单机多实例mysql部署安装 目的需求 在单台虚拟机部署部署多实例mysql,用于配置mysql replication,MHA等. 思路 多实例安装mysql可以参考<源编译MySQL8.0的 ...
- .Net实现微信公众平台开发接口(二) 之 “获取access_token”
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/ ...
- 一个小时学会PHP
一.PHP概要 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广 ...