zoukankan      html  css  js  c++  java
  • Oracle优化技术

    1、基本原理

    Oracle的日志:Oracle中为了提高硬盘写的效率,採用内存中数据缓冲区来保存数据,等到一定量或一定时间后才写到磁盘(DBWR)。

        这个时候假如断电之类的故障发生,数据缓冲区的数据将丢失。

        所以须要日志来保存记录,它也有个缓冲区,每隔3秒或Commit或满3分之1 都会触发LGWR进程写到REDO文件里(日志文件)。

    回滚:Oracle中採用多版本号控制来进行并发。当写数据时,先把原数据写入UNDO中(回滚表空间)。然后再将原数据的位置改动为新数据。(其他进程读的时候,读回滚表中的数据,这就防止了脏读)。假设Commit了,那就回收回滚表空间。假设回滚了,那就将前镜像读出来覆盖原位置。

        关于回滚的数据的全部操作,都要涉及日志,所以有UNDO就会有大量REDO!

    DML的REDO:假如插入的日志为6(省略单位)(UNDO记录插入记录的rowid)。更新的日志就是7(UNDO记录更新记录的那列的旧字段)。而删除的日志就是32(UNDO记录原整行数据)。

    2、批量插入

    绑定变量:降低SQL的解析。

    批量提交:降低与Oracle的交互。降低IO。

    3、存储机制

    SEGMENT -> 表示一张表。包括多个Extent。
    EXTENT -> 表示扩展的最小单位。当数据增多时,依照一个EXTENT来进行扩充的。包括8个块。
    Block -> 表示一个块,存储的最小单位(8KB)。头,表文件夹,行文件夹,可用空间(空余空间),数据区。

    4、暂时表与分区与聚簇

    暂时表长处:1.高效的删除记录,基于事务的全局暂时表COMMIT或SESSION连接退出后,暂时表记录自己主动删除(产生的记录也要少的多)。
        2.针对不同会话数据独立,不同SESSION訪问看到的结果不同。
    分区:数据的全然独立分离(不同与索引的产生地址)。所以它会产生多个SEGMENT(就是多张表)。
        1.当依据分区字段查询时,能够高效的分区消除。仅仅訪问一部分。
        2.强大的分区操作,truncate删除,数据转移,分区分割,分区合并。
        3.全局索引,仅仅有分区列才干创建全局索引(或前缀)。非常多分区操作会使全局索引失效,必须重建。
        4.局部索引,其他字段就仅仅能构建局部索引。当进行查询时,须要訪问全部分区的局部索引,有时候,反而效率更低(每一个索引基本须要4次IO)。
    聚簇表:仅仅能使用主键索引来约束数据的存放位置(通过organization index)。(默认主键是非聚簇)。长处是查询全部时不须要有回表的操作。缺点是更新开销更大。

    5、索引

    B+树的存储方式。50W条的时候高度为3。这时须要4次IO(包含回表)。
    索引的长处:
        1.COUNT、SUM、AVG。可是注意当有空值时(B树不储存空值),或许开销更大。
        2.MAX、MIN。可是注意不能同一时候使用MAX+MIN。由于这个时候Oracle为了原子性。会全表扫描。
        3.ORDER BY(排序消耗大)、DISTINCT(会排序后消除)、UNION(注意单独的UNION是须要排序去重的)。
        4.组合索引:避免回表。可是注意查询范围时,必须依照组合的前缀顺序来查(等值无所谓)。有等值有范围时,等值在前,范围在后。
        5.位图索引:大量反复,极少更新时建立。

    6、表连接

    1.嵌套连接:用的最多,读出驱动表的全部适合行,然后一个一个拿到被驱动表中去依据连接条件查询(所以为了降低IO,驱动表最好为小的)。所以须要驱动表限制条件有索引,被驱动表连接条件有索引。
    2.哈希连接:读出驱动表建立hash(驱动表小),读出被驱动表来查找hash。不支持大于小于的比較。
    3.排序合并:读出两个表的元素,分别排序,然后归并。两个表的连接条件都要有索引。不支持不等于。


    參考:收获,不止Oracle。

  • 相关阅读:
    js实现截图并下载到本地
    div里面的文本内容居中显示
    div里面的p标签内容上下垂直居中
    《将博客搬至CSDN》
    RobotFramework 用例出错后继续操作
    selenium+log4j+eclipse相关问题及解决方案
    linux 安装maven
    LINUX下查看系统参数的常见命令
    Linux常用命令使用
    grep 命令
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4069685.html
Copyright © 2011-2022 走看看