`

行迁移检测及解决一例

阅读更多
行迁移(row migration):由于在table的pctfree设置过小,在update这个table并使其行长增大的时候,就有可能因为块的剩余空间不够存储该行,oracle会把该行数据迁移到另外一个有足够空闲空间的block中,此即发生了行迁移;发生行迁移时,行rowid并不变,原先存储该行的地方增加了一个新的指针,该指针指向迁移后的block id,所以我们在访问发生了行迁移的行时,会要读取迁移前和迁移后的2个block,一个表如果有大量的行发生了row migration,那么就有必要查看该table的storage设置了,看看pctpree是否可以调整的更大一点。
链接(row chained):和行迁移相对应的是行链接row chained,行连接常发生在行很大的情况下,如有long,raw,lob列,当insert一条新的记录时,一个block空间不够容纳一条记录,oracle会链接若干个block用来存储此记录,此即称为行链接;行链接是应为行的长度太长,要想避免,只能增加爱block size,在oracle9i之前,创建好数据库后您无法修改block size,要求你在建库的时候就要规划好,在oracle9i,提供了多块大小的技术,您可以设置2k,4k,8k,16k,32k大小的block,若想使用,您还必须设置相应的db_nk_cache_size缓冲池的大小。

下面是应用中客户维表行迁移的检测和消除步骤
检查user_tables信息
Select table_name,pct_free,num_rows,blocks,chain_cnt From user_tables Where table_name='CUST_DIMT0';
TABLE_NAME                      PCT_FREE  NUM_ROWS    BLOCKS CHAIN_CNT
------------------------------ ---------- ---------- ---------- ----------
CUST_DIMT0                            20    363338      8846      7449
 

利用oracle自带的脚本utlchain.sq,新增表chained_rows,用于存储发生行迁移记录信息
SQL> @ $ORACLE_HOME/rdbms/admin/utlchain.sql

Table created.
SQL> grant all on chained_rows to dwh;
Grant succeeded.

用analyze命令分析该表
SQL> analyze table cust_dimt0 list chained rows into sys.chained_rows;
Table analyzed

Chained_rows用于存放产生行迁移的记录信息,其中head_rowid表示产生行迁移记录的rowid;
从该表中任意找一个head_rowed,看看行迁移消除前的执行计划
SQL> set autotrace traceonly;
SQL> select * from cust_dimt0 where rowid='AAAF9UAARAAAAWGAA3';
Execution Plan
----------------------------------------------------------
  0     SELECT STATEMENT ptimizer=CHOOSE (Cost=1 Card=1 Bytes=172)
  1   0  TABLE ACCESS (BY USER ROWID) OF 'CUST_DIMT0' (Cost=1 Card=1 Bytes=172)
Statistics
----------------------------------------------------------
         0 recursive calls
         0 db block gets
         2 consistent gets
         0 physical reads
         0 redo size
      1467 bytes sent via SQL*Net to client
       275 bytes received via SQL*Net from client
         2 SQL*Net roundtrips to/from client

可以看到,取一条记录需要2个consistent read ;

接下来,来消除该表上的行迁移
修改表的pct_free,增大为25,日后需再观察,是否有大量的行迁移情况,如有,则说明还需要调整该参数。
SQL> alter table cust_dimt0 pctfree 25;

建立临时表,存放发生行迁移的记录
CREATE TABLE CUST_DIMT0_080331 AS SELECT * FROM CUST_DIMT0 WHERE ROWID IN (SELECT HEAD_ROWID FROM SYS.CHAINED_ROWS WHERE TABLE_NAME='CUST_DIMT0');

查看是否有外键约束应用于此表上,如果有。则先禁用此约束,操作结束后再启用
SQL> select constraint_name,constraint_type,r_owner,r_constraint_name from dba_constraints where table_name='CUST_DIMT0' and wner='DWH';
CONSTRAINT_NAME               CONSTRAINT_TYPE R_OWNER                       R_CONSTRAINT_NAME
------------------------------ --------------- ------------------------------ ------------------------------
CUST_DIMT0_PK                 P                                             
SYS_C006476                   C                                             
SYS_C006477                   C                                             
SYS_C006478                   C                                             
SYS_C006479                   C     
 

SQL>
SELECT * FROM DBA_CONSTRAINTS WHERE R_CONSTRAINT_NAME='CUST_DIMT0_PK';

未选定行
如有相关表建有外键指向该表,需要先禁用约束
alter table xxx disable constraint yyyy


删除发生行迁移的记录
SQL> DELETE CUST_DIMT0 WHERE ROWID IN (SELECT HEAD_ROWID FROM SYS.CHAINED_ROWS WHERE TABLE_NAME='CUST_DIMT0');

从临时表中重新插入记录
SQL> INSERT INTO CUST_DIMT0 SELECT * FROM CUST_DIMT0_080331;

看看执行行迁移消除后的执行计划
SQL> select * from cust_dimt0 where rowid='AAAF9UAARAAAAWGAA3';
未选定行
Execution Plan
----------------------------------------------------------
  0     SELECT STATEMENT ptimizer=CHOOSE (Cost=1 Card=1 Bytes=172)
  1   0  TABLE ACCESS (BY USER ROWID) OF 'CUST_DIMT0' (Cost=1 Card=1 Bytes=172)
 
Statistics
----------------------------------------------------------
         0 recursive calls
         0 db block gets
         1 consistent gets
         0 physical reads
         0 redo size
      1222 bytes sent via SQL*Net to client
       234 bytes received via SQL*Net from client
         1 SQL*Net roundtrips to/from client
         0 sorts (memory)
         0 sorts (disk)
0        rows processed

可以发现,执行行迁移消除后,consistent gets为1个block了。

最后,drop临时表
SQL> drop table CUST_DIMT0_080331;
 
Table dropped


注:行迁移主要是由于update的时候,块剩余空间满足不了而导致的,对于行迁移的消除,除了上面介绍的方法外,采用exp/imp ,先把表导出,然后再导入,或者采用move命令,同样,可以达到行迁移消除的目的。
分享到:
评论

相关推荐

    TT存储技术专题之详解数据迁移技术

    - **错误配置检测**:使用存储发现和设计工具可以帮助检测并解决错误配置问题,确保迁移过程顺利。 #### 五、数据迁移工具和技术 1. **数据迁移工具包**:许多供应商提供了专门的数据迁移工具包,这些工具包能够...

    融合领域知识的心跳异常检测深度模型研究及应用_毕业论文.pdf

    融合领域知识的心跳异常检测深度模型研究及应用 本文主要研究融合领域知识的心跳异常检测深度模型,旨在解决当前心电信号检测方法的不足之处,例如对信号噪声敏感、无法解决数据类别不平衡、无法解决个体差异性等...

    基于Tensorflow2.x开源的项目,比如:目标检测、风格迁移、图像分类、情感分析等等.zip

    以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接...

    一款好用的网站死链接检测工具

    以“xenu”为例,它是一款经典的免费死链接检测工具,由Alex Bochannek开发。Xenu's Link Sleuth(简称Xenu)以其强大的功能和友好的界面受到许多网站管理员的青睐。它能迅速地遍历整个网站,检查每个链接是否有效,...

    基于深度学习的恶意软件检测研究;MalConv;.zip

    这些多层结构允许模型捕获高级抽象特征,使得深度学习在图像识别、自然语言处理和,如本例中的,恶意软件检测等领域表现出色。 在恶意软件检测领域,传统的签名匹配方法已经无法应对日益复杂的攻击手段。深度学习...

    《工业视觉检测平台的思考与应用》.pdf

    以某世界五百强车企的水箱检测为例,传统的2D和3D检测方案难以满足需求,而采用基于深度学习的SM-Insight工业质检软件,能够有效地解决各种复杂缺陷检测问题,提高识别率和检测效率,减少人工检测的资源浪费。...

    检测硬盘有无坏道无壳版本,可以直接逆向

    1. **软件检测**:使用专业的硬盘检测软件,如本例中的"检测硬盘有无坏道.exe",它们通常会执行全面的扫描,包括逻辑坏道和物理坏道的检测。这类软件通过读取硬盘上的每一个扇区,检查是否有读取错误,从而发现潜在...

    FAIR用于对象检测研究的研究平台,实现了MaskR-CNN和RetinaNet等流行算法_carprice_Kaggl.zip

    RetinaNet是另一款由FAIR团队开发的深度学习对象检测框架,它解决了传统检测网络中的“类别不平衡问题”。在传统的检测网络中,背景区域远多于目标物体,导致训练过程中对目标物体的响应被稀释。RetinaNet通过引入一...

    使用深度学习的基于云的实时网络入侵检测-王雪妍1

    例如,雅虎的数据泄露事件就是其中臭名昭著的一例。因此,有效的网络入侵检测系统对于保障网络环境的安全至关重要。 本文的研究重点在于利用深度学习技术进行实时网络入侵检测。深度学习近年来因其在各种应用场景中...

    湖南省湘潭市凤凰中学2015届高考物理一轮复习 培训检测试题三

    转换法是一种解决物理问题的有效策略,尤其是在处理复杂的运动过程或受力分析时。这种方法基于运动的相对性和牛顿第三定律,通过转换参考系或研究对象来简化问题。例如,对于题目中的例1,两木块A和B通过弹簧连接,...

    课时跟踪检测(三十五)区域工业化与城市化进程——以珠江三角洲为例.doc

    总结:这个课时跟踪检测内容围绕区域工业化和城市化进程展开,通过具体案例和数据展示了珠江三角洲等地区在这一过程中的演变特征、产业结构变化以及遇到的问题。同时,还探讨了不同地区城市化模式的异同,并强调了州...

    BFD和NQA技术原理.doc

    BFD(Bidirectional Forwarding Detection,双向转发检测)是一种网络协议,用于检测网络设备间的双向转发路径的连通性和故障检测。NQA(Network Quality Analysis,网络质量分析)是一种网络性能分析技术,用于评估...

    深度学习理念下的化学教学探索——以“乙酸”一课为例.pdf

    以乙酸的教学为例,传统的教学方法往往是验证乙酸的酸性反应,但这样的方式多停留在记忆层面,无法有效提升学生的理解、设计、评价及迁移等高阶思维能力。因此,需要设计更加符合深度学习理念的教学模式,以促进学生...

    2019版高考地理一轮总复习第十单元第一节域差异与区域发展阶段同步检测鲁教版.doc

    【知识点一:区域差异的理解】 区域差异是指不同地理区域之间在自然环境、社会经济条件、人文历史背景等方面存在的显著差别。例如,在“一带一路”战略中,东部沿海地区的中国与欧洲西部在人口密度、城市化进程、...

    ECC问题检测方法说明

    ECC技术,即错误校正码技术,是为了解决数据存储过程中可能发生的位翻转错误而设计的一种数据保护机制。它通过在原始数据的基础上添加额外的冗余信息,在读取时能够自动检测并纠正数据传输或存储过程中的单比特错误...

    基于卷积神经网络的汉服关键尺寸自动测量.pdf

    实验部分,研究者以上衣为例进行验证,结果显示,经过两次迁移学习后,卷积神经网络模型的收敛性良好,训练效果显著。测得的汉服上衣尺寸相对误差在0.59%至4.17%之间,这表明该方法具有较高的精度和实用性。 关键词...

    湖南省湘潭市凤凰中学2015届高考物理一轮复习 培训检测试题八

    临界状态是系统发生突变前的平衡点,比如光学中的“临界角”,指的是光由一种介质进入另一种介质时恰好发生全反射的角度。在高考物理中,带电粒子在有界磁场中的运动问题常涉及到临界条件,比如粒子能否从磁场中射出...

    双活数据中心容灾解决方案.docx

    - **故障检测与切换**:建立完善的故障检测机制,确保故障发生时能够快速准确地进行切换。 - **监控与管理**:建立全面的监控体系,及时发现并解决问题,确保数据中心的正常运行。 #### 四、案例分析 以某金融企业...

    DBDBMigration .bd文件 sqllite文件转换成其他数据库格式工具例:sql server 2008

    总的来说,DBDBMigration是一个实用的数据库迁移工具,对于那些需要在SQLite和其他数据库之间进行数据迁移的用户来说,无疑是一个强大的助手。了解并掌握这款工具的使用方法,可以有效地提高数据管理的灵活性,降低...

Global site tag (gtag.js) - Google Analytics