莫相离 发表于 2015-1-16 22:44:30

MYSQL编程:在Oracle9i中,怎样监督索引并扫除监督信...

使用DBaaS能让收入损失从其他业务上得到弥补,如软件更新和硬件管理。也许决定走DBaaS之路的客户可能会跳过解决方案提供商,尽管这个决策看起来有点短视。oracle|索引
关于DML操纵来讲,索引关于数据库是一本性能包袱.假如索引没有被无效的利用,那末其存在性就值得重新思索.1.从Oracle9i入手下手,Oracle同意你监督索引的利用:

SQL>connectscott/tiger@connerConnectedtoOracle9iEnterpriseEditionRelease9.2.0.4.0ConnectedasscottSQL>selectindex_namefromuser_indexes;INDEX_NAME------------------------------PK_DEPTPK_EMP入手下手监督pk_dept索引:SQL>alterindexpk_deptmonitoringusage;Indexaltered在此过程当中,假如查询利用索引,将会纪录上去:SQL>select*fromdeptwheredeptno=10;DEPTNODNAMELOC---------------------------------10ACCOUNTINGNEWYORK中断监督:SQL>alterindexpk_deptnomonitoringusage;Indexaltered查询索引利用情形,YES暗示在监督过程当中索引被利用到:SQL>select*fromv$object_usage;INDEX_NAMETABLE_NAMEMONITORINGUSEDSTART_MONITORINGEND_MONITORING---------------------------------------------------------------------------------------PK_DEPTDEPTNOYES10/28/200410:55:1910/28/200410:55:47SQL>

2.Oracle9i的Bug

在9205之前,假如你失慎监控了SYS.I_OBJAUTH1索引,而且不幸在重起数据库之前没有中断它,那末你的数据库将会没法启动,而且不会给出任何毛病信息。

以下这条复杂的语句能够容易再现这个成绩:

ALTERINDEXSYS.I_OBJAUTH1MONITORINGUSAGE

假如你有了充足好的备份(严峻告诫,请不要拿你的临盆数据库举行测试),你能够实验一下:

$sqlplus"/assysdba"

SQL*Plus:Release9.2.0.4.0-ProductiononSatDec410:09:302004

Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.

Connectedto:Oracle9iEnterpriseEditionRelease9.2.0.4.0-ProductionWiththePartitioningoptionJServerRelease9.2.0.4.0-Production

SQL>alterindexSYS.I_OBJAUTH1monitoringusage;

Indexaltered.

SQL>shutdownimmediate;Databaseclosed.Databasedismounted.ORACLEinstanceshutdown.SQL>startupORACLEinstancestarted.

TotalSystemGlobalArea80811208bytesFixedSize451784bytesVariableSize37748736bytesDatabaseBuffers41943040bytesRedoBuffers667648bytesDatabasemounted.



此时,数据库挂起,并且不会有任何提醒,在alert<sid>.log文件中,你能够看到:

$tail-falert_conner.logCompleted:ALTERDATABASEMOUNTSatDec410:09:492004ALTERDATABASEOPENSatDec410:09:492004LGWR:PrimarydatabaseisinCLUSTERCONSISTENTmodeThread1openedatlogsequence54Currentlog#2seq#54mem#0:/opt/oracle/oradata/conner/redo02.logSuccessfulopenofredothread1.SatDec410:09:492004SMON:enablingcacherecoverySatDec410:10:332004RestartingdeadbackgroundprocessQMN0QMN0startedwithpid=9



然后数据库将会停在此处。

假如不晓得此bug存在,你大概会束手无策的。

如今你能做的就是从备份中恢复,大概晋级到9.2.0.5。

Oracle已Release了这个Bug,你能够参考Metalink:Note:2934068.8,Oracle声明在9.2.0.5(ServerPatchSet)和10gProductionBaseRelease中fixed了这个Bug。

$rm-rfconner$cp-Rconnerbak/conner$sqlplus/assysdba

SQL*Plus:Release9.2.0.4.0-ProductiononSatDec410:19:072004

Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.

Connectedtoanidleinstance.

SQL>startupORACLEinstancestarted.

TotalSystemGlobalArea80811208bytesFixedSize451784bytesVariableSize37748736bytesDatabaseBuffers41943040bytesRedoBuffers667648bytesDatabasemounted.Databaseopened.SQL>



3.在特别的情形下,你大概必要扫除这个v$object_usage视图中的信息.

Oracle的说法是,鄙人一次搜集该工具的索引利用情形时会主动掩盖上一次的信息,不供应扫除手腕.

略微研讨了一下.

v$object_usage是基于以下基表创建起来的:

createorreplaceviewv$object_usage(index_name,table_name,monitoring,used,start_monitoring,end_monitoring)asselectio.name,t.name,decode(bitand(i.flags,65536),0,NO,YES),decode(bitand(ou.flags,1),0,NO,YES),ou.start_monitoring,ou.end_monitoringfromsys.obj$io,sys.obj$t,sys.ind$i,sys.object_usageouwhereio.owner#=userenv(SCHEMAID)andi.obj#=ou.obj#andio.obj#=ou.obj#andt.obj#=i.bo#/



注重到v$object_usage关头信息来历于OBJECT_USAGE表.别的我们能够注重一下,此处v$object_usage的查询基于userenv(SCHEMAID)创建.以是以分歧用户登录,你是没法看到其他用户的索引监督信息的,即便是dba,可是能够从object_usage表中失掉.



SQL>select*fromv$object_usage;INDEX_NAMETABLE_NAMEMONUSESTART_MONITORINGEND_MONITORING--------------------------------------------------------------------------------------------------------PK_DEPTDEPTNOYES10/28/200410:55:1910/28/200410:55:47SQL>select*fromobject_usage;select*fromobject_usage*ERRORatline1:ORA-00942:tableorviewdoesnotexistSQL>connect/assysdbaConnected.SQL>/OBJ#FLAGSSTART_MONITORINGEND_MONITORING----------------------------------------------------------6288110/28/200410:55:1910/28/200410:55:47

实践上我们扫除了object_usage表的纪录,实践上也就清空了v$object_usage的信息.





SQL>deletefromobject_usage;1rowdeleted.SQL>commit;Commitcomplete.SQL>select*fromv$object_usage;norowsselected



此操纵对数据库没有潜伏的影响,可是请审慎利用.作为实行目标供应.





本文作者:eygle,Oracle手艺存眷者,来自中国最年夜的Oracle手艺论坛itpub.www.eygle.com是作者的团体站点.你可经由过程Guoqiang.Gai@gmail.com来接洽作者.接待手艺切磋交换和链接互换.

原文出处:

http://www.eygle.com/internal/How.to.Monitor.Index.and.How.to.Clean.out.v$object_usage.htm
一些典型的RDBMS功能并不总是在DBaaS系统中可用。例如MySQL学习教程,WindowsAzureSQLDatabase(以前的SQLAzure)是微软的DBaaS产品,提供了一个类似于SQLServer的数据库平台。

小魔女 发表于 2015-1-19 22:07:24

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

小妖女 发表于 2015-1-28 13:26:05

如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。

第二个灵魂 发表于 2015-2-5 21:37:53

多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。

爱飞 发表于 2015-2-13 17:08:08

理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识

分手快乐 发表于 2015-3-11 14:58:07

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

简单生活 发表于 2015-3-19 00:32:18

如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.

不帅 发表于 2015-3-26 23:25:03

然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
页: [1]
查看完整版本: MYSQL编程:在Oracle9i中,怎样监督索引并扫除监督信...