楼主: wabjtam123

[精华] 倾情大奉献--ORACLE+UNIX易错问题集锦

[复制链接]
论坛徽章:
2
技术图书徽章
日期:2021-05-18 08:52:07
61#
发表于 2010-4-11 05:56 | 只看该作者
慢慢拜读

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:06:23优秀写手
日期:2014-02-09 06:00:12
62#
发表于 2010-4-11 09:27 | 只看该作者
看到很多想看的东西,感谢楼主。

使用道具 举报

回复
论坛徽章:
3
祖国60周年纪念徽章
日期:2009-10-09 08:28:002011新春纪念徽章
日期:2011-02-18 11:42:49蜘蛛蛋
日期:2011-11-21 12:43:06
63#
发表于 2010-4-11 10:22 | 只看该作者

谢谢分享

谢谢分享

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:06:23优秀写手
日期:2014-02-09 06:00:12
64#
发表于 2010-4-11 12:02 | 只看该作者
借地方请教楼主几个问题:

在对表insert或者update完成以后oracle是不是已经完成了对相应index结构的更新?

如果是,alter index xx rebuild这个命令在什么场景里使用?貌似这里不用了;

如果不是,在insert或者update表时对index的维护是指什么呢?

使用道具 举报

回复
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
65#
 楼主| 发表于 2010-4-11 12:46 | 只看该作者
原帖由 CaptainKobe 于 2010-4-11 12:02 发表
借地方请教楼主几个问题:

在对表insert或者update完成以后oracle是不是已经完成了对相应index结构的更新?

如果是,alter index xx rebuild这个命令在什么场景里使用?貌似这里不用了;

如果不是,在insert或者update表时对index的维护是指什么呢?




在对表insert或者update完成以后oracle是不是已经完成了对相应index结构的更新?
========> 是的,所以如果某表天天都是INSERT而几乎没有SELECT ,那索引还是不建的好,呵呵,因为要维护这个索引是有代价的:)


如果是,alter index xx rebuild这个命令在什么场景里使用?貌似这里不用了;

========》 alter index xx rebuild可以用在如下两个场合
  1、索引失效后重建让其生效。
  (索引失效的情况还是多见的,比如人为将索引alter inidex xx unusable 为了让插人等更新加快,比如分区表进行truncate 分区的时候导致全局索引失效,等等。。。。)

  2、索引出现碎片,大量空块,rebuild可以整合,让索引的树的高度适当降低下来。。。。

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:06:23优秀写手
日期:2014-02-09 06:00:12
66#
发表于 2010-4-11 13:13 | 只看该作者
原帖由 wabjtam123 于 2010-4-11 12:46 发表




在对表insert或者update完成以后oracle是不是已经完成了对相应index结构的更新?
========> 是的,所以如果某表天天都是INSERT而几乎没有SELECT ,那索引还是不建的好,呵呵,因为要维护这个索引是有代价的:)


如果是,alter index xx rebuild这个命令在什么场景里使用?貌似这里不用了;

========》 alter index xx rebuild可以用在如下两个场合
  1、索引失效后重建让其生效。
  (索引失效的情况还是多见的,比如人为将索引alter inidex xx unusable 为了让插人等更新加快,比如分区表进行truncate 分区的时候导致全局索引失效,等等。。。。)

  2、索引出现碎片,大量空块,rebuild可以整合,让索引的树的高度适当降低下来。。。。


多谢,做几个实验验证一下。

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:06:23优秀写手
日期:2014-02-09 06:00:12
67#
发表于 2010-4-11 13:16 | 只看该作者
呵呵,继续问一下

1. insert之前drop index,完成以后再create index;

2. insert之前把index置为unusable,完成后再rebuild index;

1和2哪个会更快一点?原因是什么?

[ 本帖最后由 CaptainKobe 于 2010-4-11 13:20 编辑 ]

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:06:23优秀写手
日期:2014-02-09 06:00:12
68#
发表于 2010-4-11 13:31 | 只看该作者
试了一下,2用的时间是1的3倍,100w的数据量。

SQL> alter system flush buffer_cache;

System altered

Executed in 0.11 seconds

SQL> exec insert_without_index;

PL/SQL procedure successfully completed

Executed in 23.125 seconds

SQL> alter system flush buffer_cache;

System altered

Executed in 0.672 seconds

SQL> exec insert_with_unusable_index;

PL/SQL procedure successfully completed

Executed in 69.25 seconds

SQL> select * from v$version where rownum = 1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:06:23优秀写手
日期:2014-02-09 06:00:12
69#
发表于 2010-4-11 13:35 | 只看该作者
汗,上面的实验错了,实验2的时候忘记先清空表了。。

100w的数据量下差别可以忽略。

SQL> alter system flush buffer_cache;

System altered

Executed in 0.593 seconds

SQL> exec insert_with_unusable_index;

PL/SQL procedure successfully completed

Executed in 23.687 seconds

SQL> alter system flush buffer_cache;

System altered

Executed in 0.859 seconds

SQL> exec insert_without_index;

PL/SQL procedure successfully completed

Executed in 23.937 seconds

使用道具 举报

回复
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
70#
 楼主| 发表于 2010-4-11 14:34 | 只看该作者
原帖由 CaptainKobe 于 2010-4-11 13:16 发表
呵呵,继续问一下

1. insert之前drop index,完成以后再create index;

2. insert之前把index置为unusable,完成后再rebuild index;

1和2哪个会更快一点?原因是什么?



感觉应该没什么差别,我猜测是索引UNSABLE的时候插入要比没索引慢,但是重建UNSABLE比新CREATE要快,所以差不多,证实果然大致如此,笔记本环境有限,否则我做上亿的记录的测试可能更清楚点,上班的时候实验一下去UNIX服务器构造大数据量比较一下啊,300万记录是否太小了。(如果没啥差别,建议用失效再生效方式,不容易出错:))

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as yxl



SQL> create table test  as select * from dba_objects;
Table created
SQL> insert into test  select * from test;
52596 rows inserted
SQL> insert into test  select * from test;
105192 rows inserted
SQL> insert into test  select * from test;
210384 rows inserted
SQL> insert into test  select * from test;
420768 rows inserted
SQL> insert into test  select * from test;
841536 rows inserted
SQL> insert into test  select * from test;
1683072 rows inserted
SQL> commit;
Commit complete
SQL> create index idx_object_id on test(object_id);
Index created





SQL> create table test2  as select * from test;
Table created
SQL> commit;
SQL> create index idx2_object_id on test2(object_id);
Index created
SQL> purge recyclebin;
Done
SQL> select count(*) from test;
  COUNT(*)
----------
   3366144
SQL> select count(*) from test2;
  COUNT(*)
----------
   3366144


Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as yxl
SQL> set timing on
SQL> drop index idx_object_id ;
Index dropped
Executed in 0.25 seconds
SQL> insert into test select * from test;
3366144 rows inserted
Executed in 69.828 seconds
SQL> create index idx_object_id on test(object_id);
Index created
Executed in 124.375 seconds
0.25 + 69.828 +124.375 =194.453

SQL> alter index idx2_object_id unusable;
Index altered
Executed in 0.063 seconds
SQL> insert into test2 select * from test2;
3366144 rows inserted
Executed in 83.938 seconds
SQL> alter index idx2_object_id rebuild;
Index altered
Executed in 102.719 seconds
0.063 +83.938 + 102.719 =192.72

[ 本帖最后由 wabjtam123 于 2010-4-11 14:39 编辑 ]

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表