欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle海量数据加快创建索引速度

程序员文章站 2024-01-14 11:40:22
...

Oracle海量数据加快创建索引速度,数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

基本信息情况:

数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

操作系统版本:CentOS release 5.6

加快创建索引速度主要从一下角度考虑:

  • 使用nologging 参数
  • 使用parallel 并行参数
  • 在session级别使用manual pga,手动调整sort_area_size
  • 修改其他参数
  • 注意:我们这里不手动调整hash_area_size,hash_area_size 默认情况下会自动根据sort_area_size*2来调,导致sort_area_size不能超过1G。所以我们这里直接调整sort_area_size参数。

    这里首先记录pga使用的情况,9i以后查询pga分配和使用可以查询v$pgastat视图。

    对于上面的解释如下

    1 aggregate PGA target parameter 150994944 bytes : pga_aggregate_target
    2 aggregate PGA auto target 93579264 bytes : 剩余的能被工作区使用的内存。
    3 global memory bound 30198784 bytes :单个SQL最大能用到的内存
    4 total PGA inuse 47017984 bytes :正被耗用的pga(包括workare pl/sql等所有占用的pga)
    5 total PGA allocated 56666112 bytes :当前实例已分配的PGA内存总量。
    一般来说,这个值应该小于 PGA_AGGREGATE_TARGET ,
    但是如果进程需求的PGA快速增长,它可以在超过PGA_AGGREGATE_TARGET的限定值
    6 maximum PGA allocated 58632192 bytes :pga曾经扩张到的最大值
    7 total freeable PGA memory 2883584 bytes :可释放的pga
    8 process count 23 :当前process
    9 max processes count 48 :最大时候的process
    10 PGA memory freed back to OS 5177344 bytes
    11 total PGA used for auto workareas 0 bytes :当前auto模式下占用的workara size 大小
    12 maximum PGA used for auto workareas 0 bytes :auto模式下占用的workara size最大 大小
    13 total PGA used for manual workareas 0 bytes :当前manual模式下占用的workara size 大小
    14 maximum PGA used for manual workareas 0 bytes :manual模式下占用的workara size最大 大小
    15 over allocation count 0 :使用量超过pga大小的次数
    16 bytes processed 6438912 bytes :pga使用的字节
    17 extra bytes read/written 0 bytes :向临时段写的字节
    18 cache hit percentage 100 percent :bytes processed/(bytes processed+extra bytes read/written)
    19 recompute count (total) 123

    global memory bound:一个串行操作能用到的最大内存
    =min(5%*pga_aggregate_target,50%*_pga_max_size,_smm_max_size),
    当你修改参数pga_aggregate_target的值时,Oracle系统会根据pga_aggregate_target和_pga_max_size
    这两个值来自动修改参数_smm_max_size。具体修改的规则是:
    如果_pga_max_size大于5%*pga_aggregate_target,则_smm_max_size为5%*pga_aggregate_target。
    如果_pga_max_size小于等于5%*pga_aggregate_target,则_smm_max_size为50%*_pga_max_size。

    total PGA in used:当前正在使用的PGA,可以从v$process的pga_used_mem字段中获取
    select sum(a.PGA_USED_MEM),sum(a.PGA_ALLOC_MEM),sum(a.PGA_MAX_MEM) from v$process a
    v$pgastat 中的 total PGA in used、total PGA allocated、maximum PGA allocated
    这3个值差不多


    在执行创建索引前,我们还要介绍一个视图v$session_longops视图

    其中SID和SERIAL#是与v$session中的匹配的,
    OPNAME:指长时间执行的操作名.如:Table Scan
    TARGET:被操作的object_name. 如:tableA
    TARGET_DESC:描述target的内容
    SOFAR:这个是需要着重去关注的,表示已要完成的工作数,如扫描了多少个块。
    TOTALWORK:指目标对象一共有多少数量(预计)。如块的数量。
    UNITS:
    START_TIME:进程的开始时间
    LAST_UPDATE_TIM:最后一次调用set_session_longops的时间
    TIME_REMAINING: 估计还需要多少时间完成,单位为秒
    ELAPSED_SECONDS:指从开始操作时间到最后更新时间
    CONTEXT:
    MESSAGE:对于操作的完整描述,包括进度和操作内容。
    USERNAME:与v$session中的一样。
    SQL_ADDRESS:关联v$sql
    SQL_HASH_VALUE:关联v$sql
    QCSID:主要是并行查询一起使用。

    更多Oracle相关信息见Oracle 专题页面 ?tid=12

    Oracle海量数据加快创建索引速度