eygle.com   eygle.com
eygle.com  
 

« October 2005 | Blog首页 | December 2005 »

1 2 3 4 5 下一页


November 30, 2005

Oracle HowTo:如何Shrink Undo表空间,释放过度占用的空间

作者:eygle

出处:http://blog.eygle.com

环境:
OS:Red Hat Enterprise Linux AS release 4 (Nahant)
DB:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

一台Oracle10gR2数据库报出如下错误:

ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in  tablespace SYSAUX 
ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in  tablespace SYSAUX 
ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in  tablespace SYSAUX 
ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in  tablespace SYSAUX 
ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in  tablespace SYSAUX

登陆检查,发现是SYSAUX表空间空间用尽,不能扩展,尝试手工扩展SYSAUX表空间:
alter database datafile '+ORADG/danaly/datafile/sysaux.266.600173881' resize 800m
Tue Nov 29 23:31:38 2005
ORA-1237 signalled during: alter database datafile '+ORADG/danaly/datafile/sysaux.266.600173881' resize 800m...

出现ORA-1237错误,提示空间不足。这时候我才认识到是磁盘空间可能被用完了.

是谁"偷偷的"用了那么多空间呢(本来有几十个G的Free磁盘空间的)?
检查数据库表空间占用空间情况:
SQL> select tablespace_name,sum(bytes)/1024/1024/1024 GB
  2  from dba_data_files group by tablespace_name
  3  union all
  4  select tablespace_name,sum(bytes)/1024/1024/1024 GB
  5  from dba_temp_files group by tablespace_name order by GB;

TABLESPACE_NAME                        GB
------------------------------ ----------
USERS                          .004882813
UNDOTBS2                        .09765625
SYSTEM                         .478515625
SYSAUX                         .634765625
WAPCM_TS_VISIT_DETAIL            .9765625
HY_DS_DEFAULT                           1
MINT_TS_DEFAULT                         1
MMS_TS_DATA2                        1.375
MMS_IDX_SJH                             2
MMS_TS_DEFAULT                          2
IVRCN_TS_DATA                           2

TABLESPACE_NAME                        GB
------------------------------ ----------
MMS_TS_DATA1                            2
CM_TS_DEFAULT                           5
TEMP                           20.5498047
UNDOTBS1                       27.1582031

15 rows selected.

不幸的发现,UNDO表空间已经扩展至27G,而TEMP表空间也扩展至20G,这2个表空间加起来占用了47G的磁盘空间,导致了空间不足。
显然曾经有大事务占用了大量的UNDO表空间和Temp表空间,Oracle的AUM(Auto Undo Management)从出生以来就经常出现只扩展,不收缩(shrink)的情况(通常我们可以设置足够的UNDO表空间大小,然后取消其自动扩展属性).
现在我们可以采用如下步骤回收UNDO空间:

1.确认文件
SQL> select file_name,bytes/1024/1024 from dba_data_files
  2  where tablespace_name like 'UNDOTBS1';

FILE_NAME
--------------------------------------------------------------------------------
BYTES/1024/1024
---------------
+ORADG/danaly/datafile/undotbs1.265.600173875
          27810

2.检查UNDO Segment状态
SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
  2  from v$rollstat order by rssize;

       USN      XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024    SHRINKS
---------- ---------- --------------------- ---------------------- ----------
         0          0            .000358582             .000358582          0
         2          0            .071517944             .071517944          0
         3          0             .13722229              .13722229          0
         9          0            .236984253             .236984253          0
        10          0            .625144958             .625144958          0
         5          1            1.22946167             1.22946167          0
         8          0            1.27175903             1.27175903          0
         4          1            1.27895355             1.27895355          0
         7          0            1.56770325             1.56770325          0
         1          0            2.02474976             2.02474976          0
         6          0             2.9671936              2.9671936          0

11 rows selected.

3.创建新的UNDO表空间
SQL> create undo tablespace undotbs2;

Tablespace created.

4.切换UNDO表空间为新的UNDO表空间
SQL> alter system set undo_tablespace=undotbs2 scope=both;

System altered.

此处使用spfile需要注意,以前曾经记录过这样一个案例:Oracle诊断案例-Spfile案例一则
5.等待原UNDO表空间所有UNDO SEGMENT OFFLINE
SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
  2 from v$rollstat order by rssize;


       USN      XACTS STATUS          RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024    SHRINKS
---------- ---------- --------------- --------------------- ---------------------- ----------
        14          0 ONLINE                     .000114441             .000114441          0
        19          0 ONLINE                     .000114441             .000114441          0
        11          0 ONLINE                     .000114441             .000114441          0
        12          0 ONLINE                     .000114441             .000114441          0
        13          0 ONLINE                     .000114441             .000114441          0
        20          0 ONLINE                     .000114441             .000114441          0
        15          1 ONLINE                     .000114441             .000114441          0
        16          0 ONLINE                     .000114441             .000114441          0
        17          0 ONLINE                     .000114441             .000114441          0
        18          0 ONLINE                     .000114441             .000114441          0
         0          0 ONLINE                     .000358582             .000358582          0

       USN      XACTS STATUS          RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024    SHRINKS
---------- ---------- --------------- --------------------- ---------------------- ----------
         6          0 PENDING OFFLINE             2.9671936              2.9671936          0

12 rows selected.

再看:
11:32:11 SQL> /

       USN      XACTS STATUS          RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024    SHRINKS
---------- ---------- --------------- --------------------- ---------------------- ----------
        15          1 ONLINE                     .000114441             .000114441          0
        11          0 ONLINE                     .000114441             .000114441          0
        12          0 ONLINE                     .000114441             .000114441          0
        13          0 ONLINE                     .000114441             .000114441          0
        14          0 ONLINE                     .000114441             .000114441          0
        20          0 ONLINE                     .000114441             .000114441          0
        16          0 ONLINE                     .000114441             .000114441          0
        17          0 ONLINE                     .000114441             .000114441          0
        18          0 ONLINE                     .000114441             .000114441          0
        19          0 ONLINE                     .000114441             .000114441          0
         0          0 ONLINE                     .000358582             .000358582          0

11 rows selected.

Elapsed: 00:00:00.00

6.删除原UNDO表空间
11:34:00 SQL> drop tablespace undotbs1 including contents;

Tablespace dropped.

Elapsed: 00:00:03.13

7.检查空间情况
由于我使用的ASM管理,可以使用10gR2提供的信工具asmcmd来察看空间占用情况.
[oracle@danaly ~]$ export ORACLE_SID=+ASM
[oracle@danaly ~]$ asmcmd
ASMCMD> du 
Used_MB      Mirror_used_MB
  21625               21625
ASMCMD> exit

空间已经释放。

Posted by eygle at 11:28 AM | Comments (12)


November 29, 2005

One Story About Love

作者:eygle

出处:http://blog.eygle.com

今天讲一个故事吧.

从前呢

有两只兔子

一只大的,一只小的

有一天,哦,差点忘了.

大兔子是男人

小兔子是女人

它们是一对的

就是雌雄傍地走,安能辨我雌雄那种

大兔子哄小兔子睡觉,小兔子睁着眼睛问大兔子:“大兔子, 你知道我爱你有多深吗?”
大兔子想了想说:“不知道呢,你说说看。”
小兔子:有我身高那么深。
大兔子想了想:那我爱你,有我身高那么深。
小兔子:可是呢,我爱你,有我跳起来高那么深。
大兔子也跳了一下:那我爱你有那么深。
小兔子:我爱你有到了小河边那么深。
大兔子摸摸小兔子的头:我爱你有过了小河,再翻过那座小山那么深。
小兔子急了:我爱你有到月亮那么远那么深。
大兔子摸着小兔子的皮毛,轻轻地说:好了,睡吧,乖,我爱你。
小兔子睡了,大兔子心里想:傻宝宝,我爱你有到了月亮再返回来那么深。
。。。。。。
大兔子跟小兔子的故事,不是那么结束的,大兔子走了,从此没有人在夜里给小兔子讲故事。也不会有人版大兔子小兔子的故事,也不会有大肚橙,大接吻鱼和小接吻鱼的故事。

所有童话生于爱情,死与幻灭。

Posted by eygle at 10:46 PM | Comments (6)


November 28, 2005

Tools:Windows Service Install/Remove Wizard

作者:eygle

出处:http://blog.eygle.com

在windows上,特别是在多次安装和删除了Oracle以后,可能你会在服务里看到很多多余的Service存在。
当然我们可以通过删除注册表或其他一些手段来清理这些服务,但是可能稍嫌复杂。

实际上微软提供过一个小工具:Windows Service Install/Remove Wizard,可以用于安装/移除一个服务。

wizard

一步一步操作很简单易用,且极其小巧。
这个工具来自Windows Resource Kit包,你也可以从以下本站链接下载:
Download file

Posted by eygle at 8:54 PM | Comments (3)


November 26, 2005

Itpub "Oracle Performance Tuning" WorkShop

作者:eygle

出处:http://blog.eygle.com

1.今天是北京此次Oracle Performance Tuning培训的第一天,还是有几个熟悉的面孔,通过培训已经结识了不知道多少个朋友:)

2.人很多,有30多个人,教室里已经座无虚席,也许是Pub很久没有开课的原因,大家都聚集到这一次来.

3.中午一起吃饭的四个人,居然都是SP行业里面的.也许这个行业最大的贡献是为社会提供了更多的就业机会.

4.很久没讲课,一天下来很辛苦,想早早睡觉了...

5.感谢大家对于ITPUB已经我个人的支持

Posted by eygle at 7:51 PM | Comments (0)


November 25, 2005

Oracle HowTo:如何在Linux上扩展SGA超过1.7G

作者:eygle

出处:http://blog.eygle.com

今天一台Linux服务器扩展了一下内存,达到4G,开发的人自己修改了一下SGA结果数据库无法启动了.
启动不了时,出的错误是这个样子的:
[oracle@neirong oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Fri Nov 25 15:43:26 2005
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-27123: unable to attach to shared memory segment
Linux Error: 22: Invalid argument
Additional information: 1
Additional information: 458753
SQL> exit
Disconnected


在32位平台上,缺省的SGA最大只能扩展到1.7G,如果需要支持更大的内存,就需要降低mapped_base,重新Link Oracle软件.
俺的平台为:
[oracle@neirong bdump]$ cat /etc/redhat-release
            Red Hat Enterprise Linux AS release 3 (Taroon Update 2)

简单操作如下:
cd $ORACLE_HOME/rdbms/lib
cp ksms.s ksms.s.bak ( if u have a ksms.s file)
genksms -s 0x12000000 > ksms.s
make -f ins_rdbms.mk ksms.o
make -f ins_rdbms.mk ioracle

此处先备份ksms.s文件,如果编译过程中出现错误,保证操作可以被恢复:
恢复步骤大致如下:
cd $ORACLE_HOME/rdbms/lib
cp ksms.s.bak ksms.s (if u have backup ksms.s file)
genksms > ksms.s
make -f ins_rdbms.mk ksms.o
make -f ins_rdbms.mk ioracle
以下是操作日志:
[oracle@neirong dbs]$ cd $ORACLE_HOME/rdbms/lib
            [oracle@neirong lib]$ genksms -s 0x12000000 > ksms.s
            [oracle@neirong lib]$ make -f ins_rdbms.mk ksms.o
            [oracle@neirong lib]$ make -f ins_rdbms.mk ioracle
            - Linking Oracle
            rm -f /opt/oracle/product/9.2.0/rdbms/lib/oracle
            gcc  -o /opt/oracle/product/9.2.0/rdbms/lib/oracle -L/opt/oracle/product/9.2.0/rdbms/lib/
            -L/opt/oracle/product/9.2.0/lib/ -L/opt/oracle/product/9.2.0/lib/stubs/
            -Wl,-E `test -f /opt/oracle/product/9.2.0/rdbms/lib/skgaioi.o && echo
            /opt/oracle/product/9.2.0/rdbms/lib/skgaioi.o` /opt/oracle/product/9.2.0/rdbms/lib/opimai.o
            /opt/oracle/product/9.2.0/rdbms/lib/ssoraed.o /opt/oracle/product/9.2.0/rdbms/lib/ttcsoi.o
            /opt/oracle/product/9.2.0/lib/nautab.o /opt/oracle/product/9.2.0/lib/naeet.o
            /opt/oracle/product/9.2.0/lib/naect.o /opt/oracle/product/9.2.0/lib/naedhs.o
            /opt/oracle/product/9.2.0/rdbms/lib/config.o  -lserver9 -lodm9 -lskgxp9 -lskgxn9 -lclient9
            -lvsn9 -lwtcserver9 -lcommon9 -lgeneric9 /opt/oracle/product/9.2.0/rdbms/lib/defopt.o
            -lknlopt `if /usr/bin/ar tv /opt/oracle/product/9.2.0/rdbms/lib/libknlopt.a | grep
            xsyeolap.o > /dev/null 2>&1 ; then echo "-loraolap9" ; fi`
            -lslax9 -lpls9  -lplp9 -lserver9 -lclient9  -lvsn9 -lwtcserver9 -lcommon9 -lgeneric9
            -lknlopt -lslax9 -lpls9  -lplp9 -ljox9 -lserver9 -locijdbcst9 -lwwg9
            `cat /opt/oracle/product/9.2.0/lib/ldflags`    -lnsslb9 -lncrypt9 -lnsgr9 -lnzjs9
            -ln9 -lnl9 -lnro9 `cat /opt/oracle/product/9.2.0/lib/ldflags`    -lnsslb9 -lncrypt9
            ......
            mv -f /opt/oracle/product/9.2.0/bin/oracle /opt/oracle/product/9.2.0/bin/oracleO
            mv /opt/oracle/product/9.2.0/rdbms/lib/oracle /opt/oracle/product/9.2.0/bin/oracle
            chmod 6751 /opt/oracle/product/9.2.0/bin/oracle

此后数据库可以以超过1.7G的SGA区设置启动:
            SQL> startup
            ORACLE instance started.
            Total System Global Area 2685476820 bytes
            Fixed Size                   454612 bytes
            Variable Size            1073741824 bytes
            Database Buffers         1610612736 bytes
            Redo Buffers                 667648 bytes
            Database mounted.
            Database opened.
            

Posted by eygle at 5:06 PM | Comments (5)


November 24, 2005

绿色的飞跃 SUN公司的新产品发布会

作者:eygle

出处:http://blog.eygle.com

SUNT1.jpg
昨天刚刚提到UltraSparc T1处理器 SUN的新起点,今天就收到SUN的注册邀请函:
 

又值硕果累累的金秋时节,Sun公司再一次载满丰硕的技术成果,为您奉上“绿色的飞跃 -- Sun公司突破科技创新,缔造IT环保时代的全线新产品发布会”,隆重展现其在网络计算上的又一个重要里程碑。

 ...如何让客户不断提高网络计算的优势性能与获利,更是 Sun 公司多年来一直追求的目标。如今,IT技术的“绿色时代”正昂首阔步地向我们挺进!...

  本次发布会上,Sun 公司将向您介绍基于领先世界的海量吞吐多线程“CoolThreads”芯片所设计的最新UltraSPARC服务器,其革命性的性能价格比与“绿色”节能创新都是业界的创举。由Sun公司创始人之一所设计的基于AMD Opteron 64位处理器的系列服务器,更赋予了俗称行业标准的服务器以一个全新的定义,可最优化地运行所有x86领域的操作系统。而UltraSPARC IV+芯片的优异性能与兼容性,实现了对客户的最佳投资保护,可以用相同的成本,在不间断业务营运的情况下,瞬间成倍地提升数据中心性能。....

有意前往的朋友可以在以下网站进行报名:http://cn.sun.com/event/NC05Q4/.

届时让我们一睹SUN的新技术风采.

Posted by eygle at 11:03 AM | Comments (1)


November 23, 2005

UltraSparc T1处理器 SUN的新起点

作者:eygle

出处:http://blog.eygle.com

UltraSPARCT1.jpg今天在网上看到一则关于SUN的消息,其基于CoolThreads技术的UltraSparc T1即将推出,SUN对这一处理器充满信心并寄予厚望。
在心里一直对SUN是有偏爱的,这几年一直在大量使用SUN的主机,SUN与Oracle的兼容性远远优于IBM、HP。希望SUN的路能走得更远,能在这一市场上继续同IBM,HP竞争下去。

  2005年11月14日,Sun Microsystems公司宣布推出UltraSPARC T1处理器,其原来的编码名称为“Niagara”(尼亚加拉)。在今年12月6日Sun的季度网络计算会议上,Sun可能会推出基于该处理器的系统。

UltraSPARCT12.jpg  UltraSparc T1主频1.2GHz,最大功耗72W,远低于Intel双核Xeon的135W和AMD双核Opteron的95W。UltraSparc T1拥有八个处理核心,每核心均可同时处理四个线程。SUN将CMT(chip multi-threading,芯片多线程)技术称为“CoolThreads”,并已经为此申请了名为CoolThreads的专利。

  《Discover Magazine》2005年8月号曾有一段充满诗意的描述:这一突破性芯片采用了具有专利权的CoolThreads芯片多线程技术,并充分发挥世界上最先进的操作系统 Solaris 10 的多线程特性,成为世界上第一个“绿色经济型”处理器:研究显示,UltraSPARC T1处理器的性能可以使全球的Web服务器的数目减半,大幅度地削减能源需求,这与多植了100万英亩的树木以减少二氧化碳的排放量有同样的效果。

自从互联网时代蓬勃发展以来,Sun作为第三大服务器制造商就一直没有找到状态,目前公司已经被惠普和IBM远远的抛在了身后。在今年第二季度中,Sun全球范围服务器产品营收下滑了5.3%,仅仅为13.7亿美元。与此同时,IBM和惠普分别增长了4.1%和11.5%。希望这一款处理器能够拯救SUN于危难之中.

Posted by eygle at 3:36 PM


November 22, 2005

为了社会的和谐 请大家注意安全

作者:eygle

出处:http://blog.eygle.com

前几天,签批了一个特殊的报废申请,那位同事大约是这样写的:

11月x日晚19:30分左右,下班后行走至广州天河...附近,遭遇摩托车洗劫,被抢笔记本一个,手机一部,现金若干...
奋起直追,没能追上.

后面还附了一份复印的报案记录.

首先我们想说的是,这种情况,就不要奋起直追了,安全第一.
然后在资产处理上,公司没有针对相关情况的规定,讨论了一下,最后特例予以报废处理,财务是需要处置这笔损失的(别的公司呢?类似情况如何处理?).

忽然想到了前几天收到一个朋友转发的邮件,内容是IBM 公司最新的出差安全守则.
其中很多都是金玉之言,转录在这里,供大家参考,同时提醒大家,年底来到,一定要注意安全:

IBM 公司最新的出差安全守则

敬爱的员工们,

防患临街抢夺和偷窃财物这样的犯罪行已经成为了每一位员工必须正视的安全问题,在广州、深圳和乌鲁木齐已有类似案例发生在我们员工身上。为了您自身的安全和所携带物品的安全,当您前往案发率较高的城市出差时,请随时保持高度的警惕性。

为了使您避免成为类似案件的受害者,当您出差之前,务必阅读下列的安全提示。并且在出差途中务必遵守下列安全提示的内容:

您的安全由整理行装那一刻开始

若非必要,请不要携带笔记本电脑外出
当您在案发率高的地区出差时,尽量使自己低调一些,避免使用单肩的印有IBM Logo的手提电脑包携带您的笔记本电脑,最好使用双肩的休闲背包或者袋子,使人看上去不太引人注目
若非必要,避免携带过多的现金和贵重物品
请不要将手机挂在脖子上或别在腰部等显而易见的部位,因为这样会导致您成为犯罪份子的作案对象

户外
外出时,请不要佩带您的IBM胸卡
当您要外出时,尽可能的提前安排汽车接送服务。这样能通过减少你暴露在街道的时间从而降低您受害的风险
尽可能的结伴同行

请不要沿着一些能令摩托车轻易接近您的道路旁行走,尽量避免在黑暗和僻静的地方行走,时刻关注您身边环境的变化,特别是当有陌生人接近你时
请不要在街上边走边用手机聊天,因为这样会分散您的注意力和警惕性

当您走近一些街上的陌生人时,包括地摊小贩和行乞者以及宣传单派送人员,请不要停留或驻足聊天

当您面临危险时,请勿与罪犯抵抗。
放弃你的贵重物品,须知您的钱财远不及您的生命来得重要

在乘坐公共交通工具时,如巴士/地铁/计程车,请勿站在靠近车门位置用手机聊天

请时刻注意您周围的一些可疑活动
请尽量不要随着人流争强座位。当您全神贯注于争强最后一个座位时,您不会容易感觉到您的包已经被打开、随身物品已被窃。站着总好过成为一个受害者
请勿将您的贵重物品(特别是手提电脑)放置在行李架上,全程留意和关注你的贵重物品的去向

当您自驾车或者乘坐计程车出差时,切记要保持车门上锁,把车窗摇起至顶点并把贵重物品放置在不容易被看见的地方
一般的作案手法是,犯罪份子在您行车缓慢又或因交通堵塞而停在路上时,通过没锁上的车门或车窗,下手抢夺车上的财物

在机场时
在办理登机或离开手续之时,请时刻关注和留意您所携带物品的去向请直接前往机场的安全区,例如登机门
机场的失窃案件往往发生在一瞬间,经常发生在当您将物品放置在地面之时、打电话之时、使用ATM机之时、或在物品安全检查处时,所以请保持高度警惕

在酒店时
当您办理入住登记或离开手续时,请密切关注您所携带物品的去向酒店内的失窃案件往往发生在一瞬间,当您将物品放置在前台的地面、大堂休息处、餐馆或者酒吧时,请保持高度警惕
请使用酒店的保险柜去保护您的手提电脑和贵重物品,例如现金、护照等
请保持您的房门始终上好保险锁。当有访客敲门时,请使用保险锁开门,并确认访客身份
请在大堂会见您的来访者,尽量避免在房间会客
酒店的洗手间属于公共区域,每个人都可以自由进入。当您带着手提电脑和贵重物品进入洗手间时,请密切留意身边的陌生人,尤其是当洗手间位于一个比较隐蔽的角落

当您不幸成为受害者,请立即向当地警方和IBM安全人员报案

Posted by eygle at 10:25 PM | Comments (8)


体验微软live免费邮局服务

作者:eygle

出处:http://blog.eygle.com

近日,微软通过新推出的live.com网站开始提供免费邮局服务.
只要我们拥有自己的域名,就可以通过在domains.live.com进行简单的设置获得以自己域名为后缀的免费邮局。

整个注册过程有三个步骤:
第一步输入你想要登记的域名
第二个步骤需要确定你的管理邮箱
第三个步骤是进行配置,在你的域名提供商出添加MX记录.
验证成功之后就完成了注册.
验证成功的界面

这里发现微软的网页还存在很多问题,经常在跳转时无法成功sign in.
第一次试的时候根本无法进入第三个步骤,等一段时间才再恢复正常.

完成以上步骤之后,就可以添加以你的域名为后缀的邮箱了.
这个邮件服务基于Hotmail免费邮箱的服务平台,可以为每个域名创建最多20个邮箱。

我创建的第一个邮箱自然就是eygle#eygle.com
添加邮箱...

Posted by eygle at 7:57 PM | Comments (0)


November 19, 2005

Oracle初学者入门指南-索引是干什么用的?

作者:eygle

出处:http://blog.eygle.com

关于索引是什么的最简单的比喻是,索引之于表数据如同目录之于一本书。
通过目录的页码我们可以快速的定位一个内容,同样通过索引记录的rowid我们可以快速的定位一条数据。

如同目录很难针对书中每个字词一样,索引也很难针对所有字段。
我们通常索引最能代表章节,记录属性的内容。
索引并非总能带来性能提升,但是通常情况下,索引能加快访问,所以建表的时候,你一定要知道还有索引这样一类对象。

下面这个案例是我们绝对不应该和不想看到的。

今天一个部门报数据库巨慢无比,上去看了一下,抓到如下的SQL:
SQL> select sql_text
  2  from v$sqltext a
  3  where a.hash_value = (
  4  select sql_hash_value from v$session b
  5  where b.sid='&sid'
  6  )
  7  order by piece asc
  8  /

SQL_TEXT
----------------------------------------------------------------
select * from i_cm_power t WHERE T.SJH='13911xxxxx6'

检查了一下该查询访问的数据表,居然一个索引都没有:
SQL> select index_name from dba_indexes where table_name=upper('i_cm_power');

INDEX_NAME
------------------------------

没有索引意味着,即使为了获取这一条记录,Oracle也必须对5.28G的一个表进行全表扫描,如果不慢那就怪了:
SQL> col segment_name for a20
SQL> select segment_name,bytes/1024/1024/1024 
     from dba_segments where segment_name=upper('i_cm_power');

SEGMENT_NAME         BYTES/1024/1024/1024
-------------------- --------------------
I_CM_POWER                  5.28173828125

创建一个索引再说:
SQL> create index idx_i_cm_power_sjh on i_cm_power(sjh);

Index created.

Elapsed: 00:20:50.73

SQL> col segment_name for a20
SQL> select segment_name,bytes/1024/1024 MB 
  2  from dba_segments where segment_name=upper('idx_i_cm_power_sjh');

SEGMENT_NAME                 MB
-------------------- ----------
IDX_I_CM_POWER_SJH         1360

SQL> 

无疑这个索引对于这样的简单查询是大有益处的:
SQL> select * from i_cm_power t WHERE T.SJH='13911xxxxx6';

Elapsed: 00:00:00.07

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'I_CM_POWER'
   2    1     INDEX (RANGE SCAN) OF 'IDX_I_CM_POWER_SJH' (NON-UNIQUE)


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
       1022  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          2  rows processed

然而在实际中,你需要考虑更多的因素。
增加索引会占用更多的存储空间;索引的维护会增加数据库的负担,如果有海量的数据加载,可能会极大影响性能...

所以事实可能总是比你想象的更复杂,你只有知道的更多...

Posted by eygle at 9:53 AM | Comments (3)


1 2 3 4 5 下一页


CopyRight © 2004-2008 eygle.com, All rights reserved.