`
johnnyking
  • 浏览: 18379 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

oracle之pctfree与pctused

阅读更多

pctfree:在块上保留多少空间用以以后数据的更新。如果自由空间的百分比高于pctfree的设置,那么这个块就是“自由块”。默认值为10%。

pctused:如果在块上插入数据,然后又经过删除数据,这个时候如果块数据占有块空间的百分比低于pctused,那么这个块就是“自由块”。


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

 

计算公式:

    PCTFREE=(Average Row Size-Initial Row Size)*100/Average Row Size
    PCTUSED=(100-PCTFREE) -Average Row Size * 100/Availabe Data Space

 

 

 

转:

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

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

    3PCTFREEPCTUSED的设定
    • 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
   
其中,updthe average amount added by updates, in bytesThis 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

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

    6MigrationChaining

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

    2)检测migrationchaining
    Analyize table table_name compute statistics
[Page]
    Select num_rows,chain_cnt from dba_tables where table_name=’...’;
   
查询镜像行:

    Analyze 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、镜像行的表进行重建,对建立不稳定表上的索引应有规律的进行重建,并尽可能创建本地管理的表空间。

高PCTFREE,低PCTUSED:如果你插入了将要更新的大量数据,而且这些更新会频繁地增 加行的大小,此时就适合采用这种设置。这种设置在插入后会在块上预留大量的空间(高 PCTFREE),并使得将块放回到freelist 之前必须几乎为空(低PCTUSED)。 q 低PCTFREE,高PCTUSED:如果你只想对表完成INSERT 或DELETE,或者如果你确实要完成 UPDATE,但UPDATE 只是缩小行的大小,此时这种设置就很适合。
分享到:
评论

相关推荐

    oracle与Sql区别

    - Oracle使用PCTFREE和PCTUSED参数控制块的存储情况,减少行连接和行迁移,块大小可自定义,并通过区动态分配空间,表可以分区以优化磁盘利用率。 - SQL Server以8K的页为最小分配单位,8个页组成一个扩展,数据以...

    Oracle中表数据的存储原理浅析.pdf

    当数据块的可用空间比例低于PCTFREE设定的值时,Oracle认为该数据块不再适合插入新数据,除非其占用容量比例下降到PCTUSED的限定值之下。 关于数据行的存储,Oracle使用行片段来处理数据行,特别是当数据行的大小...

    Oracle与SQLserver的区别.docx

    Oracle 使用 pctfree 和 pctused 参数来管理存储空间,以降低数据行连接和迁移的风险,并且可以动态分配区和表空间。SQL Server 则以页为最小分配单位,每个页大小固定为 8KB,并通过扩展来管理空间。 存储结构方面...

    常用的Oracle SQL 语句

    在数据库管理与维护中,掌握一些常用的Oracle SQL语句是非常必要的,它们能够帮助我们高效地解决问题和提高工作效率。下面,我将详细解释文档中提及的几个Oracle SQL语句及其用法。 1. 索引在线更新: Oracle中的...

    Oracle数据库管理与维护大作业.doc

    在该大作业中,我们使用了 storage 参数来优化数据表的存储性能,并使用了 pctfree 和 pctused 参数来优化数据表的存储空间。 6. 数据库管理:包括数据库备份、恢复、性能监控等数据库管理任务。 在该大作业中,...

    bbs论坛项目运用SSH框架Oracle数据库编写的一个简单示列项目

    pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Create/Recreate primary, unique and foreign key constraints alter table USERS ...

    Oracle 45 道面试题及答案.docx

    本文将对Oracle Forms的基本概念、组件、配置文件、报表记录组、LOV、绑定变量、动态SQL、pctused和pctfree参数、表空间和数据文件之间的关系等进行详细的解释和分析。 一、Oracle Forms的基本概念 Oracle Forms是...

    针对oracle的在线重组与优化

    Oracle作为全球领先的数据库管理系统之一,其在线重组与优化技术成为了维持数据库服务标准的重要手段。本文旨在深入探讨Oracle在线重组的概念、必要性以及其实现机制,帮助数据库管理员有效提升数据库的性能与可靠性...

    oracle emp, dept, salgrade 建表语句

    Oracle数据库是世界上最流行的数据库管理系统之一,常用于存储和管理企业级的数据。在Oracle中,创建数据表是构建数据库结构的基础。这里我们详细讨论一下“Oracle emp, dept, salgrade”建表语句及其相关知识点。 ...

    北京邮电大学软件工程研究生的课程---数据库设计开发-4.3

    4.3.1.1 索引与PCTUSED/PCTFREE的关系: 索引的PCTFREE设置需要考虑其初始创建时的空间需求,以便在增加辅助关键字时避免叶块的拆分。PCTUSED对于索引来说不是必需的,因为索引结构相对固定。根据表数据的稳定性来...

    Oracle入门基本知识一点通.docx

    PCTFREE设置空闲空间的最小百分比,PCTUSED设置空间再次分配前的最小空闲百分比,两者之和不能超过100,以保证数据插入和更新的效率。 6. 回滚段与事务:回滚段记录事务的逆向操作,用于回滚未提交的更改。单独事务...

    oracle新手入门指导之一——数据库表空间知识.txt

    ### Oracle新手入门指导之一——数据库表空间知识 #### 数据库表空间基础知识 在Oracle数据库管理中,表空间(Tablespace)是逻辑存储结构中的一个重要概念。表空间由一个或多个数据文件组成,用来存储数据库对象...

    9-Oracle数据库逻辑结构.pptx

    数据块的使用涉及到两种存储参数:PCTFREE 和 PCTUSED。PCTFREE 参数给出保留空间的最小百分比,用于行的 UPDATE 操作。在遭遇到 PCTFREE 后,这块被填满且不能进行 INSERT 操作。PCTUSED 参数当块中数据加上头和...

    3.1 Oracle模式对象(1).ppt

    这些选项如PCTFREE、PCTUSED、INITRANS、MAXTRANS等用于控制表的存储和性能,而TABLESPACE指定了表所在的表空间,AS query则允许使用SQL SELECT语句从现有表中创建新表。 通过这个课程,学习者将掌握如何管理和查询...

    Oracle基础知识第八讲.pptx

    Oracle数据库是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。本讲主要探讨Oracle数据库的存储结构,包括逻辑结构和物理结构,重点介绍数据块、区和段的基本概念及其相互关系。 首先,...

    Effective Oracle By Design

    书中深入解析了这些概念,以及如何通过调整表的存储参数(如PCTFREE、PCTUSED等)来优化空间使用和性能。 4. **查询优化**:查询优化是Oracle数据库性能的关键。书中详细讲解了如何阅读和理解执行计划,以及如何...

    oracle_10g_数据库基础教程课后习题答案择题(中文).pdf

    PCTFREE 与 PCTUSED 之和不应超过 100。数据块的三个部分合称为块头部。 5. 数据库崩溃恢复知识点 当数据库崩溃时,需要使用回滚信息来恢复数据库。在数据库崩溃后,回滚信息用于实例的恢复。Archive log file ...

Global site tag (gtag.js) - Google Analytics