很多客户的生产系统需要对表空间的剩余空间进行监控,如果你遇到在使用dba_free_space视图进行查询时,出现执行时间较长的情况,你可以尝试使用下面的方法:
找到DBA_FREE_SPACE视图的定义代码,在第三个select后面可能是这样一段hint:/*+ ordered use_nl(u) use_nl(fi) */ (这是11g某个版本view DDL)
你可以重新创建一个新的view,比如tiger_free_space,将上面那段hint的代码,替换成下面内容:
/*+
FULL( "RB")
FULL( "TS")
FULL( "U")
INDEX_RS_ASC( "FI" ("FILE
LEADING( "RB" "TS" "U" "FI" )
USE_HASH( "TS")
USE_NL( "U")
USE_NL( "FI")
*/
用这个view的名字替换dba_free_space,测试一下你原来的表空间监控脚本,看到性能是否有所改善。如果有提高,你就可以在你的监控脚本中使用新的view名字tiger_free_space替换原来dba_free_space了。
某个客户的生产系统,使用新老view的表空间监控SQL执行时间分别是1.6秒和6分钟,对于每天定时执行很多次的SQL,执行效率和节省下来的系统资源也是比较可观的,特别是对DBA的一些即时查询,6分钟的时间确实比较漫长。
这个方法对生产系统完全无损,只是创建了一个自定义的view而已,简单有效。
oracle 的MOS网站也有对这个问题的官方解决方案:
Query Against DBA_FREE_SPACE is Slow After Applying 11.2.0.4 (Doc ID 1904677.1) ,应该也是重建这个view。
本文分享自 老虎刘谈oracle性能优化 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!