仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1059|回复: 7
打印 上一主题 下一主题

[学习教程] MYSQL编程:在Oracle9i中,怎样监督索引并扫除监督信...

[复制链接]
莫相离 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:44:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用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

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

[oracle@jumperoradata]$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文件中,你能够看到:

[oracle@jumperbdump]$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。

[oracle@jumperoradata]$rm-rfconner[oracle@jumperoradata]$cp-Rconnerbak/conner[oracle@jumperoradata]$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挑优非常有帮助,但是感觉粒度还是不太细。
爱飞 该用户已被删除
5#
发表于 2015-2-13 17:08:08 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
分手快乐 该用户已被删除
6#
发表于 2015-3-11 14:58:07 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
简单生活 该用户已被删除
7#
发表于 2015-3-19 00:32:18 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
不帅 该用户已被删除
8#
发表于 2015-3-26 23:25:03 | 只看该作者
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 20:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表