Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1851918
  • 博文数量: 524
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2483
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-25 18:36
个人简介

打杂

文章分类

全部博文(524)

文章存档

2022年(3)

2021年(9)

2019年(1)

2018年(32)

2017年(11)

2016年(152)

2015年(198)

2014年(118)

分类: Oracle

2015-03-06 17:38:44

如何为在线的含有千万条记录的表建立索引
(For Oracle Database)
1. 需求描述
为在线生产系统某核心大表建立索引,具体信息描述如下:
数据库: ***DB1(**在线系统)
表 名: INFO_CUSTOMER (按本地网分区,约有 31M 条记录,对原有 PK 做一次 FFS 约为 50 秒)
表使用模式: 客户开户(INSERT 高频) 、更改客户资料(UPDATE 极低频)、其它(SELECT 极高频)
需建立索引的字段: PARENT_CUSTOMER_NO (集团相关客户才有值,90%以上的字段值为 NULL)
需建立的索引类型: GLOBAL B-Tree
2. Oracle 建立索引
在 Oracle 中,为某表建立索引主要涉及以下 I/O:
序号 所用资源描述
RA 对源表加 X 类型表级 DDL 锁.
RB 读取源表数据块的 I/O.
RC 索引键排序,如果内存中容不下,就会分段在磁盘中排序,中间结果临时表空间写 I/O.
RD 写 INDEX DB BLOCK 的 I/O.
RE 更改 INDEX DB BLOCK 产生的 REDO I/O.
3. 最小化操作的影响
从以下几个角度来考虑最小化影响的操作:
n n n 最小化由建立索引引起的 BLOCK:
操作时间选择在业务空闲时(22:00).
使用 Oracle 提供的 Online 选项.
n n n 最小化所需的 I/O:
最小化 RB 的 I/O: 在 CREATE INDEX 之前,让尽可能多的源表进入 buffer cache(使用 CACHE 和
FULL HINT 对源表作 FTS, 让它尽可能地出现在 LRU 的 MRU 一端).
最小化 RC 的 I/O: 设置更大的 SORT_AREA_SIZE(未使用 PGA_AGGREGATE_TARGET).
最小化 RD 的 I/O: 不可能 (使用 COMPRESS 或可以,但因为 parent_customer_no 多为 NULL,所
以,实际上这个值已大为减少).
最小化 RE 的 I/O: 使用 NOLOGGING 子句建立索引.在建立完索引后,再将其改为 LOGGING.
n n n 最大化 I/O 吞吐:
使用 PARALLEL 子句(不会 BLOCK INSERT/UPDATE 操作)
4. 最终的操作步骤
序号 所用资源描述
OA
select /*+ CACHE(A) FULL(A) */ count(*) from info_customer A;
第一次执行耗时约 2 分 40 秒,连续第二次执行只需 55 秒.
此时在 default buffer cache 中有约 2.3G 的数据.
OB alter session set sort_area_size=104857600;
OC
create index idx_info_customer_3 on info_customer(parent_customer_no)
tablespace ***
pctfree 5 initrans 4 maxtrans 255 nologging
storage(initial 104857600)
parallel 4 online;
OD alter index idx_info_customer_3 logging;
OE alter index idx_info_customer_3 parallel 1;
5. 操作日志
>22:09:30 SQL>
>22:09:30 SQL> create index idx_info_customer_3 on info_customer(parent_customer_no)
>22:09:31 2 tablespace ***
>22:09:31 3 pctfree 5 initrans 4 maxtrans 255 nologging
>22:09:31 4 storage(initial 104857600)
>22:09:31 5 parallel 4 online
>22:09:31 6 /
>
>索引已创建。
>
>已用时间: 00: 02: 17.08
>22:11:49 SQL>
>22:11:49 SQL>
By Silver.W 2006 4 11 PM
--------------The End--------------

阅读(2492) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~