oracle性能调整的十大要点-应用优化

七、应用优化

    1、概念
    为了提高性能,可以使用下列数据访问方法:
    A、Clusters
    B、Indexes
    -B-tree(normal or reverse key)
    -bitmap
    -function-based
    C、Index-organized tables
    D、Materialized views

    索引的层次越多,效率越低,如果索引中含有许多已删除的行,这个索引也会变得低效,如果索引数据的15%已经被删除,应该考虑重建索引。

    2、应用问题
    A、使用可声明的约束而不是通过代码限制
    B、代码共享
    C、使用绑定变量而不是文字来优化共享sql
    D、调整cursor_sharing的值(EXACT/SIMILAR/FORCE)

    八、提升block的效率

    1、避免动态分配的缺陷
    创建本地管理的表空间;
    合理设置segment的大小;
    监控将要扩展的segment:
    SELECT owner, table_name, blocks, empty_blocks FROM dba_tables WHERE empty_blocks / (blocks+empty_blocks) < .1;

    2、high water mark
    记录在segment header block中,在segment创建的时候设定在segment的起始位置,当记录被插入的时候以5个block的增量增加,truncate可以重设high water mark的位置,但delete不能。
    在full table scan中,oracle会读取high water mark以下的所有的数据块,所以high water mark以上的块也许会浪费存储空间,但不会降低性能。

    可以通过下列方法收回表中high water mark以上的块:
    Alter table_name deallocate unused;
    对于high water mark以下的块:
    使用import/export工具:export数据;drop或truncate表;import数据。或者利用alter table tanle_name move命令去移动表的存储位置(此时需要重建索引)。

    3、表统计
    用analyize命令生成表统计,然后到dba_table查询相关信息。
    ANALYZE TABLE ndls.t_wh_shipping_bill COMPUTE STATISTICS;
    SELECT num_rows, blocks, empty_blocks as empty,avg_space, chain_cnt, avg_row_len FROM dba_tables WHERE owner =''NDLS'' AND table_name=''T_WH_SHIPPING_BILL'';

    Columns Description
    NUM_ROWS Number of rows in the table
    BLOCKS Number of blocks below the table high-water mark
    EMPTY_BLOCKS Number of blocks above the table high-water mark
    AVG_SPACE Average free space in bytes in the blocks below high-water mark
    AVG_ROW_LEN Average row length, including row overhead
    CHAIN_CNT Number of chained or migrated rows in the table

    4、block size
    通过下列方法可以最小化block的访问次数:
    使用更大的block size;紧密压缩行;阻止行镜像。后两者存在冲突,越多的行被压缩在一个block里,越容易产生镜像。Block size 在数据库创建的时候设定,不能被轻易改变,是读取数据文件时最小的IO单元,大小范围是2K-64K,应该设置成OS块的整数倍,小于或等于OS IO时能读取的存储区域。

    较小的block size的优点:极少block竞争;有利于较小的行和随机访问。缺点是存在相当高的成本,每个block的行数更少,可能需要读取更多的index块。Block size的选择影响系统的性能,在一个OLTP环境中,较小的block size更合适,而在DSS环境中,适宜选择较大的block size。

你可能感兴趣的:(oracle,sql,C++,c,OS)