`

oracle性能调整的十大要点-PCTFREE、PCTUSED

阅读更多
八、PCTFREE、PCTUSED

    1)PCTFREE、PCTUSED使你能控制一个segment里所有数据块里free space的使用。
    PCTFREE:一个数据块保留的用于块里已有记录的可能更新的自由空间占block size的最小比例。
    PCTUSED:在新记录被插入block里之前这个block可以用于存储行数据和其他信息的空间所占的最小比率。

    2)这两个参数的使用
    如果创建表的时候指定pctfree=20%,oracle会在这个表的data segment的每个block都保留20%的空间用于已有记录的更新。Block的已使用空间上升到整个block size的80%时,这个block将移出free list;在提交了delete、update之后,oracle server处理这条语句并检查对应block的已使用空间是否低于PCTUSED,如果是,则这个block放进free list。

    3)PCTFREE、PCTUSED的设定
    • PCTFREE
    – Default 10
    – Zero if no UPDATE activity
    – PCTFREE = 100 × upd / (average row length)
    • PCTUSED
    – Default 40
    – Set if rows deleted
    – PCTUSED = 100 – PCTFREE – 100 × rows × (average row length) / blocksize
    其中,upd : the average amount added by updates, in bytes。This is determined by subtracting the average row length of intercurrent average row length;
    average row length:在运行了analyize命令之后,这个值可以从dba_tables中的avg_row_len列中获得。
    rows : the number of rows to be deleted before free list maintenance occurs。

    4)Delete、update可以增加block的自由空间,但是释放出来的空间有可能是不连续的,oracle在下列情况下会对碎片进行整理:一个block有足够的自由空间容纳row piece,但是由于每个碎片都较小以至这个row piece不能存放在一个连续的section中。

    6、Migration和Chaining

    1)如果一行的数据太大以至一个单独的block容纳不下,会产生两种现象:
    A、Chaining:行数据太大以至一个空block容纳不下,oracle会将这一行的数据存放在一个或多个block 组成的block chain中,insert、update都可能导致这个问题,在某些情况下row chaining是不能避免的。
    B、Migration:一次update操作可能导致行数据增大,以至它所在的block容纳不下,oracle server会去寻找一个有足够自由空间容纳整行数据的block,如果这样的block存在,oracle server把整行移到新的block,在原位置保存一个指向新存放位置的镜像行,镜像行的rowid和原来的rowid一致。
    Chaining、Migration的弊端:insert、update的性能降低,索引查询增加了IO次数。

    2)检测migration和chaining:
    Analyize table table_name compute statistics;
    Select num_rows,chain_cnt from dba_tables where table_name=’...’;
    查询镜像行:
    Analyize table table_name list chained rows;
    Select owner_name,table_name,head_rowid from chained_rows where table_name=’...’;
    产生Migration的原因可能是由于PCTFREE设置的太低以至没有保留足够的空间用于更新。
    可以通过增加PCTFREE的值避免行镜像产生。

    3)消除镜像行的步骤:
    运行analyize table ... list chained rows;
    复制镜像行到另一个表tmp;
    从源表中删除这些行;
    从tmp中将这些行插回到源表中。
    脚本:
    /* Get the name of the table with migrated rows */
    accept table_name prompt ’Enter the name of the table with migrated rows: ’
    /* Clean up from last execution */
    set echo off
    drop table migrated_rows;
    drop table chained_rows;
    /* Create the CHAINED_ROWS table */
    @?/rdbms/admin/utlchain
    set echo on
    spool fix_mig
    /* List the chained & migrated rows */
    analyze table &table_name list chained rows;
    /* Copy the chained/migrated rows to another table */
    create table migrated_rows as
    select orig.* from &table_name orig, chained_rows cr
    where orig.rowid = cr.head_rowid
    and cr.table_name = upper(’&table_name’);
    /* Delete the chained/migrated rows from the original table */
    delete from &table_name
    where rowid in ( select head_rowid from chained_rows );
    /* Copy the chained/migrated rows back into the original table */
    insert into &table_name select * from migrated_rows;
    spool off
    使用这个脚本时,必须将涉及到的外键约束去掉。

    7、索引重组

    在一个不稳定的表上建索引会影响性能,一个索引block只有完全空时才能进入free list,即使一个索引block里只含有一个条目,它也必须被维护,因此索引需要进行阶段性的重建。

    1)检查索引是否需要重组
    A、收集一个index的使用统计
    ANALYZE INDEX acct_no_idx VALIDATE STRUCTURE;
    B、查看收集的统计数据
    SELECT NAME,(DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100 AS index_usage FROM index_stats;

    Column Description
    LF_ROWS Number of values currently in the index
    LF_ROWS_LEN Sum in bytes of the length of all values
    DEL_LF_ROWS Number of values deleted from the index
    DEL_LF_ROWS_LEN Length of all deleted values

    C、如果浪费超过20%则索引需要重建
    ALTER INDEX acct_no_idx REBUILD;
    D、或者对索引进行整理
    Alter index acct_no_idx coalesce;

    2)标记未使用的索引
    A、 开始监测索引的使用
    Alter index hr.emp_name_ix monitoring usage;
    B、 停止监测索引的使用
    Alter index hr.emp_name_ix nomonitoring usage;
    C、 查询索引的使用情况
    Select index_name,used from v$object_usage;
    删除未使用过的索引,可以降低DML操作的成本,从而提升系统性能。

    为了尽可能经济的利用block,应对存在较多空block、镜像行的表进行重建,对建立不稳定表上的索引应有规律的进行重建,并尽可能创建本地管理的表空间。
分享到:
评论

相关推荐

    试谈Oracle的性能优化(ppt-72页).ppt

    调整PCTFREE和PCTUSED参数,优化数据存储以利于插入、更新和删除操作。同时,了解数据库优化器的工作原理,根据情况选择全表扫描或并行查询。 针对索引的使用,尽量在查询中使用索引,但也要注意索引不起作用的场景...

    Oracle高性能SQL调整

    3. **存储选项调整**:如ROW_FORMAT、PCTFREE、PCTUSED等参数可以调整,以优化空间利用率和性能。 四、性能监控与调优工具 1. **V$视图**:Oracle提供了大量性能监控视图,如V$SESSION、V$SQL、V$BUFFER_CACHE等,...

    实用DB数据库技术笔记

    从“oracle性能调整的十大要点-PCTFREE、PCTUSED”到“oracle性能调整的十大要点-应用优化”,这一系列文章涵盖了Oracle数据库性能调优的各个方面。从内部参数调整到外部环境优化,从数据库结构改进到应用程序逻辑...

    Oracle性能调优.pptx

    遵循一些基本规则,比如避免大表全表扫描,有效利用索引,优化子查询,调整PCTFREE和PCTUSED参数,选择合适的优化器,并考虑并行查询。 - 索引的使用至关重要,但要注意索引在某些情况可能不起作用,如数据类型隐形...

    Oracle性能优化PPT

    优化规则包括避免大表和全表扫描,充分利用索引以加速查询,审查子查询并考虑转换为连接查询,调整存储参数如PCTFREE和PCTUSED,以及根据情况选择合适的优化器和并行查询策略。具体方法中,索引的使用至关重要,应尽...

    Oracle数据库中大型表查询优化研究

    对象调整主要关注存储参数,如Pctfree、Pctused和FreeList。这些参数影响I/O性能,但在这个案例中,对象存储参数未进行调整。 **2.2.1 存储参数** - Pctfree:预留空间,避免行扩展时导致的块分裂。 - Pctused:...

    Oracle的性能优化

    - **SQL语句的优化规则**:避免大表全表扫描、有效利用索引、检查和优化子查询、调整PCTFREE和PCTUSED参数、考虑优化器的选择以及并行查询的应用。 - **SQL语句优化的具体方法**:索引使用是关键,如尽可能使用索引...

    对oracle性能优化多种主要方法的总结

    尽量根据实际需要调整数据表的PCTFREE和PCTUSED参数;大数据表删除用truncate table代替delete。 - **PCTFREE**:控制为将来的行的更新操作保留多少的数据块空间。若行的增加操作较少,可将PCTFREE设为较低的值(5...

    OracleSQL性能优化技巧

    PCTFREE和PCTUSED等存储参数的调整可以优化插入、更新和删除操作。此外,了解数据库优化器的工作原理,考虑全表扫描与并行查询在多CPU环境下的应用,也是优化的重要部分。 在具体方法上,索引的使用策略应尽可能...

    Oracle19c 数据库中行链接与行迁移详解及案例

    内容概要:本文详细介绍了 Oracle19c 数据库中的行链接和行迁移概念,解释了 PCTFREE 和 PCTUSED 参数的作用及其对数据块空间管理的影响。通过具体的示例,说明了行链接和行迁移的发生条件和解决方法。并提供了实际...

    Oracle的性能优化(ppt 72页).pptx

    + 调整PCTFREE和PCTUSED等存储参数优化插入、更新或者删除等操作。 + 考虑数据库的优化器。 + 考虑数据表的全表扫描和在多个CPU的情况下考虑并行查询。 四、SQL语句优化的具体方法 * 索引的使用:尽量使用索引...

    Actual_Oracle 1Z0-043 V11.17.06.pdf

    8. **存储管理**:包括表的存储参数(如PCTFREE,PCTUSED),以及如何通过分区和子分区优化大表的性能。 9. **数据库升级和迁移**:理解从一个Oracle版本升级到另一个版本的流程,以及数据迁移的策略。 在"Actual_...

    Oracle Database 11gR2性能调整与优化

    Oracle Database 11gR2性能调整与优化是数据库管理员和开发人员必须掌握的关键技能,以确保系统的高效运行和最佳响应时间。Oracle 11gR2版本引入了许多新的特性和改进,旨在提升数据库的性能和可管理性。以下是这个...

    ORACLE数据库性能优化

    表和索引的存储参数,如pctfree、pctused、freelists等,这些参数的合理设置可以显著提升数据读写效率,减少数据块分裂和合并的频率。 ##### 服务器、网络及磁盘调整 硬件资源是数据库性能的物理基础。CPU繁忙、...

    Oracle企业DBA性能优化

    遵循一些基本规则可以显著提升查询效率,例如避免大表和全表扫描,充分利用优化索引,优化子查询,调整PCTFREE和PCTUSED存储参数,以及考虑数据库优化器和并行查询。具体方法包括明智地使用索引,避免可能导致索引...

    Oracle Freelist和HWM原理及性能优化

    例如,通过调整初始化参数如PCTUSED和PCTFREE来控制空间的预留和重用,避免频繁的扩展和收缩操作。对于高HWM问题,可以通过定期执行`ALTER TABLE ... SHRINK SPACE`来压缩段,降低HWM,重新整理空间。对于Freelist...

Global site tag (gtag.js) - Google Analytics