Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

29

主题
1#
发表于 2013-1-29 11:19:50 | 查看: 5164| 回复: 17
本帖最后由 张沛 于 2013-1-29 14:56 编辑

一张96万行的表,其中有一列之前是普通的b*数索引,但是我发现这列中只有两类数值y和n,我尝试将原先索引drop掉换成位图索引,但是建索引时报错
  1. create  bitmap index OE_ORDER_LINES_BMAP1 on ONT.OE_ORDER_LINES_ALL (open_flag)
  2.   tablespace APPS_TS_TX_IDX
  3.   pctfree 15
  4.   initrans 11
  5.   maxtrans 255
  6.   storage
  7.   (
  8.     initial 128K
  9.     next 128K
  10.     minextents 1
  11.     maxextents unlimited
  12.     pctincrease 0
  13.   );

复制代码
错误信息
ora-28064 table too fragmented to bulid bitmap index(92406910,40,40)
从报错信息看,是不是我该对这张表进行一下整理了
2#
发表于 2013-1-29 12:31:04
位图索引时create bitmap index的语法。
况且,如果这个表是业务表的话,bitmap索引会对你的dml操作有严重影响。
可以考虑建立复合索引。

回复 只看该作者 道具 举报

3#
发表于 2013-1-29 12:57:24
willing_ox 发表于 2013-1-29 12:31
位图索引时create bitmap index的语法。
况且,如果这个表是业务表的话,bitmap索引会对你的dml操作有严重 ...

感谢您的回复,对dml有影响肯定的,但是原来是b*数,我换成位图应该是更合适了吧?至于复合索引我倒是考虑了就是查询中其他谓语也没有能太减少返回信息的,不太好选列去建复合

回复 只看该作者 道具 举报

4#
发表于 2013-1-29 13:38:12
如果表操作比较频繁,dml较多,会造成hang的。可以根据系统中的其他列和open_flag建立复合索引。
当然,如果表做分区的话,建立成local index也可以,这样做筛选的范围就小多了。

回复 只看该作者 道具 举报

5#
发表于 2013-1-29 13:55:22
willing_ox 发表于 2013-1-29 13:38
如果表操作比较频繁,dml较多,会造成hang的。可以根据系统中的其他列和open_flag建立复合索引。
当然,如 ...

恩,分区我懂,但是数据量我觉得还可以暂时不需要分区,那我看看需求建复合索引吧,感谢感谢

回复 只看该作者 道具 举报

6#
发表于 2013-1-29 14:01:47
90多w,表不算大

回复 只看该作者 道具 举报

7#
发表于 2013-1-29 14:43:56
create  baimap ==>>>>>> 至少拼对吧? create bitmap!!!!!!!!!!!

[oracle@mlab2 ~]$ oerr ora 28064

28604, 00000, "table too fragmented to build bitmap index (%s,%s,%s)"
// *Cause:  The table has one or more blocks that exceed the maximum number
//          of rows expected when creating a bitmap index. This is probably
//          due to deleted rows. The values in the message are:
//          (data block address, slot number found, maximum slot allowed)
// *Action: Defragment the table or block(s). Use the values in the message
//          to determine the FIRST block affected. (There may be others).

analyze table ONT.OE_ORDER_LINES_ALL compute statistics;

select NUM_ROWS, BLOCKS from dba_tables where table_name='OE_ORDER_LINES_ALL';

回复 只看该作者 道具 举报

8#
发表于 2013-1-29 14:57:18
Maclean Liu(刘相兵 发表于 2013-1-29 14:43
create  baimap ==>>>>>> 至少拼对吧? create bitmap!!!!!!!!!!!

[oracle@mlab2 ~]$ oerr ora 28064

不要意思,那个是我手打的打错了,数据库上没打错

回复 只看该作者 道具 举报

9#
发表于 2013-1-29 14:58:17
Maclean Liu(刘相兵 发表于 2013-1-29 14:43
create  baimap ==>>>>>> 至少拼对吧? create bitmap!!!!!!!!!!!

[oracle@mlab2 ~]$ oerr ora 28064

这个返回结果
num_rows       blocks
968864           122441

回复 只看该作者 道具 举报

10#
发表于 2013-2-1 15:54:12
列中只有两类数值y和n, 这类情况下建立B索引和full table scan差别不大,建议不建这个列的索引。位图索引对DML的影响巨大,想必楼主了解这个因素。

回复 只看该作者 道具 举报

11#
发表于 2013-2-1 16:01:17
onmysmile 发表于 2013-2-1 15:54
列中只有两类数值y和n, 这类情况下建立B索引和full table scan差别不大,建议不建这个列的索引。位图索引对 ...

恩,感谢您的回复,确实位图索引将带来的危害我知道,综合下还是不建了,不过我们这是olap的更改操作不是很多主要用于查询,但是考虑各方面还是想想其他方法

回复 只看该作者 道具 举报

12#
发表于 2013-2-4 15:43:41
不建bitmap索引为好

回复 只看该作者 道具 举报

13#
发表于 2013-2-4 15:46:07
张沛 发表于 2013-1-29 14:58
这个返回结果
num_rows       blocks
968864           122441

碎的很严重。 平均每个block8条数据~~~

回复 只看该作者 道具 举报

14#
发表于 2013-2-4 22:11:09
EBS的tbs,看名字好亲切

回复 只看该作者 道具 举报

15#
发表于 2013-2-5 09:02:57
Roger 发表于 2013-2-4 15:46
碎的很严重。 平均每个block8条数据~~~

意思是
  1. select NUM_ROWS, BLOCKS from dba_tables where table_name='OE_ORDER_LINES_ALL';
复制代码
这个返回的结果导致出了问题呗,那这张表是不是像对待高水位线那样重新整理下还是?

回复 只看该作者 道具 举报

16#
发表于 2013-2-5 09:45:03
move一下,在不繁忙的时候,move会造成索引失效,move后,索引需要rebuild

回复 只看该作者 道具 举报

17#
发表于 2013-2-5 10:15:58
willing_ox 发表于 2013-2-5 09:45
move一下,在不繁忙的时候,move会造成索引失效,move后,索引需要rebuild

哦,就是和对高水位线的做法相同呗,谢谢了

回复 只看该作者 道具 举报

18#
发表于 2013-2-6 13:27:55
要不要建索引,还是先确定应用递交的SQL和表中数据分布的情况再做决定吧,如果SQL频繁查询的是Y,而且该值在表中所占比例很低,可以考虑使用索引,如果需要查询的数据较多,那么使用list分区更合适,或者条件允许,可以使用covering index,采用只扫索引的方式来进行优化——如果FTS的性能无法满足客户的话。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 07:00 , Processed in 0.051622 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569